diff --git a/.gitignore b/.gitignore index 0b49eb9..ec50a6b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ node_modules .sass-cache local_config.py vilya.log +.vagrant/ +code.local.env diff --git a/.travis.yml b/.travis.yml index 9ae5971..b43574e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,4 +29,4 @@ script: --ignore=tests/issues/test_project_issue.py --ignore=tests/issues/test_issue.py --ignore=tests/test_stat.py --ignore=tests/test_test.py - --ignore=tests/pulls/test_pullrequest.py \ No newline at end of file + --ignore=tests/pulls/test_pullrequest.py diff --git a/LICENSE b/LICENSE index 7c79be9..fc052a9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2014, Douban Inc. +Copyright (c) 2013-2016, Douban Inc. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index fe2f167..a663d28 100644 --- a/README.md +++ b/README.md @@ -15,29 +15,16 @@ Dependency Docker Installation ------------------- -You can use [code](https://registry.hub.docker.com/u/dongweiming/code/) - -``` -$docker pull dongweiming/code -``` - -or just build locally(recommended): - -``` -$cd code -$docker build -t code . -``` - -And launch a bash shell inside the container: - -``` -$docker run -d -p 8080:8000 code gunicorn -w 2 -b 0.0.0.0:8000 app:app # start app -5cf0d1f6a421c53d54662df77dd142978d24b8c76fd72ce1c106506458e1304a -$boot2docker ip -192.168.59.103 -# go web http://192.168.59.103:8080 -$docker run -t -i code /bin/bash -``` +1. Intall [Docker Engine](https://docs.docker.com/engine/installation/) + and [Docker Compose](https://docs.docker.com/compose/install/). +2. Note the Docker host IP address, if you are using a Docker Machine VM, + you can use the `docker-machine ip MACHINE_NAME` to get the IP address. +3. `cp code.local.env.sample code.local.env` + then change the value of `DOUBAN_CODE_DOMAIN` to `http://IP:8200`. +4. `docker-compose build` +5. `docker-compose up -d` +6. `mysql -udouban_code -pmy-code-passwd -h IP -D valentine < vilya/databases/schema.sql` +7. open http://IP:8200 Vagrant Installation(Recommended) -------------------- diff --git a/app.py b/app.py index 5aa4c11..81e9eb6 100644 --- a/app.py +++ b/app.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import re - +from gevent import monkey; monkey.patch_all() from web import app as web from app_sina import app as git_http diff --git a/app_sina.py b/app_sina.py index 88da9bb..7f3d1b5 100644 --- a/app_sina.py +++ b/app_sina.py @@ -4,13 +4,6 @@ import subprocess from wsgiauth.basic import BasicAuth -from gevent.monkey import get_original -try: - select.poll = get_original('select', 'poll') -except AttributeError: - select.poll = get_original('select', 'kqueue') -subprocess.Popen = get_original('subprocess', 'Popen') - from sina import Sina from sina.config import DEFAULT_CONFIG diff --git a/code.env b/code.env new file mode 100644 index 0000000..b3d982e --- /dev/null +++ b/code.env @@ -0,0 +1,14 @@ +# MySQL +MYSQL_ROOT_PASSWORD=my-secret-passwd +MYSQL_DATABASE=valentine +MYSQL_USER=douban_code +MYSQL_PASSWORD=my-code-passwd +MYSQL_ALLOW_EMPTY_PASSWORD=no + +# douban code +DOUBAN_CODE_MEMCACHED_HOSTS=memcached:11311 +DOUBAN_CODE_DOUBANDB_SERVERS=memcached:11311 +DOUBAN_CODE_DOUBANDB_PROXIES= +DOUBAN_CODE_MYSQL_STORE={"farms": {"code_farm": {"master": "mysql:3306:valentine:douban_code:my-code-passwd", "tables": ["*"]}}} +DOUBAN_CODE_REDIS_URI=redis://redis:6379/0 +DOUBAN_CODE_DOMAIN=http://192.168.99.100:8200 diff --git a/code.local.env.sample b/code.local.env.sample new file mode 100644 index 0000000..3c40062 --- /dev/null +++ b/code.local.env.sample @@ -0,0 +1 @@ +DOUBAN_CODE_DOMAIN=http://192.168.99.100:8200 diff --git a/dist/css/app/badge.css b/dist/css/app/badge.css new file mode 100644 index 0000000..d3e333a --- /dev/null +++ b/dist/css/app/badge.css @@ -0,0 +1,5724 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 4, ../../../hub/static/css/app/badge.scss */ +div.section { + float: left; + width: 225px; + height: 155px; + display: inline; + padding: 60px 0; +} + +/* line 11, ../../../hub/static/css/app/badge.scss */ +div.section_center { + text-align: center; +} + +/* line 14, ../../../hub/static/css/app/badge.scss */ +div.badge_name { + margin: 20px; +} + +/* line 17, ../../../hub/static/css/app/badge.scss */ +div.badge_summary { + margin: 0 30px; + color: #999; + text-align: center; +} + +/* line 22, ../../../hub/static/css/app/badge.scss */ +div.badge_all_link { + margin: 30px 30px; +} + +/* line 25, ../../../hub/static/css/app/badge.scss */ +div.cl { + clear: both; +} + +/* line 29, ../../../hub/static/css/app/badge.scss */ +div.members .list { + display: table; +} +/* line 32, ../../../hub/static/css/app/badge.scss */ +div.members .user { + width: 80px; + display: inline-table; +} +/* line 35, ../../../hub/static/css/app/badge.scss */ +div.members .user img { + display: block; + margin: auto; +} +/* line 39, ../../../hub/static/css/app/badge.scss */ +div.members .user a { + display: block; + text-align: center; +} diff --git a/dist/css/app/blame.css b/dist/css/app/blame.css new file mode 100644 index 0000000..fb5cee7 --- /dev/null +++ b/dist/css/app/blame.css @@ -0,0 +1,7787 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files { + position: relative; +} + +/* line 6, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file { + margin-top: 0; +} + +/* line 9, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 15, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta, +.file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 30, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info, +.file-box .meta .info { + float: left; + height: 33px; + max-width: 555px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* line 41, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span, +.file-box .meta .info span { + padding-left: 9px; + margin-left: 5px; + border-left: 1px solid #C1C1C1; + box-shadow: inset 1px 0 0 white; +} + +/* line 50, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 63, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 67, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 76, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat .diffstat-bar { + color: #D8D8D8; +} + +/* line 79, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 85, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes { + display: block; + position: relative; + display: block; + float: left; + margin-right: 10px; +} + +/* line 92, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes label { + font-weight: bold; + margin: 5px 0; +} + +/* line 96, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes input { + margin: 0; +} + +/* line 99, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .button-group, +.file-box .meta .actions .button-group { + float: right; + margin-top: 2px; +} + +/* line 104, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions code, +.file-box .meta .actions code { + background: inherit; + border: none; + font-size: 11px; + color: inherit; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + padding: 0; +} + +/* line 114, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file { + margin: 15px 0; +} + +/* line 118, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 120, ../../../hub/static/css/mod/file-blame-blob.scss */ +.change #files .file, .file-box, .change .file { + margin-bottom: 0; +} + +/* line 122, ../../../hub/static/css/mod/file-blame-blob.scss */ +.blame .line-data { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +/* line 9, ../../../hub/static/css/app/blame.scss */ +.blame table tr.section-first td { + border-top: 1px solid #CCC; +} + +/* line 12, ../../../hub/static/css/app/blame.scss */ +.blame table tr td { + padding: .2em .5em; +} + +/* line 15, ../../../hub/static/css/app/blame.scss */ +.blame .line-number { + background-color: #ECECEC; + color: #AAA; + padding: 0 .5em; + text-align: right; + border-left: 1px solid #DDD; + border-right: 1px solid #DDD; + vertical-align: middle; +} + +/* line 24, ../../../hub/static/css/app/blame.scss */ +.blame .line-data { + background-color: ghostWhite; + white-space: pre; + width: 100%; + vertical-align: middle; +} diff --git a/dist/css/app/center-activity.css b/dist/css/app/center-activity.css new file mode 100644 index 0000000..fc88965 --- /dev/null +++ b/dist/css/app/center-activity.css @@ -0,0 +1,5639 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/flat-hack.scss */ +a.btn i { + padding-right: 5px; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 5, ../../../hub/static/css/app/center-activity.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 12, ../../../hub/static/css/app/center-activity.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 15, ../../../hub/static/css/app/center-activity.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 24, ../../../hub/static/css/app/center-activity.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 27, ../../../hub/static/css/app/center-activity.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* Write/Preview Control style for new PR component */ +/* line 41, ../../../hub/static/css/app/center-activity.scss */ +ul.edit-preview-tabs { + margin: 0 0 5px 0; + line-height: 13px; +} + +/* line 45, ../../../hub/static/css/app/center-activity.scss */ +ul.edit-preview-tabs li { + list-style-type: none; + margin: 0; + display: inline-block; +} + +/* line 50, ../../../hub/static/css/app/center-activity.scss */ +ul.edit-preview-tabs a { + display: inline-block; + padding: 2px 8px; + font-size: 11px; + font-weight: bold; + text-decoration: none; + color: #666; + border: 1px solid transparent; + border-radius: 10px; +} + +/* line 61, ../../../hub/static/css/app/center-activity.scss */ +.previewable-comment-form li.active .write-tab, +.previewable-comment-form li.active .preview-tab { + color: #333; + background: white; + border-color: #BBB; + border-right-color: #DDD; + border-bottom-color: #DDD; +} + +/* Description Component background & help text, from hub.css*/ +/* line 71, ../../../hub/static/css/app/center-activity.scss */ +.comment-form { + position: relative; + margin: -10px 0 10px 0; + padding: 5px; +} + +/* line 77, ../../../hub/static/css/app/center-activity.scss */ +.comment-form p.help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} diff --git a/dist/css/app/center.css b/dist/css/app/center.css new file mode 100644 index 0000000..eb2f46b --- /dev/null +++ b/dist/css/app/center.css @@ -0,0 +1,5931 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/flat-hack.scss */ +a.btn i { + padding-right: 5px; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 6, ../../../hub/static/css/app/center.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 13, ../../../hub/static/css/app/center.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 16, ../../../hub/static/css/app/center.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 25, ../../../hub/static/css/app/center.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 28, ../../../hub/static/css/app/center.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* Write/Preview Control style for new PR component */ +/* line 42, ../../../hub/static/css/app/center.scss */ +ul.edit-preview-tabs { + margin: 0 0 5px 0; + line-height: 13px; +} + +/* line 46, ../../../hub/static/css/app/center.scss */ +ul.edit-preview-tabs li { + list-style-type: none; + margin: 0; + display: inline-block; +} + +/* line 51, ../../../hub/static/css/app/center.scss */ +ul.edit-preview-tabs a { + display: inline-block; + padding: 2px 8px; + font-size: 11px; + font-weight: bold; + text-decoration: none; + color: #666; + border: 1px solid transparent; + border-radius: 10px; +} + +/* line 62, ../../../hub/static/css/app/center.scss */ +.previewable-comment-form li.active .write-tab, +.previewable-comment-form li.active .preview-tab { + color: #333; + background: white; + border-color: #BBB; + border-right-color: #DDD; + border-bottom-color: #DDD; +} + +/* Description Component background & help text, from hub.css*/ +/* line 72, ../../../hub/static/css/app/center.scss */ +.comment-form { + position: relative; + margin: -10px 0 10px 0; + padding: 5px; +} + +/* line 78, ../../../hub/static/css/app/center.scss */ +.comment-form p.help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} diff --git a/dist/css/app/chat.css b/dist/css/app/chat.css new file mode 100644 index 0000000..9b59e24 --- /dev/null +++ b/dist/css/app/chat.css @@ -0,0 +1,6249 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(to bottom, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 11, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.side-avatar { + float: left; + padding: 0px 5px 5px; + vertical-align: top; + margin-left: 0; +} + +/* line 18, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload { + position: relative; + top: -50px; + width: 360px; +} + +/* line 28, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload #file { + position: absolute; + width: 240px; + margin-left: -80px; + opacity: 0.0001; + cursor: pointer; +} + +/* line 36, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 43, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content { + display: block; + background: white; + border: 0px solid; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 49, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content textarea#new_comment_content { + width: 100%; + background: white; +} +/* line 54, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .tabnav { + border-bottom: none; + padding: 10px; +} +/* line 59, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .write-content { + position: relative; + padding: 10px 10px 10px; +} + +/* Zen Mode button hacks for FlatUI */ +/* line 67, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.write-content .enable-fullscreen { + top: 15px; +} + +/* line 71, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.tab-content { + overflow: visible; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 79, ../../../hub/static/css/mod/flatui-comment-form.scss */ + .side-avatar { + padding: 0px; + } + + /* line 85, ../../../hub/static/css/mod/flatui-comment-form.scss */ + form#add-comment-form .form-content .tabnav { + max-width: 100%; + } +} +/* hacks for markdown paragraph content for flatui */ +/* line 4, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0px 0px 0px; +} + +/* line 8, ../../../hub/static/css/mod/flatui-comment-content.scss */ +#summary.mod .header { + position: relative; +} + +/* line 12, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 15, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content input.title-field { + font-size: 20px; + font-weight: bold; + margin-bottom: 5px; + width: 99%; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content textarea { + min-height: 100px; + max-width: 100%; + width: 99%; + margin: 0; +} + +/* line 29, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.form-actions { + background-color: transparent; + border: none; + text-align: right; + margin: 0px; + padding: 10px 0px 0px; +} + +/* line 37, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right { + float: right; +} +/* line 39, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right a.change-header-date { + color: lightgray; +} + +/* line 44, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions { + margin-left: 10px; + display: inline; +} +/* line 47, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions li { + display: inline; +} + +/* line 52, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.comment-body { + padding: 0px; +} + +/* line 56, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body { + padding: 0px; +} + +/* line 4, ../../../hub/static/css/app/chat.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 8, ../../../hub/static/css/app/chat.scss */ +.rooms-right { + float: right; + width: 94px; +} + +/* line 13, ../../../hub/static/css/app/chat.scss */ +.pagehead h2 { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} + +/* line 20, ../../../hub/static/css/app/chat.scss */ +.clearfix { + display: block; +} + +/* line 24, ../../../hub/static/css/app/chat.scss */ +.all_rooms li { + position: relative; + list-style: none; + clear: both; + background: white; + margin: 0; + padding: 0; + border-bottom: 1px solid #eaeaea; +} + +/* line 34, ../../../hub/static/css/app/chat.scss */ +.nav-tabs.nav-stacked > li > a { + padding: 14px 5px; +} + +/* line 38, ../../../hub/static/css/app/chat.scss */ +.del-room { + position: absolute; + right: 0; + z-index: 10; + margin: 0; + top: 13px; + color: rgba(99, 182, 174, 0); +} + +/* line 47, ../../../hub/static/css/app/chat.scss */ +.all_rooms { + height: 686px; + overflow: auto; +} + +/* line 52, ../../../hub/static/css/app/chat.scss */ +.message { + height: 623px; + overflow: auto; + background: white; +} + +/* line 58, ../../../hub/static/css/app/chat.scss */ +#message_input { + height: 63px; + width: 100%; + margin: 0; + padding: 0; +} + +/* line 65, ../../../hub/static/css/app/chat.scss */ +#send_message_button { + height: 63px; + margin: 0; + padding: 0; +} + +/* line 71, ../../../hub/static/css/app/chat.scss */ +.dia_box { + margin-top: 20px; + line-height: 17px; + margin-left: 40px; + margin-bottom: 20px; +} + +/* line 78, ../../../hub/static/css/app/chat.scss */ +.dia_info { + margin-left: 18px; + text-align: left; +} + +/* line 83, ../../../hub/static/css/app/chat.scss */ +.info_date { + color: #808080; + vertical-align: -1px; + white-space: pre; + zoom: 1; +} + +/* line 90, ../../../hub/static/css/app/chat.scss */ +.dia_bg { + min-width: 144px; + max-width: 413px; + margin: 0 8px; + padding: 5px 9px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + position: relative; + background: #f3f3f3; + border: solid 1px #eaeaea; + box-shadow: inset -1px 1px 1px rgba(255, 255, 255, 0.75); +} + +/* line 102, ../../../hub/static/css/app/chat.scss */ +.dia_txt { + min-width: 144px; + max-width: 413px; + margin: 0 8px; + padding: 5px 9px; + border-radius: 5px; + position: relative; +} + +/* line 111, ../../../hub/static/css/app/chat.scss */ +.side-avatar { + float: left; + padding: 0px 5px 5px; + vertical-align: top; + margin-left: 0; + margin-top: 17px; +} + +/* line 119, ../../../hub/static/css/app/chat.scss */ +.side-avatar img { + width: 32px; + height: 32px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} diff --git a/dist/css/app/commit.css b/dist/css/app/commit.css new file mode 100644 index 0000000..fc0151f --- /dev/null +++ b/dist/css/app/commit.css @@ -0,0 +1,9548 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} + +/* line 5, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 2px 0 16px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} +/* line 12, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.deletion, .file-box .data .line_numbers.deletion { + color: #AAA; + background-color: #f7c8c8; +} +/* line 16, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.insertion, .file-box .data .line_numbers.insertion { + color: #AAA; + background-color: #ceffce; +} + +/* line 21, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 24, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .code { + width: 100%; +} + +/* line 28, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side { + overflow-x: none; + display: none; +} + +/* line 33, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side .file-col { + width: 50%; + float: left; + overflow-x: auto; +} + +/* line 40, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table { + border-collapse: collapse; +} + +/* line 44, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 46, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table pre { + border-radius: 0px; +} + +/* line 48, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data table, .file-box .data table { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + line-height: 1.4; +} + +/* line 54, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .file-diff-line span.color { + cursor: default; +} + +/* Comment Bubble */ +/* line 58, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line .add-bubble { + position: absolute; + left: 0; + width: 25px; + height: 16px; + margin-top: 0; + cursor: pointer; + opacity: 0; + color: #4183C4; +} + +/* line 69, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line:hover .add-bubble { + opacity: 1; +} + +/* Comment Bubble icons */ +/* line 72, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 83, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 91, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon-add-comment::before { + content: "\f06f"; +} + +/* line 93, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:first-child:after { + margin: -18px 0 0; +} + +/* line 97, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:after { + background: none repeat scroll 0 0 #fff; + content: ""; + display: block; + height: 2px; + margin: -16px 0 0; + position: absolute; + left: 0px; + width: 938px; +} + +/* line 109, ../../../hub/static/css/mod/file-diff-blob.scss */ +.data .line-numbers-skipped { + position: absolute; + width: 79px; + background-color: #f5f5f5; + border-right: 1px solid #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* line 119, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .skipped-top, .skipped-container .skipped-bottom { + height: 18px; + background-color: #f5f5f5; +} + +/* line 124, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top::before { + background: #fff; + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + display: block; + height: 4px; + position: relative; + top: -1px; + margin-left: -1px; +} + +/* line 140, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 145, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 20px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 5px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 170, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .ellipsis { + margin-top: -10px; +} + +/* line 174, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before, .skipped-container .ellipsis::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 188, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2026"; + padding: 2px 0 0; + top: -4px; +} + +/* line 197, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 206, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 211, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 16px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 44px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 236, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .toggle_whitespace { + margin-top: -10px; +} + +/* line 240, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before, .skipped-container .toggle_whitespace::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 254, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2423"; + padding: 2px 0 0; + top: -4px; +} + +/* line 263, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment-form.scss */ +.show-inline-comment-form { + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment-form.scss */ +tr.inline-comments.show-inline-comment-form .show-inline-comment-form { + display: none; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .comment-count { + overflow: hidden; + padding: 0 !important; + border: solid #DDD; + border-width: 1px 0; + vertical-align: top; + text-align: center !important; +} + +/* line 8, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .counter { + display: inline-block; + padding: 2px 8px 6px; + font-family: 11px/1.2 bold Helvetica,arial,freesans,clean,sans-serif !important; + color: #333 !important; + border: 1px solid #C0CCD0; + border-top: 0; + border-radius: 0 0 3px 3px; + cursor: default !important; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment-form.scss */ +#files .file.show-inline-notes tr.inline-comments { + display: table-row; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .line-comments { + overflow: auto; + padding: 0; + border-top: 1px solid #CCC; + border-bottom: 1px solid #DDD; + background: #fff; + font-family: Helvetica, arial, freesans, clean, sans-serif !important; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form { + max-width: 870px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form form { + margin: 0; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .form-actions { + padding: 0 10px 10px; + margin: 0; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-content .form-actions { + background-color: transparent; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions { + text-align: right; + padding-bottom: 5px; + background: #fff; + border: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions .optional { + display: block; + padding-top: 8px; + float: left; + margin-right: 15px; + padding-top: 3px; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment.scss */ +.inline-comments .comment-holder { + max-width: 850px; + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment.scss */ +.inline-comments .comment { + margin: 5px 0 !important; + border: 1px solid #CACACA; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: #F8F8F8; + font-size: 12px; + background-image: -webkit-linear-gradient(top, #F4FAF6, #D8E5DD); +} + +/* line 8, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-gravatar { + display: inline-block; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-author { + display: inline-block; + max-width: 600px; + height: 33px; + line-height: 33px; + font-weight: bold; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-right { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + ine-height: 33px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + line-height: 33px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/inline-comment.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions { + display: inline-block; + vertical-align: middle; + font-size: 13px; + margin-left: 7px; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + position: relative; + top: 2px; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions li .mini-icon { + -moz-transition: all 0.15s ease-in 0; + -webkit-transition: all 0.15s ease-in 0; + text-decoration: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-date { + color: #939AA0; + text-decoration: none; +} + +/* line 18, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-content { + padding: 0; + color: #333; + font-size: 12px; + background: #FBFBFB; +} + +/* line 19, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 20, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions li { + list-style-type: none; + float: left; + margin: 0 0 0 8px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 1, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji { + margin-right: 10px; +} +/* line 4, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .description { + text-align: center; + color: #999; +} +/* line 9, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis { + overflow-x: hidden; + overflow-y: scroll; + word-wrap: break-word; + word-break: break-all; + width: 290px; + height: 260px; +} +/* line 17, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a { + display: block; + float: left; + width: 25px; + height: 25px; + padding: 2px; + border: 1px solid white; +} +/* line 24, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a:hover { + background: #eef; + border: 1px solid #aad; +} + +/* line 2, ../../../hub/static/css/mod/comment.scss */ +.full-comment .comment-row { + padding: 0; + background: #FBFBFB; + margin-bottom: 20px; + border-radius: 3px; + border: 3px solid #eee; +} + +/* line 9, ../../../hub/static/css/mod/comment.scss */ +.full-comment .comment-row:before { + position: relative; + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; +} + +/* line 22, ../../../hub/static/css/mod/comment.scss */ +.full-comment .side-avatar { + position: relative; + float: left; + border-radius: 3px; + margin-left: -70px; +} + +/* line 28, ../../../hub/static/css/mod/comment.scss */ +.full-comment { + width: 63em; + max-width: 100%; + margin-left: auto; +} + +/* line 33, ../../../hub/static/css/mod/comment.scss */ +.full-comment .comment-header { + height: 23px; + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 3px 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#f8fbfc, #dde8eb); + background-image: linear-gradient(#f8f8f8, #e1e1e1); +} + +/* line 46, ../../../hub/static/css/mod/comment.scss */ +#new_comment .form-content { + width: auto; + position: relative; + border: 3px solid #EEE; +} + +/* line 51, ../../../hub/static/css/mod/comment.scss */ +.form-content:before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; + position: absolute; +} + +/* line 15, ../../../hub/static/css/app/commit.scss */ +.quick-emoji .emojis { + height: 120px; +} + +/* line 19, ../../../hub/static/css/app/commit.scss */ +#files .comment p { + padding: 5px; + margin: 0; +} diff --git a/dist/css/app/commits.css b/dist/css/app/commits.css new file mode 100644 index 0000000..b9f71e4 --- /dev/null +++ b/dist/css/app/commits.css @@ -0,0 +1,7683 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +/* line 1, ../../../hub/static/css/mod/pull-new.scss */ +.pull-heading .btn-change { + float: right; + margin: 9px 10px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/pull-new.scss */ +.editor-expander { + cursor: pointer; +} + +/* line 10, ../../../hub/static/css/mod/pull-new.scss */ +.pull-head { + padding: 10px; + border: 1px solid whiteSmoke; + border-top: none; + border-bottom: 2px solid #EEE; + border-radius: 5px; +} + +/* line 18, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description { + font-size: 14px; + margin: 0; + color: #333; + font-weight: 300; +} + +/* line 24, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description a { + font-weight: bold; + color: black; +} + +/* line 28, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description .commit-ref { + margin: 0 3px; +} + +/* line 32, ../../../hub/static/css/mod/pull-new.scss */ +.commit-ref { + padding: 2px 5px; + line-height: 19px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + font-weight: normal; + color: white; + text-shadow: -1px -1px 0 black; + text-decoration: none; + background: #787878; + background: -moz-linear-gradient(#787878, #282828); + background: -webkit-linear-gradient(#787878, #282828); + border-radius: 3px; +} + +/* line 46, ../../../hub/static/css/mod/pull-new.scss */ +.commit-ref .project { + font-weight: normal; + color: #CCC; +} + +/* line 51, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor { + margin: 15px 0 20px; + background: url("http://t.douban.com/img/files/file-1363274223.gif") 50% 80px no-repeat; +} + +/* line 55, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .chooser-box { + float: left; + width: 420px; +} + +/* line 59, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .chooser-box.head { + float: right; +} + +/* line 62, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor table.reposha { + margin: 15px 0 0 0; + width: 100%; +} + +/* line 66, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .commit-preview .message, +.range-editor .commit-preview p.error { + margin: 10px 0 0 0; + background: #F7F8F9; + border: 1px solid #DDD; + border-bottom: none; + border-radius: 3px; +} + +/* line 74, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .form-actions { + margin: 10px 0 0; + text-align: right; + padding-bottom: 5px; + padding: 0; + background-color: inherit; + border-top: none; +} + +/* line 83, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box { + padding: 0 10px 10px; + background: white; + background: -moz-linear-gradient(white, #F1F1F1); + background: -webkit-linear-gradient(white, #F1F1F1); + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 91, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box h3 { + margin: 0 0 0 -10px; + width: 100%; + padding: 13px 10px 10px; + font-size: 16px; + line-height: 1.2; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: #FBFBFB; + background: -moz-linear-gradient(#FBFBFB, #F2F2F2); + background: -webkit-linear-gradient(#FBFBFB, #F2F2F2); + border-top-left-radius: 5px; + border-bottom: 1px solid white; +} + +/* line 105, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box .fakerule { + margin: 0 0 0 -10px; + width: 100%; + height: 1px; + padding: 0 10px; + font-size: 1px; + line-height: 1px; + background: #DDD; +} + +/* line 115, ../../../hub/static/css/mod/pull-new.scss */ +.reposha td.repo { + width: 1%; + white-space: nowrap; +} + +/* line 119, ../../../hub/static/css/mod/pull-new.scss */ +.reposha .repo .at { + padding-right: 5px; + color: #666; +} + +/* line 123, ../../../hub/static/css/mod/pull-new.scss */ +.reposha .sha { + text-align: left; +} + +/* line 126, ../../../hub/static/css/mod/pull-new.scss */ +.reposha input[type="text"] { + width: 98%; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + line-height: 20px; + color: #444; +} + +/* following commit-preview styles are also used in commits.html */ +/* line 136, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview { + margin: 10px 0 0 0; + font-size: 11px; +} + +/* line 140, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name { + margin: 0; + height: 20px; + line-height: 20px; + font-size: 12px; + color: #5B6375; +} + +/* line 147, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name .avatar { + float: left; + margin-right: 5px; + width: 16px; + height: 16px; + padding: 1px; + background: white; + border: 1px solid #CEDADF; +} + +/* line 156, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name a { + font-weight: bold; + color: black; +} + +/* line 160, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name .date { + color: #5B6375; +} + +/* line 163, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message, +.commit-preview p.error { + clear: both; + padding: 5px; + background: #EAF2F5; + border: 1px solid #BEDCE7; +} + +/* line 170, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message pre { + font-size: 11px; + color: #333; + white-space: pre-wrap; + word-wrap: break-word; + border: none; +} + +/* line 177, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message p.commit-id { + margin: 5px 0 0 0; + padding: 0; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 11px; +} + +/* line 184, ../../../hub/static/css/mod/pull-new.scss */ +.new-pull-request .pull-tabs { + clear: both; +} + +/* line 188, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-commit::before { + content: "\f01f"; +} + +/* line 191, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-discussion::before { + content: "\f04f"; +} + +/* line 194, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-diff::before { + content: "\f04d"; +} + +/* line 198, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form { + margin: 0; +} + +/* line 201, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 208, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 211, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form .preview-content { + background: white; +} + +/* line 215, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 224, ../../../hub/static/css/mod/pull-new.scss */ +.pull-dest-repo a { + font-size: 12px; + font-weight: bold; + padding: 5px 0; +} + +/* line 229, ../../../hub/static/css/mod/pull-new.scss */ +.pull-dest-repo p { + font-size: 11px; + color: #999; + margin: 5px 0 15px 0; +} + +/* line 2, ../../../hub/static/css/mod/compare.scss */ +.compare-range { + margin-top: -15px; + float: right; +} + +/* line 7, ../../../hub/static/css/mod/compare.scss */ +.compare-range .switch { + display: inline-block; + width: 16px; + height: 16px; + text-indent: -9999px; + background: url("/static/img/switch_icon.png") 0 0 no-repeat; +} + +/* line 15, ../../../hub/static/css/mod/compare.scss */ +.commit-ref { + padding: 2px 5px; + line-height: 19px; + font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; + font-size: 12px; + font-weight: normal; + color: white; + text-shadow: -1px -1px 0 black; + text-decoration: none; + background: #787878; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#787878',endColorstr='#282828')"; + border-radius: 3px; +} + +/* line 29, ../../../hub/static/css/mod/compare.scss */ +#compare p.subtext { + margin: -15px 0 10px 0; + color: #666; +} + +/* line 34, ../../../hub/static/css/mod/compare.scss */ +.rule, hr { + clear: both; + margin: 15px 0; + height: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 1px solid #DDD; +} + +/* line 43, ../../../hub/static/css/mod/compare.scss */ +.commits-condensed { + margin-top: 15px; + border: 1px solid #DDD; + border-width: 1px 1px 0 1px; +} + +/* line 49, ../../../hub/static/css/mod/compare.scss */ +table { + border-collapse: collapse; + border-spacing: 0; + font-size: 100%; + font: inherit; +} + +/* line 56, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + position: absolute; + left: 51px; + top: 15px; +} + +/* line 69, ../../../hub/static/css/mod/compare.scss */ +.bubble { + padding: 3px; + background: #EEE; + border-radius: 3px; +} + +/* line 75, ../../../hub/static/css/mod/compare.scss */ +.new-comments .bubble .comment { + margin: 0; +} + +/* line 78, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment { + margin: 10px 0; + border: 1px solid #CACACA; +} + +/* line 83, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: #F8F8F8; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8',endColorstr='#e1e1e1')"; +} + +/* line 91, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment > .body { + position: relative; + padding: 0; + color: #333; + font-size: 12px; + background: #FBFBFB; +} + +/* line 99, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble { + margin: 20px 0; + padding-left: 60px; + position: relative; +} + +/* line 105, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble > .avatar { + position: relative; + float: left; + margin-left: -60px; +} + +/* line 111, ../../../hub/static/css/mod/compare.scss */ +.comment .content-body { + padding: 10px; + font-size: 13px; +} + +/* line 116, ../../../hub/static/css/mod/compare.scss */ +.markdown-body { + font-size: 14px; + line-height: 1.6; +} + +/* line 121, ../../../hub/static/css/mod/compare.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body li, .markdown-body table, .markdown-body pre { + margin: 15px 0; +} + +/* line 125, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta p.author { + margin: 0; + float: left; + max-width: 600px; + font-size: 12px; + height: 33px; + line-height: 33px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* line 138, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta p.info { + float: right; + margin: 0; + font-size: 11px; + height: 33px; + line-height: 33px; +} + +/* line 145, ../../../hub/static/css/mod/compare.scss */ +a.commit-ref:hover { + text-shadow: -1px -1px 0 #04284B; + background: #74A4D4; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#74a4d4',endColorstr='#2a5177')"; + text-decoration: none; +} + +/* line 152, ../../../hub/static/css/mod/compare.scss */ +#compare h2 { + font-size: 20px; +} + +/* line 156, ../../../hub/static/css/mod/compare.scss */ +.commit-preview { + margin: 10px 0 0 0; + font-size: 11px; +} + +/* line 161, ../../../hub/static/css/mod/compare.scss */ +form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 166, ../../../hub/static/css/mod/compare.scss */ +.commit-preview > p { + margin: 16px 0; + font-size: 14px; + text-align: center; +} + +/* compare-popup related styles copied from hub.css */ +/* line 173, ../../../hub/static/css/mod/compare.scss */ +.mini-icon-remove-close::before { + content: ""; +} + +/* line 174, ../../../hub/static/css/mod/compare.scss */ +#compare-popup { + position: absolute; + top: 159px; + left: 407px; + z-index: 100; +} + +/* line 180, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .popup { + position: relative; + border-radius: 5px; + box-shadow: 0 0 18px rgba(0, 0, 0, 0.4); +} + +/* line 181, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .content { + width: 425px; + color: #333; + font-size: 12px; + padding: 10px; + border-radius: 4px; + background: white; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='white',endColorstr='#f4f9fb')"; +} + +/* line 182, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .form-actions { + margin: 10px 0 0; + background-color: #fff; + text-align: right; +} + +/* line 183, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .close { + position: absolute; + top: 4px; + right: 5px; + padding: 2px; +} + +/* line 184, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .close .mini-icon-remove-close { + line-height: 16px; + height: 16px; + color: #CCC; +} + +/* line 185, ../../../hub/static/css/mod/compare.scss */ +#compare-popup input[type="text"] { + width: 96%; + padding: 5px 5px; + font-size: 12px; +} + +/* Like these */ +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} diff --git a/dist/css/app/compare.css b/dist/css/app/compare.css new file mode 100644 index 0000000..cfbc57a --- /dev/null +++ b/dist/css/app/compare.css @@ -0,0 +1,8935 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +/* tabs */ +/* line 3, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs { + margin: 15px 0 15px 0; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #555; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: #E8E8E8; + background: -moz-linear-gradient(#E8E8E8, #D2D2D2); + background: -webkit-linear-gradient(#E8E8E8, #D2D2D2); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8e8e8',endColorstr='#d2d2d2')"; + border: 1px solid #D1D1D1; + border-bottom-color: #BBB; + border-radius: 3px; +} + +/* line 18, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li { + list-style-type: none; + display: inline; + line-height: 24px; +} + +/* line 23, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li:first-child a.selected { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +/* line 27, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li:first-child a { + border-left: none; +} + +/* line 30, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li.active a { + color: #333; + background: white; + background: -moz-linear-gradient(white, #F2F2F2); + background: -webkit-linear-gradient(white, #F2F2F2); +} + +/* line 36, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs a { + float: left; + height: 24px; + padding: 0 7px; + color: #666; + font-weight: bold; + text-decoration: none; + border-right: 1px solid #ABABAB; + border-left: 1px solid #F6F6F6; +} + +/* line 46, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs .mini-icon { + vertical-align: middle; + color: #888; +} + +/* line 50, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs .counter { + display: inline-block; + position: relative; + top: -1px; + margin-left: 2px; + line-height: 12px; + padding: 1px 3px 0 3px; + font-size: 9px; + background: #ECECEC; + border: 1px solid #AFAFAF; + border-right-color: #ECECEC; + border-bottom-color: #ECECEC; + border-radius: 2px; +} + +/* Like these */ +/* line 2, ../../../hub/static/css/mod/compare.scss */ +.compare-range { + margin-top: -15px; + float: right; +} + +/* line 7, ../../../hub/static/css/mod/compare.scss */ +.compare-range .switch { + display: inline-block; + width: 16px; + height: 16px; + text-indent: -9999px; + background: url("/static/img/switch_icon.png") 0 0 no-repeat; +} + +/* line 15, ../../../hub/static/css/mod/compare.scss */ +.commit-ref { + padding: 2px 5px; + line-height: 19px; + font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; + font-size: 12px; + font-weight: normal; + color: white; + text-shadow: -1px -1px 0 black; + text-decoration: none; + background: #787878; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#787878',endColorstr='#282828')"; + border-radius: 3px; +} + +/* line 29, ../../../hub/static/css/mod/compare.scss */ +#compare p.subtext { + margin: -15px 0 10px 0; + color: #666; +} + +/* line 34, ../../../hub/static/css/mod/compare.scss */ +.rule, hr { + clear: both; + margin: 15px 0; + height: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 1px solid #DDD; +} + +/* line 43, ../../../hub/static/css/mod/compare.scss */ +.commits-condensed { + margin-top: 15px; + border: 1px solid #DDD; + border-width: 1px 1px 0 1px; +} + +/* line 49, ../../../hub/static/css/mod/compare.scss */ +table { + border-collapse: collapse; + border-spacing: 0; + font-size: 100%; + font: inherit; +} + +/* line 56, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + position: absolute; + left: 51px; + top: 15px; +} + +/* line 69, ../../../hub/static/css/mod/compare.scss */ +.bubble { + padding: 3px; + background: #EEE; + border-radius: 3px; +} + +/* line 75, ../../../hub/static/css/mod/compare.scss */ +.new-comments .bubble .comment { + margin: 0; +} + +/* line 78, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment { + margin: 10px 0; + border: 1px solid #CACACA; +} + +/* line 83, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: #F8F8F8; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8',endColorstr='#e1e1e1')"; +} + +/* line 91, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment > .body { + position: relative; + padding: 0; + color: #333; + font-size: 12px; + background: #FBFBFB; +} + +/* line 99, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble { + margin: 20px 0; + padding-left: 60px; + position: relative; +} + +/* line 105, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble > .avatar { + position: relative; + float: left; + margin-left: -60px; +} + +/* line 111, ../../../hub/static/css/mod/compare.scss */ +.comment .content-body { + padding: 10px; + font-size: 13px; +} + +/* line 116, ../../../hub/static/css/mod/compare.scss */ +.markdown-body { + font-size: 14px; + line-height: 1.6; +} + +/* line 121, ../../../hub/static/css/mod/compare.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body li, .markdown-body table, .markdown-body pre { + margin: 15px 0; +} + +/* line 125, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta p.author { + margin: 0; + float: left; + max-width: 600px; + font-size: 12px; + height: 33px; + line-height: 33px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* line 138, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta p.info { + float: right; + margin: 0; + font-size: 11px; + height: 33px; + line-height: 33px; +} + +/* line 145, ../../../hub/static/css/mod/compare.scss */ +a.commit-ref:hover { + text-shadow: -1px -1px 0 #04284B; + background: #74A4D4; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#74a4d4',endColorstr='#2a5177')"; + text-decoration: none; +} + +/* line 152, ../../../hub/static/css/mod/compare.scss */ +#compare h2 { + font-size: 20px; +} + +/* line 156, ../../../hub/static/css/mod/compare.scss */ +.commit-preview { + margin: 10px 0 0 0; + font-size: 11px; +} + +/* line 161, ../../../hub/static/css/mod/compare.scss */ +form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 166, ../../../hub/static/css/mod/compare.scss */ +.commit-preview > p { + margin: 16px 0; + font-size: 14px; + text-align: center; +} + +/* compare-popup related styles copied from hub.css */ +/* line 173, ../../../hub/static/css/mod/compare.scss */ +.mini-icon-remove-close::before { + content: ""; +} + +/* line 174, ../../../hub/static/css/mod/compare.scss */ +#compare-popup { + position: absolute; + top: 159px; + left: 407px; + z-index: 100; +} + +/* line 180, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .popup { + position: relative; + border-radius: 5px; + box-shadow: 0 0 18px rgba(0, 0, 0, 0.4); +} + +/* line 181, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .content { + width: 425px; + color: #333; + font-size: 12px; + padding: 10px; + border-radius: 4px; + background: white; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='white',endColorstr='#f4f9fb')"; +} + +/* line 182, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .form-actions { + margin: 10px 0 0; + background-color: #fff; + text-align: right; +} + +/* line 183, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .close { + position: absolute; + top: 4px; + right: 5px; + padding: 2px; +} + +/* line 184, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .close .mini-icon-remove-close { + line-height: 16px; + height: 16px; + color: #CCC; +} + +/* line 185, ../../../hub/static/css/mod/compare.scss */ +#compare-popup input[type="text"] { + width: 96%; + padding: 5px 5px; + font-size: 12px; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin-top: 10px; +} + +/* line 6, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 13, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 27, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 37, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 41, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 45, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 50, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} + +/* line 59, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed { + margin-top: 0; + border: none; + background-color: white; +} + +/* line 64, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td { + padding: 4px; + vertical-align: top; + border-top: 1px solid #E2EAEE; +} + +/* line 69, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.gravatar { + width: 29px; + padding: 5px; +} + +/* line 74, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:first-child td { + border-top: 0; +} + +/* line 77, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:nth-child(2n) td { + background: #F7FBFC; +} + +/* line 80, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar { + display: block; + width: 16px; + height: 16px; + line-height: 1px; + padding: 1px; + border: 1px solid #DDD; + background: white; +} + +/* line 89, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar a { + display: inline-block; +} + +/* line 92, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author { + padding-left: 0; + color: #666; + width: 100px; + font-weight: bold; +} + +/* line 98, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author span.commit-author { + display: inline-block; + width: 100px; + text-overflow: ellipsis; + overflow: hidden; + line-height: 22px; +} + +/* line 105, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author a { + color: #333; +} + +/* line 108, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message { + padding-left: 0; +} + +/* line 111, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed code { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + background: inherit; +} + +/* line 115, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message code { + line-height: 22px; +} + +/* line 118, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message a { + color: #333; +} + +/* line 121, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed .commit-desc pre { + margin-top: 5px; + margin-bottom: 4px; + border-left: 1px solid #E5E5E5; + padding-left: 8px; + font-size: 11px; + font-weight: normal; + color: #596063; +} + +/* line 130, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta { + width: 1%; + text-align: right; + white-space: nowrap; + padding-right: 10px; +} + +/* line 136, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta code { + line-height: 22px; +} + +/* following style for new-pull 'xxx add commits' commits-condense style */ +/* line 142, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin: 0; + font-size: 12px; +} + +/* line 147, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits .commit { + width: 59px; + padding-right: 10px; +} + +/* line 151, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits code { + border: none; +} + +/* line 154, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.message { + /* width: 70%;*/ +} + +/* line 157, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.date { + text-align: right; +} + +/* line 161, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed code { + white-space: normal; +} + +/* line 164, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed pre { + white-space: pre-wrap; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} + +/* line 5, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 2px 0 16px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} +/* line 12, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.deletion, .file-box .data .line_numbers.deletion { + color: #AAA; + background-color: #f7c8c8; +} +/* line 16, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.insertion, .file-box .data .line_numbers.insertion { + color: #AAA; + background-color: #ceffce; +} + +/* line 21, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 24, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .code { + width: 100%; +} + +/* line 28, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side { + overflow-x: none; + display: none; +} + +/* line 33, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side .file-col { + width: 50%; + float: left; + overflow-x: auto; +} + +/* line 40, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table { + border-collapse: collapse; +} + +/* line 44, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 46, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table pre { + border-radius: 0px; +} + +/* line 48, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data table, .file-box .data table { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + line-height: 1.4; +} + +/* line 54, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .file-diff-line span.color { + cursor: default; +} + +/* Comment Bubble */ +/* line 58, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line .add-bubble { + position: absolute; + left: 0; + width: 25px; + height: 16px; + margin-top: 0; + cursor: pointer; + opacity: 0; + color: #4183C4; +} + +/* line 69, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line:hover .add-bubble { + opacity: 1; +} + +/* Comment Bubble icons */ +/* line 72, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 83, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 91, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon-add-comment::before { + content: "\f06f"; +} + +/* line 93, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:first-child:after { + margin: -18px 0 0; +} + +/* line 97, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:after { + background: none repeat scroll 0 0 #fff; + content: ""; + display: block; + height: 2px; + margin: -16px 0 0; + position: absolute; + left: 0px; + width: 938px; +} + +/* line 109, ../../../hub/static/css/mod/file-diff-blob.scss */ +.data .line-numbers-skipped { + position: absolute; + width: 79px; + background-color: #f5f5f5; + border-right: 1px solid #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* line 119, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .skipped-top, .skipped-container .skipped-bottom { + height: 18px; + background-color: #f5f5f5; +} + +/* line 124, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top::before { + background: #fff; + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + display: block; + height: 4px; + position: relative; + top: -1px; + margin-left: -1px; +} + +/* line 140, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 145, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 20px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 5px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 170, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .ellipsis { + margin-top: -10px; +} + +/* line 174, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before, .skipped-container .ellipsis::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 188, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2026"; + padding: 2px 0 0; + top: -4px; +} + +/* line 197, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 206, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 211, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 16px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 44px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 236, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .toggle_whitespace { + margin-top: -10px; +} + +/* line 240, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before, .skipped-container .toggle_whitespace::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 254, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2423"; + padding: 2px 0 0; + top: -4px; +} + +/* line 263, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* TODO FIXME 'View File' in file-blob requires styles +in this file, but it hides the show-inline-notes check button +therefore the below Hotfix is useless when you enables this */ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files { + position: relative; +} + +/* line 6, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file { + margin-top: 0; +} + +/* line 9, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 15, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta, +.file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 30, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info, +.file-box .meta .info { + float: left; + height: 33px; + max-width: 555px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* line 41, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span, +.file-box .meta .info span { + padding-left: 9px; + margin-left: 5px; + border-left: 1px solid #C1C1C1; + box-shadow: inset 1px 0 0 white; +} + +/* line 50, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 63, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 67, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 76, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat .diffstat-bar { + color: #D8D8D8; +} + +/* line 79, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 85, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes { + display: block; + position: relative; + display: block; + float: left; + margin-right: 10px; +} + +/* line 92, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes label { + font-weight: bold; + margin: 5px 0; +} + +/* line 96, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes input { + margin: 0; +} + +/* line 99, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .button-group, +.file-box .meta .actions .button-group { + float: right; + margin-top: 2px; +} + +/* line 104, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions code, +.file-box .meta .actions code { + background: inherit; + border: none; + font-size: 11px; + color: inherit; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + padding: 0; +} + +/* line 114, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file { + margin: 15px 0; +} + +/* line 118, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 120, ../../../hub/static/css/mod/file-blame-blob.scss */ +.change #files .file, .file-box, .change .file { + margin-bottom: 0; +} + +/* line 122, ../../../hub/static/css/mod/file-blame-blob.scss */ +.blame .line-data { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* Hotfix for show-inline-notes option button */ +/* line 20, ../../../hub/static/css/app/compare.scss */ +span .show-inline-notes label { + display: inline; +} diff --git a/dist/css/app/dashboard.css b/dist/css/app/dashboard.css new file mode 100644 index 0000000..b7148da --- /dev/null +++ b/dist/css/app/dashboard.css @@ -0,0 +1,8541 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.svg") format("svg"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 8, ../../../hub/static/css/mod/source.scss */ +.last-bar { + margin-top: 5px; +} + +/* line 11, ../../../hub/static/css/mod/source.scss */ +p.last-commit { + margin: 10px 0 -5px 0; + font-size: 11px; + color: #888; +} +/* line 16, ../../../hub/static/css/mod/source.scss */ +p.last-commit .mini-icon { + color: #BBB; + position: relative; + top: 1px; +} + +/* line 22, ../../../hub/static/css/mod/source.scss */ +.pr-latest-branch { + color: #888; + margin-top: 10px; + line-height: 27px; + border-bottom: 1px solid #DDD; + padding-bottom: 10px; +} + +/* line 29, ../../../hub/static/css/mod/source.scss */ +.pr-latest-branch #pullrequest-btn { + margin-right: 5px; +} + +/* line 32, ../../../hub/static/css/mod/source.scss */ +.mini-icon, .mega-icon { + line-height: 1; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + text-decoration: none; +} + +/* line 43, ../../../hub/static/css/mod/source.scss */ +.commit-tease { + margin: 10px 0; + padding: 8px 8px 0; + background: #EEE; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 50, ../../../hub/static/css/mod/source.scss */ +.commit-tease p.commit-title { + margin: 0 0 6px 0; +} + +/* line 53, ../../../hub/static/css/mod/source.scss */ +.commit .commit-title, .commit .commit-title a { + color: #4E575B; +} + +/* line 56, ../../../hub/static/css/mod/source.scss */ +.commit-tease .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 65, ../../../hub/static/css/mod/source.scss */ +.commit-tease .sha-block { + float: right; + color: #888; +} + +/* line 69, ../../../hub/static/css/mod/source.scss */ +.commit .sha-block, .commit .sha { + font-size: 11px; + font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; +} + +/* line 73, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship { + font-size: 12px; + color: #999; + margin-left: -4px; + margin-bottom: -4px; + margin-top: -2px; +} +/* line 79, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} +/* line 85, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship a, .commit-tease .authorship span { + color: #444; + text-decoration: none; + font-weight: bold; +} +/* line 89, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship a:hover, .commit-tease .authorship span:hover { + text-decoration: underline; +} + +/* line 95, ../../../hub/static/css/mod/source.scss */ +.commit-tease .mini-icon-clippy { + margin-right: 5px; + float: right; +} + +/* line 99, ../../../hub/static/css/mod/source.scss */ +.mini-icon-clippy { + display: inline-block; + height: 16px; + width: 16px; + background-color: transparent; + background-position: 0 0; + background-repeat: no-repeat; + vertical-align: text-bottom; + background-image: url("/static/img/clippy.png"); +} + +/* line 109, ../../../hub/static/css/mod/source.scss */ +.mini-icon-u-list:before { + content: "\f061"; +} + +/* line 110, ../../../hub/static/css/mod/source.scss */ +.mini-icon-text-file:before { + content: "\f211"; +} + +/* line 111, ../../../hub/static/css/mod/source.scss */ +.mini-icon-code-file:before { + content: "\f210"; +} + +/* line 112, ../../../hub/static/css/mod/source.scss */ +.mini-icon-directory:before { + content: "\f016"; +} + +/* line 113, ../../../hub/static/css/mod/source.scss */ +.mini-icon-submodule:before { + content: "\f017"; +} + +/* line 115, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li { + padding: 3px 0 2px 0; + border-top: 1px solid #eee; +} + +/* line 116, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles a.mode-040000 { + color: #333; +} + +/* line 117, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li a { + display: block; +} + +/* line 118, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li:hover { + background: #eee; +} + +/* line 119, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li a.warn-bad { + color: red; +} + +/* line 1, ../../../hub/static/css/mod/source-edit.scss */ +.raw { + overflow: visible; +} + +/* line 2, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop { + float: right; + width: 137px; + height: 140px; + margin-top: -140px; + margin-right: 20px; + overflow: hidden; + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop .popic { + display: block; + position: absolute; + bottom: -115px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; +} + +/* line 19, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop:hover .popic { + bottom: -10px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; +} + +/* Like these */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* Highlight style from pygments */ +/* line 2, ../../../hub/static/css/mod/code-highlight.scss */ +.code .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/code-highlight.scss */ +.code { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/code-highlight.scss */ +.code .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/code-highlight.scss */ +.code .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/code-highlight.scss */ +.code .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/code-highlight.scss */ +.code .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/code-highlight.scss */ +.code .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/code-highlight.scss */ +.code .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/code-highlight.scss */ +.code .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/code-highlight.scss */ +.code .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/code-highlight.scss */ +.code .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/code-highlight.scss */ +.code .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/code-highlight.scss */ +.code .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/code-highlight.scss */ +.code .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/file-browser.scss */ +#tree, #blob { + margin: 0 0 27px; +} + +/* line 3, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser { + width: 100%; + margin: 0; + border-radius: 3px; + border: 1px solid #CACACA; +} + +/* line 4, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser th { + text-align: left; + font-weight: bold; + padding: 6px 3px; + color: #555; + text-shadow: 0 1px 0 #fff; + border-bottom: 1px solid #d8d8d8; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 5, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser td { + background: #f8f8f8; + border-bottom: 1px solid #eee; + padding: 7px 3px; + color: #484848; + vertical-align: middle; +} + +/* line 6, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser tbody tr:last-child td { + border-bottom: 0; +} + +/* line 7, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser .message { + min-width: 270px; + max-width: 484px; +} + +/* line 8, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser td a.message { + color: #484848; +} + +/* line 10, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser i, .file i, .commit-group-item i { + filter: alpha(opacity=70); + opacity: .7; +} + +/* line 11, ../../../hub/static/css/mod/file-browser.scss */ +.file .error { + text-align: center; + margin: 30px; + color: #666; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} diff --git a/dist/css/app/docs.css b/dist/css/app/docs.css new file mode 100644 index 0000000..a2000f0 --- /dev/null +++ b/dist/css/app/docs.css @@ -0,0 +1,5872 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav { + clear: both; + font-size: 120%; + margin: 15px 0 25px; + color: #34833E; + padding: 4px 0 6px 0; +} + +/* line 2, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav a { + color: #34833E; + text-indent: 5px; +} + +/* line 3, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav table { + width: 100%; +} + +/* line 4, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav table td { + vertical-align: top; +} + +/* line 5, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav .bigger::before { + font-size: 160%; + vertical-align: bottom; + line-height: 16px; +} + +/* line 6, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav .biggest::before { + font-size: 200%; + vertical-align: bottom; + line-height: 10px; +} + +/* line 7, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav .search::before { + font-size: 130%; + vertical-align: bottom; + line-height: 13px; +} + +/* line 9, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav tr.first td { + width: 33%; + padding: 0 6px 0px 6px; +} + +/* line 10, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav tr.second td { + padding-top: 9px; +} + +/* line 12, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav { + border-bottom: 1px solid #CCC; +} + +/* line 1, ../../../hub/static/css/mod/docs-page.scss */ +.pages_doc { + border-radius: 5px; + border: 2px solid #394249; + float: right; + padding: 5px; + margin: 5px 0 3px 15px; + font-weight: bold; + color: #fbfbf9; + font-size: 110%; + height: 35px; + width: 280px; + background: #739890 url("/static/img/smokinggal.jpg") no-repeat scroll 25px -175px; +} + +/* line 8, ../../../hub/static/css/mod/docs-page.scss */ +.pages_doc a { + font-weight: bold; + color: #435159; + text-shadow: -1px +0px 7px #f9f0e2; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 8, ../../../hub/static/css/app/docs.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 9, ../../../hub/static/css/app/docs.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 10, ../../../hub/static/css/app/docs.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 11, ../../../hub/static/css/app/docs.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 12, ../../../hub/static/css/app/docs.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 14, ../../../hub/static/css/app/docs.scss */ +.inner-toc-wrapper { + background-color: white; + clear: both; + float: right; + margin: 4px 0 2px 8px; + padding: 0 0 8px 8px; +} + +/* line 15, ../../../hub/static/css/app/docs.scss */ +.inner-toc { + border-left: 8px solid #D9F3DC; + padding-left: .6em; + font-size: 18px; + line-height: 30px; +} + +/* line 16, ../../../hub/static/css/app/docs.scss */ +.inner-toc a { + color: #34833E; +} + +/* line 17, ../../../hub/static/css/app/docs.scss */ +.inner-toc ul li { + line-height: 1.5em; +} + +/* line 19, ../../../hub/static/css/app/docs.scss */ +.actions { + float: right; + margin-bottom: 5px; +} + +/* line 21, ../../../hub/static/css/app/docs.scss */ +.search { + float: right; +} + +/* Patching for sphinx */ +/* line 25, ../../../hub/static/css/app/docs.scss */ +a.headerlink { + visibility: hidden; + color: #D9F3DC; +} + +/* line 27, ../../../hub/static/css/app/docs.scss */ +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 { + visibility: visible; +} + +/* line 30, ../../../hub/static/css/app/docs.scss */ +p.admonition-title { + font-weight: bold; +} + +/* line 32, ../../../hub/static/css/app/docs.scss */ +.admonition, div.warning, div.sidebar { + padding: 2px 5px 2px 18px; + background-color: #ccc; + border-radius: 8px; +} + +/* line 33, ../../../hub/static/css/app/docs.scss */ +.admonition { + background-color: #D9F3DC; +} + +/* line 34, ../../../hub/static/css/app/docs.scss */ +.admonition p.admonition-title { + color: #34833E; +} + +/* line 35, ../../../hub/static/css/app/docs.scss */ +.warning { + background-color: #FCD2D1; +} + +/* line 36, ../../../hub/static/css/app/docs.scss */ +.warning p.admonition-title { + color: #f4433E; +} + +/* line 37, ../../../hub/static/css/app/docs.scss */ +.genindex a { + display: block; +} + +/* line 38, ../../../hub/static/css/app/docs.scss */ +.genindex a.sublink { + margin-left: 3em; +} diff --git a/dist/css/app/favorites.css b/dist/css/app/favorites.css new file mode 100644 index 0000000..836c136 --- /dev/null +++ b/dist/css/app/favorites.css @@ -0,0 +1,5376 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} diff --git a/dist/css/app/future.css b/dist/css/app/future.css new file mode 100644 index 0000000..836c136 --- /dev/null +++ b/dist/css/app/future.css @@ -0,0 +1,5376 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} diff --git a/dist/css/app/gist-revisions.css b/dist/css/app/gist-revisions.css new file mode 100644 index 0000000..9af02c8 --- /dev/null +++ b/dist/css/app/gist-revisions.css @@ -0,0 +1,8248 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} + +/* line 5, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 2px 0 16px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} +/* line 12, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.deletion, .file-box .data .line_numbers.deletion { + color: #AAA; + background-color: #f7c8c8; +} +/* line 16, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.insertion, .file-box .data .line_numbers.insertion { + color: #AAA; + background-color: #ceffce; +} + +/* line 21, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 24, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .code { + width: 100%; +} + +/* line 28, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side { + overflow-x: none; + display: none; +} + +/* line 33, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side .file-col { + width: 50%; + float: left; + overflow-x: auto; +} + +/* line 40, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table { + border-collapse: collapse; +} + +/* line 44, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 46, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table pre { + border-radius: 0px; +} + +/* line 48, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data table, .file-box .data table { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + line-height: 1.4; +} + +/* line 54, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .file-diff-line span.color { + cursor: default; +} + +/* Comment Bubble */ +/* line 58, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line .add-bubble { + position: absolute; + left: 0; + width: 25px; + height: 16px; + margin-top: 0; + cursor: pointer; + opacity: 0; + color: #4183C4; +} + +/* line 69, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line:hover .add-bubble { + opacity: 1; +} + +/* Comment Bubble icons */ +/* line 72, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 83, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 91, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon-add-comment::before { + content: "\f06f"; +} + +/* line 93, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:first-child:after { + margin: -18px 0 0; +} + +/* line 97, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:after { + background: none repeat scroll 0 0 #fff; + content: ""; + display: block; + height: 2px; + margin: -16px 0 0; + position: absolute; + left: 0px; + width: 938px; +} + +/* line 109, ../../../hub/static/css/mod/file-diff-blob.scss */ +.data .line-numbers-skipped { + position: absolute; + width: 79px; + background-color: #f5f5f5; + border-right: 1px solid #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* line 119, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .skipped-top, .skipped-container .skipped-bottom { + height: 18px; + background-color: #f5f5f5; +} + +/* line 124, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top::before { + background: #fff; + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + display: block; + height: 4px; + position: relative; + top: -1px; + margin-left: -1px; +} + +/* line 140, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 145, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 20px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 5px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 170, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .ellipsis { + margin-top: -10px; +} + +/* line 174, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before, .skipped-container .ellipsis::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 188, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2026"; + padding: 2px 0 0; + top: -4px; +} + +/* line 197, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 206, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 211, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 16px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 44px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 236, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .toggle_whitespace { + margin-top: -10px; +} + +/* line 240, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before, .skipped-container .toggle_whitespace::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 254, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2423"; + padding: 2px 0 0; + top: -4px; +} + +/* line 263, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* Highlight style from pygments */ +/* line 2, ../../../hub/static/css/mod/code-highlight.scss */ +.code .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/code-highlight.scss */ +.code { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/code-highlight.scss */ +.code .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/code-highlight.scss */ +.code .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/code-highlight.scss */ +.code .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/code-highlight.scss */ +.code .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/code-highlight.scss */ +.code .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/code-highlight.scss */ +.code .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/code-highlight.scss */ +.code .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/code-highlight.scss */ +.code .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/code-highlight.scss */ +.code .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/code-highlight.scss */ +.code .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/code-highlight.scss */ +.code .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/code-highlight.scss */ +.code .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ diff --git a/dist/css/app/gist.css b/dist/css/app/gist.css new file mode 100644 index 0000000..4c5203d --- /dev/null +++ b/dist/css/app/gist.css @@ -0,0 +1,7948 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* Highlight style from pygments */ +/* line 2, ../../../hub/static/css/mod/code-highlight.scss */ +.code .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/code-highlight.scss */ +.code { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/code-highlight.scss */ +.code .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/code-highlight.scss */ +.code .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/code-highlight.scss */ +.code .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/code-highlight.scss */ +.code .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/code-highlight.scss */ +.code .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/code-highlight.scss */ +.code .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/code-highlight.scss */ +.code .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/code-highlight.scss */ +.code .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/code-highlight.scss */ +.code .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/code-highlight.scss */ +.code .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/code-highlight.scss */ +.code .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/code-highlight.scss */ +.code .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +/* line 1, ../../../hub/static/css/mod/gist-miniicon.scss */ +.minibutton .mini-icon { + vertical-align: -2px; +} + +/* line 2, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist::before { + content: "\f00e"; +} + +/* line 3, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-gist-secret::before { + content: "\f28c"; + color: #F8EEC7; +} + +/* line 4, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-add::before { + content: "\f07a"; +} + +/* line 5, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-private::before { + content: "\f00f"; +} + +/* line 6, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-forked::before { + content: "\f079"; +} + +/* line 7, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-starred::before { + content: "\f02a"; +} + +/* line 8, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-up::before { + content: "\f03d"; +} + +/* line 9, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-secret::before { + content: "\f08c"; +} + +/* line 10, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-fork::before { + content: "\f020"; +} + +/* line 11, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-star::before { + content: "\f02a"; +} + +/* line 12, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-down::before { + content: "\f03f"; +} + +/* line 13, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-commit-comment::before { + content: "\f02b"; +} + +/* line 14, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-code::before { + content: "\f05f"; +} + +/* line 15, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-link::before { + content: "\f05c"; +} + +/* line 16, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-edit::before { + content: "\f058"; +} + +/* line 17, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::beforeremove-close::before { + content: "\f050"; +} + +/* line 18, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-right::before { + content: "\f03e"; +} + +/* line 19, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-diff::before { + content: "\f04d"; +} + +/* line 20, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-download::before { + content: "\f00b"; +} + +/* line 21, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-logout::before { + content: "\f032"; +} + +/* line 22, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-code-file::before, .mega-icon-download-unknown::before { + content: "\f210"; +} + +/* line 23, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-arr-right::before { + content: "\f23e"; +} + +/* line 24, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-gist-add::before { + content: "\f27a"; +} + +/* line 25, ../../../hub/static/css/mod/gist-miniicon.scss */ +.discussion-bubble .discussion-bubble-content::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + position: absolute; + left: -10px; + top: 15px; +} + +/* line 1, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone { + display: none; + background: rgba(0, 0, 0, 0.25); + height: 100%; + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 100; +} + +/* line 2, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone #dropzone-pill { + background: rgba(0, 0, 0, 0.75); + border-radius: 6px; + color: #fff; + font-weight: bold; + text-align: center; + margin-left: -100px; + margin-top: -60px; + padding: 20px; + width: 160px; + height: 80px; + position: absolute; + top: 50%; + left: 50%; +} + +/* line 3, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone .mega-icon-code-file::before, .mega-icon-download-unknown::before, #dropzone .mega-icon-arr-right::before, #dropzone .mega-icon-gist-add::before { + font-size: 32px; +} + +/* line 4, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone p { + display: block; + -webkit-margin-before: 1em; + -webkit-margin-after: 1em; + -webkit-margin-start: 0px; + -webkit-margin-end: 0px; +} + +/* line 1, ../../../hub/static/css/mod/gist-comment.scss */ +.tabnav .tabnav-tabs > li:first-child .tabnav-tab.selected { + padding-left: 12px; +} + +/* line 2, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .tabnav { + margin-bottom: 10px; + margin-top: 10px; + position: relative; +} + +/* line 3, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + display: none; + padding: 0 10px 10px; +} + +/* line 6, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form.write-selected .write-content, .previewable-comment-form.preview-selected .preview-content { + display: block; +} + +/* line 7, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .comment { + border: 1px solid #CACACA; +} + +/* line 8, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background-color: #E1E1E1; + background-image: -moz-linear-gradient(#F8F8F8, #E1E1E1); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + background-repeat: repeat-x; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-gravatar { + display: inline-block; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 10, ../../../hub/static/css/mod/gist-comment.scss */ +.gist-form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 11, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + display: none; + padding: 0 10px 10px; +} + +/* line 12, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-author { + display: inline-block; + max-width: 600px; + height: 33px; + line-height: 33px; + font-weight: bold; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; +} + +/* line 13, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a { + color: #666; +} + +/* line 14, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a:hover { + text-decoration: underline; +} + +/* line 15, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-right { + float: right; +} + +/* line 16, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + line-height: 33px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + line-height: 33px; +} + +/* line 17, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 18, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body { + font-size: 14px; + line-height: 1.6; + overflow: hidden; + background-color: white; +} + +/* line 19, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-content { + color: #333; + font-size: 12px; +} + +/* line 20, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body > :last-child { + margin-bottom: 0 !important; +} + +/* line 21, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 22, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0; +} + +/* line 23, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-content .comment-body { + font-size: 13px; +} + +/* line 25, ../../../hub/static/css/mod/gist-comment.scss */ +.export-references { + list-style: none; + margin-top: 18px; +} + +/* line 26, ../../../hub/static/css/mod/gist-comment.scss */ +.export-references li, .export-references label { + color: #999; + font-size: 11px; + margin-bottom: 2px; +} + +/* line 27, ../../../hub/static/css/mod/gist-comment.scss */ +.export-references label { + display: block; + padding: 6px 0 1px; + margin-bottom: 0; +} + +/* line 28, ../../../hub/static/css/mod/gist-comment.scss */ +input.url-field { + border-radius: 3px; + border: 1px solid #CCC; + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 11px; + color: #666; + padding: 0 5px 0 5px; + width: 136px; + height: 24px; + margin-bottom: 0; +} + +/* line 29, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header-actions { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +/* line 30, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + position: relative; + top: 1px; +} + +/* line 31, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a:hover { + text-decoration: none; + color: #4183C4; +} + +/* line 1, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists { + display: block; +} + +/* line 2, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists::after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* line 3, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists ul { + list-style: none; + margin: 0; + padding: 0; +} + +/* line 4, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists li { + display: list-item; + text-align: -webkit-match-parent; + float: left; + width: 200px; +} + +/* line 5, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .metadata { + color: #999; +} + +/* line 6, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .description .blank { + color: rgba(153, 153, 153, 0.5); +} + +/* line 7, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .your-gists { + float: right; + width: 108px; +} + +/* line 8, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .mega-icon::before, .entry-title .meta-icon::before { + font-size: 32px; +} + +/* line 9, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .mega-icon { + color: #B9B9B9; + float: left; + top: -1px; + left: -4px; + position: relative; + font-size: 32px; + width: 32px; + height: 32px; +} + +/* line 1, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item { + display: inline-block; + display: block; + margin-bottom: 2em; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li .mini-icon { + line-height: 0.6; + opacity: 0.5; +} + +/* line 3, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta { + position: absolute; + right: 0; +} + +/* line 4, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li { + font-size: 12px; + font-weight: bold; + list-style-type: none; + display: inline-block; + margin-left: 12px; +} + +/* line 5, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li > a { + display: block; + text-decoration: none; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .byline { + margin: 3px 0 11px; +} + +/* line 7, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator img { + border-radius: 3px; + width: 28px; + height: 28px; + position: absolute; + top: 0; + left: 0; + margin-left: 3px; +} + +/* line 8, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator { + color: rgba(51, 51, 51, 0.75); + font-size: 13px; + font-weight: 300; + padding-left: 40px; + position: relative; + width: 480px; +} + +/* line 9, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator a { + font-weight: bold; +} + +/* line 10, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .metadata { + font-size: 11px; + margin-left: 40px; +} + +/* line 11, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .metadata .datetime { + color: #999; +} + +/* line 12, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .description { + color: rgba(51, 51, 51, 0.75); + display: block; + font-size: 12px; + vertical-align: text-top; + margin-top: 6px; + margin-left: 40px; + width: 480px; +} + +/* line 13, ../../../hub/static/css/mod/gist-item.scss */ +.bubble { + background: #EEE; + border-radius: 3px; + margin-bottom: 1em; + padding: 3px; +} + +/* line 14, ../../../hub/static/css/mod/gist-item.scss */ +table { + font-size: inherit; + font: 100%; +} + +/* line 15, ../../../hub/static/css/mod/gist-item.scss */ +tbody { + display: table-row-group; + vertical-align: middle; + border-color: inherit; +} + +/* line 16, ../../../hub/static/css/mod/gist-item.scss */ +.file-box { + background-color: #DDD; + border: 1px solid #CCC; + margin-bottom: 1em; + position: relative; +} + +/* line 17, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .data { + background-color: ghostWhite; + font-size: 12px; + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .highlight { + border: none; + padding: 0; +} + +/* line 19, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .data tr:last-child td.line_numbers, .file-box .data tr:last-child .line_data { + padding-bottom: 12px; +} + +/* line 20, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .data tr:first-child td.line_numbers, .file-box .data tr:first-child .line_data { + padding-top: 12px; +} + +/* line 21, ../../../hub/static/css/mod/gist-item.scss */ +.highlight { + background: white; +} + +/* line 22, ../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box:only-child { + border-bottom: 1px solid #CCC; +} + +/* line 23, ../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box .data { + background: ghostWhite; +} + +/* line 24, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .file-box { + position: relative; +} + +/* line 25, ../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box { + background: #ECECEC; + margin-bottom: 0; +} + +/* line 26, ../../../hub/static/css/mod/gist-item.scss */ +.bubble.secret { + background-color: #F8EEC7; +} + +/* line 1, ../../../hub/static/css/mod/gist-form.scss */ +.bubble { + background: #EEE; + border-radius: 3px; + margin-bottom: 1em; + padding: 3px; +} + +/* line 2, ../../../hub/static/css/mod/gist-form.scss */ +#gist-form .file { + border: 1px solid #D9D9D9; + background: whiteSmoke; +} + +/* line 3, ../../../hub/static/css/mod/gist-form.scss */ +#gist-form .file .meta { + background-color: #EAEAEA; + background-image: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background-image: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + background-image: linear-gradient(#FAFAFA, #EAEAEA); + background-repeat: repeat-x; + display: inline-block; + display: block; + border-bottom: 1px solid #D8D8D8; + color: #555; + font-size: 12px; + height: 26px; + padding: 8px; + position: relative; + text-align: left; + text-shadow: 0 1px 0 white; +} + +/* line 4, ../../../hub/static/css/mod/gist-form.scss */ +#gist-form .editor-options { + position: absolute; + top: 6px; + right: 5px; +} + +/* line 1, ../../../hub/static/css/mod/gist-render.scss */ +.link-overlay { + height: 100%; + width: 100%; + position: absolute; + visibility: hidden; + z-index: 50; +} + +/* line 2, ../../../hub/static/css/mod/gist-render.scss */ +.link-overlay .link { + background-color: rgba(0, 0, 0, 0.75); + color: white; + margin: -14px 0 0 0; + padding: 4px 8px 4px 10px; + height: 20px; + position: absolute; + top: 20px; + right: 6px; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/gist-render.scss */ +.link-overlay .link .mini-icon { + position: relative; + top: 2px; +} + +/* line 1, ../../../hub/static/css/mod/user-list.scss */ +.user-list { + border-top: 1px solid rgba(0, 0, 0, 0.05); + list-style: none; +} + +/* line 2, ../../../hub/static/css/mod/user-list.scss */ +.user-list li { + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + line-height: 26px; + padding: 6px 0 6px 30px; + position: relative; +} + +/* line 3, ../../../hub/static/css/mod/user-list.scss */ +.user-list li a { + font-weight: bold; + color: #4183C4; +} + +/* line 4, ../../../hub/static/css/mod/user-list.scss */ +.user-list li img { + border-radius: 3px; + margin-top: 1px; + position: absolute; + left: 0; + border: 0; +} + +/* line 5, ../../../hub/static/css/mod/user-list.scss */ +.user-list li .actions { + position: absolute; + top: 6px; + right: 0; +} + +/* line 6, ../../../hub/static/css/mod/user-list.scss */ +.user-list li .actions a { + color: #333; +} + +/* line 7, ../../../hub/static/css/mod/user-list.scss */ +.user-list li .actions a:hover { + color: #FFF; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 18, ../../../hub/static/css/app/gist.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* Gist */ +/* line 21, ../../../hub/static/css/app/gist.scss */ +a, a:hover { + text-decoration: none; +} + +/* line 23, ../../../hub/static/css/app/gist.scss */ +.pagehead.separation h1 { + margin-bottom: 15px; +} + +/* line 24, ../../../hub/static/css/app/gist.scss */ +.pagehead h1 { + margin: 0 0 10px 0; + font-size: 20px; + font-weight: normal; + letter-spacing: -1px; + line-height: 28px; + text-shadow: 1px 1px 0 white; + color: #495961; + z-index: 0; +} + +/* line 25, ../../../hub/static/css/app/gist.scss */ +.pagehead .title-actions-bar { + position: relative; +} + +/* line 26, ../../../hub/static/css/app/gist.scss */ +ul.pagehead-actions { + margin: 0; + float: right; + position: absolute; + right: 0; + z-index: 10; +} + +/* line 27, ../../../hub/static/css/app/gist.scss */ +.pagehead.repohead ul.pagehead-actions { + position: relative; + top: 0; + right: 0; + padding: 0 0 0 20px; +} + +/* line 28, ../../../hub/static/css/app/gist.scss */ +ul.pagehead-actions > li { + list-style-type: none; + display: inline-block; + font-size: 11px; + font-weight: bold; + color: #333; + margin: 0 0 0 5px; +} + +/* line 29, ../../../hub/static/css/app/gist.scss */ +li { + display: list-item; + text-align: -webkit-match-parent; +} + +/* line 30, ../../../hub/static/css/app/gist.scss */ +.pagehead.repohead span.repo-label { + position: absolute; + top: 14px; + left: -75px; + width: 65px; + margin-top: -14px; + text-align: right; + font-size: 11px; + text-transform: uppercase; + color: #B9B9B9; + font-weight: 300; + letter-spacing: 0px; + text-shadow: none; + -moz-transition: all 0.4s ease-in-out 0; + -webkit-transition: all 0.4s ease-in-out 0; +} + +/* line 31, ../../../hub/static/css/app/gist.scss */ +.pagehead.repohead span.repo-label { + text-align: right; + font-size: 11px; + text-transform: uppercase; + color: #B9B9B9; + font-weight: 300; + letter-spacing: 0px; + text-shadow: none; +} + +/* line 32, ../../../hub/static/css/app/gist.scss */ +.pagehead.repohead h1 .mega-icon-gist, .pagehead.repohead h1 .mega-icon-gist-secret, .pagehead.repohead h1 .mega-icon-gist-forked { + position: absolute; + left: -4px; + top: 12px; + line-height: 32px; + margin-top: -13px; +} + +/* line 33, ../../../hub/static/css/app/gist.scss */ +.mega-icon { + font-size: 32px; + width: 32px; + height: 32px; +} + +/* line 35, ../../../hub/static/css/app/gist.scss */ +ul.filter-list { + border-top: 1px solid #F1F1F1; + margin-top: 20px; + padding-top: 20px; +} + +/* line 36, ../../../hub/static/css/app/gist.scss */ +ul.filter-list .filter-item { + display: block; + padding: 8px 10px; + margin: 0 0 5px 0; + font-size: 14px; + border-radius: 3px; + text-decoration: none; + color: #777; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* line 37, ../../../hub/static/css/app/gist.scss */ +ul.filter-list.small .filter-item { + font-size: 12px; + padding: 4px 10px; + margin: 0 0 2px 0; +} + +/* line 38, ../../../hub/static/css/app/gist.scss */ +ul.filter-list .filter-item .count { + font-weight: bold; + float: right; +} + +/* line 39, ../../../hub/static/css/app/gist.scss */ +.filter-list li { + position: relative; +} + +/* line 41, ../../../hub/static/css/app/gist.scss */ +.tabnav { + margin: 0 0 20px; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 42, ../../../hub/static/css/app/gist.scss */ +.tabnav-right { + position: relative; + display: block; + float: right; +} + +/* line 43, ../../../hub/static/css/app/gist.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + /*padding: 8px 12px;*/ + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 44, ../../../hub/static/css/app/gist.scss */ +.sort-tabs .tabnav-tab { + color: #999; + font-size: 13px; +} + +/* line 45, ../../../hub/static/css/app/gist.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 46, ../../../hub/static/css/app/gist.scss */ +.tabnav .tabnav-tabs > li:first-child .tabnav-tab { + padding-left: 2px; +} + +/* line 47, ../../../hub/static/css/app/gist.scss */ +.sort-tabs li.active .tabnav-tab { + color: #333; +} + +/* line 50, ../../../hub/static/css/app/gist.scss */ +.infotip { + background: #FBFFCE; + border-radius: 3px; + border: 1px solid #DEEA53; + color: #333; + font-size: 12px; + margin: 0; + padding: 10px; +} + +/* line 51, ../../../hub/static/css/app/gist.scss */ +.root-pane { + float: left; + width: 148px; +} + +/* line 52, ../../../hub/static/css/app/gist.scss */ +.menu-container { + float: none; + width: 142px; + padding: 3px; + background: #EFEFEF; + border-radius: 2px; +} + +/* line 53, ../../../hub/static/css/app/gist.scss */ +.root-pane .menu { + background: #FAFAFB; + border-radius: 2px; + border: 1px solid #D8D8D8; + list-style: none; +} + +/* line 54, ../../../hub/static/css/app/gist.scss */ +.root-pane .menu ul, .root-pane .menu ol { + margin: 0; + padding: 0; +} + +/* line 55, ../../../hub/static/css/app/gist.scss */ +.root-pane .menu li { + border-bottom: 1px solid #EEE; + border-top: 1px solid white; +} + +/* line 56, ../../../hub/static/css/app/gist.scss */ +.root-pane .menu a { + display: block; + padding: 8px 10px 8px 8px; + text-shadow: 0 1px 0 white; + border-left: 2px solid #FAFAFB; + text-decoration: none; +} + +/* line 57, ../../../hub/static/css/app/gist.scss */ +.root-pane .menu a.selected { + background: white; + border-left: 2px solid #D26911; + font-weight: bold; + color: #222; + cursor: default; + box-shadow: inset 0 0px 1px rgba(0, 0, 0, 0.1); +} + +/* line 58, ../../../hub/static/css/app/gist.scss */ +.root-pane .menu a .counter { + float: right; + margin: 0 0 0 5px; + padding: 1px 5px 2px 5px; + font-size: 10px; + font-weight: bold; + color: #666; + background: #E5E5E5; + border-radius: 10px; +} + +/* line 59, ../../../hub/static/css/app/gist.scss */ +.menu a .mini-icon { + color: #333; +} + +/* line 61, ../../../hub/static/css/app/gist.scss */ +.right-content { + width: 770px; +} + +/* line 64, ../../../hub/static/css/app/gist.scss */ +.container { + display: inline-block; + display: block; + margin: 0 auto; +} + +/* line 65, ../../../hub/static/css/app/gist.scss */ +.discussion-bubble { + margin: 20px 0; +} + +/* line 66, ../../../hub/static/css/app/gist.scss */ +.discussion-bubble .discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 67, ../../../hub/static/css/app/gist.scss */ +.discussion-bubble .discussion-bubble-content { + position: relative; + margin-left: 60px; +} + +/* line 68, ../../../hub/static/css/app/gist.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 69, ../../../hub/static/css/app/gist.scss */ +.discussion-bubble textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; + border: none; + min-height: 60px; + padding: 6px; + width: 100%; + margin-bottom: 0; +} + +/* line 71, ../../../hub/static/css/app/gist.scss */ +a.button { + text-decoration: none; + outline: none; + display: inline-block; +} + +/* line 72, ../../../hub/static/css/app/gist.scss */ +#add-gist { + float: left; +} + +/* line 73, ../../../hub/static/css/app/gist.scss */ +.form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 74, ../../../hub/static/css/app/gist.scss */ +button.classy.glowing, a.glowing.button.classy:disabled, a.glowing.button.classy.disabled, button.glowing.classy:disabled:hover, a.glowing.button.classy.disabled:hover, a.button.classy.glowing { + background-color: #E6E1C0; + background-image: -moz-linear-gradient(#FFFAD5, #E6E1C0); + background-image: -webkit-linear-gradient(#FFFAD5, #E6E1C0); + background-image: linear-gradient(#FFFAD5, #E6E1C0); + background-repeat: repeat-x; + border: 1px solid #DDD7AA; + border-bottom-color: #CCC27E; +} + +/* line 75, ../../../hub/static/css/app/gist.scss */ +#gist-form .form-actions { + padding-top: 0; + padding-right: 0; + margin-top: 0; +} + +/* line 77, ../../../hub/static/css/app/gist.scss */ +.bubble .blob { + margin: 0 0 0 0; +} + +/* line 78, ../../../hub/static/css/app/gist.scss */ +.blob .file { + min-height: 30px; + position: relative; + overflow: auto; +} + +/* line 79, ../../../hub/static/css/app/gist.scss */ +.pagehead span.repo-label { + position: absolute; + top: 14px; + left: -75px; + width: 65px; + margin-top: -14px; + text-align: right; + font-size: 11px; + text-transform: uppercase; + color: #B9B9B9; + font-weight: 300; + letter-spacing: 0px; + text-shadow: none; + -moz-transition: all 0.4s ease-in-out 0; + -webkit-transition: all 0.4s ease-in-out 0; +} + +/* line 80, ../../../hub/static/css/app/gist.scss */ +.pagehead span.repo-label { + text-align: right; + font-size: 11px; + text-transform: uppercase; + color: #B9B9B9; + font-weight: 300; + letter-spacing: 0px; + text-shadow: none; +} + +/* line 81, ../../../hub/static/css/app/gist.scss */ +.pagehead h1.secret .repo-label span { + padding: 3px 6px 2px; + background-color: #F8EEC7; + border-radius: 3px; + color: #A1882B; +} + +/* line 82, ../../../hub/static/css/app/gist.scss */ +h1 .mega-icon::before, .entry-title .meta-icon::before { + font-size: 32px; +} + +/* line 83, ../../../hub/static/css/app/gist.scss */ +h1 .mega-icon { + color: #CCC; + float: left; + top: -1px; + left: -4px; + position: relative; + font-size: 32px; + width: 32px; + height: 32px; +} + +/* line 84, ../../../hub/static/css/app/gist.scss */ +.pagehead h1 a { + color: #4183C4; + white-space: nowrap; +} + +/* line 85, ../../../hub/static/css/app/gist.scss */ +.pagehead h1 strong { + font-weight: bold; +} + +/* line 86, ../../../hub/static/css/app/gist.scss */ +.pagehead h1 a { + color: #4183C4; + white-space: nowrap; +} + +/* line 87, ../../../hub/static/css/app/gist.scss */ +.pagehead h1.avatared { + position: relative; + padding-left: 52px; + margin-bottom: 16px; + font-weight: bold; + line-height: 54px; +} + +/* line 88, ../../../hub/static/css/app/gist.scss */ +.pagehead h1.avatared img { + border-radius: 3px; + top: 0; + left: 0; + position: absolute; +} + +/* line 89, ../../../hub/static/css/app/gist.scss */ +.pagehead h1.avatared span { + display: block; + font-size: 24px; + line-height: 24px; +} + +/* line 90, ../../../hub/static/css/app/gist.scss */ +.pagehead h1.avatared em { + display: block; + font-size: 18px; + line-height: 20px; + font-style: normal; + font-weight: normal; + color: #99A7AF; +} + +/* line 91, ../../../hub/static/css/app/gist.scss */ +.gist-author img { + border-radius: 3px; + margin-right: 2px; + position: relative; + top: -3px; + vertical-align: middle; +} + +/* line 92, ../../../hub/static/css/app/gist.scss */ +.gist-timestamp { + color: #999; + font-size: 11px; + line-height: 20px; + letter-spacing: 0; + display: block; + margin-top: -7px; + margin-left: 64px; +} + +/* line 93, ../../../hub/static/css/app/gist.scss */ +.gist-timestamp .text { + color: #666; +} + +/* line 94, ../../../hub/static/css/app/gist.scss */ +.gist-description { + color: #666; + font-size: 14px; + line-height: 1.4; + margin-bottom: 20px; +} + +/* line 95, ../../../hub/static/css/app/gist.scss */ +button.classy.danger { + color: #900; +} + +/* line 97, ../../../hub/static/css/app/gist.scss */ +.revision { + margin-bottom: 24px; +} + +/* line 98, ../../../hub/static/css/app/gist.scss */ +.revision .revision-meta { + line-height: 24px; + padding: 0 0 0 0; +} + +/* line 99, ../../../hub/static/css/app/gist.scss */ +.revision .revision-meta .creator { + color: rgba(51, 51, 51, 0.75); + position: relative; +} + +/* line 100, ../../../hub/static/css/app/gist.scss */ +.revision .revision-meta { + line-height: 26px; +} + +/* line 101, ../../../hub/static/css/app/gist.scss */ +.revision .explain { + float: right; +} + +/* line 102, ../../../hub/static/css/app/gist.scss */ +.revision .creator img { + border-radius: 3px; + width: 23px; + height: 23px; + position: absolute; + top: -4px; + left: 0; + margin-right: 4px; +} + +/* line 103, ../../../hub/static/css/app/gist.scss */ +.revision .creator strong { + margin-left: 30px; +} + +/* line 104, ../../../hub/static/css/app/gist.scss */ +.explain { + font-size: 12px; + color: #666; + position: relative; +} + +/* line 105, ../../../hub/static/css/app/gist.scss */ +.revision .minibutton { + margin-left: 6px; +} + +/* line 106, ../../../hub/static/css/app/gist.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 107, ../../../hub/static/css/app/gist.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 108, ../../../hub/static/css/app/gist.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 110, ../../../hub/static/css/app/gist.scss */ +.counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 122, ../../../hub/static/css/app/gist.scss */ +.counts-label::before, .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 136, ../../../hub/static/css/app/gist.scss */ +.counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} diff --git a/dist/css/app/graph.css b/dist/css/app/graph.css new file mode 100644 index 0000000..0289083 --- /dev/null +++ b/dist/css/app/graph.css @@ -0,0 +1,5594 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 5, ../../../hub/static/css/app/graph.scss */ +#gitstats-total { + display: inline-block; + display: block; +} + +/* line 9, ../../../hub/static/css/app/graph.scss */ +#gitstats-total .total-details { + clear: right; +} + +/* line 12, ../../../hub/static/css/app/graph.scss */ +#gitstats-total .total-details div:first-child { + border-left: none; +} + +/* line 15, ../../../hub/static/css/app/graph.scss */ +#gitstats-total .total-details div { + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px 0 0 0; + text-align: center; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + color: #999; +} + +/* line 24, ../../../hub/static/css/app/graph.scss */ +.grid .col { + display: table-cell; + width: 1%; +} + +/* line 28, ../../../hub/static/css/app/graph.scss */ +#gitstats-total .total-details div .num { + font-weight: bold; + font-size: 16px; + display: block; + color: #333; +} + +/* line 34, ../../../hub/static/css/app/graph.scss */ +#gitstats-total .total-details div .lbl { + display: block; + font-weight: bold; + padding: 10px 0; + color: #777; + border-top: 1px solid #f7f7f7; + margin-top: 10px; + font-size: 11px; +} + +/* line 43, ../../../hub/static/css/app/graph.scss */ +.ext-lines-container { + display: inline; +} + +/* line 46, ../../../hub/static/css/app/graph.scss */ +.ext-files-container { + display: inline; +} + +/* line 49, ../../../hub/static/css/app/graph.scss */ +.lable p { + font-weight: bold; + font-size: 16px; + width: 465px; + float: left; + text-align: center; + padding-bottom: 5px; +} + +/* line 57, ../../../hub/static/css/app/graph.scss */ +div.ext { + height: 480px; +} + +/* line 60, ../../../hub/static/css/app/graph.scss */ +.axis path, +.axis line { + fill: none; + stroke: #000; + shape-rendering: crispEdges; +} + +/* line 67, ../../../hub/static/css/app/graph.scss */ +.x.axis path { + display: none; +} + +/* line 71, ../../../hub/static/css/app/graph.scss */ +.line { + fill: none; + stroke: steelblue; + stroke-width: 1.5px; +} + +/* line 76, ../../../hub/static/css/app/graph.scss */ +.lines-container g text { + font-size: 9px; +} + +/* line 80, ../../../hub/static/css/app/graph.scss */ +.chart rect { + fill: #DFDFDF; + stroke: white; +} diff --git a/dist/css/app/issue-new.css b/dist/css/app/issue-new.css new file mode 100644 index 0000000..7ec5964 --- /dev/null +++ b/dist/css/app/issue-new.css @@ -0,0 +1,6471 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit { + overflow: auto; +} + +/* line 4, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li { + -moz-border-radius: 5px 5px 5px 5px; + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 10, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice { + background-color: #00a89c; + padding: 2px 4px 3px; + color: #fff; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +/* line 19, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice:hover { + color: rgba(255, 255, 255, 0.8); + cursor: pointer; +} + +/* line 23, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-new { + padding: 2px 4px 3px; + padding: 2px 4px 1px; + padding: 2px 4px 1px 0; +} + +/* line 29, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice input { + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 34, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice a.tag-close { + color: #fff; + cursor: pointer; + font-weight: bold; + padding-left: 3px; + text-decoration: none; + text-shadow: none; +} + +/* line 42, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit input[type="text"] { + width: 200px; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* highlight */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* line 11, ../../../hub/static/css/app/issue-new.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 18, ../../../hub/static/css/app/issue-new.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 21, ../../../hub/static/css/app/issue-new.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 30, ../../../hub/static/css/app/issue-new.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 33, ../../../hub/static/css/app/issue-new.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* Write/Preview Control style for new PR component */ +/* line 47, ../../../hub/static/css/app/issue-new.scss */ +ul.edit-preview-tabs { + margin: 0 0 5px 0; + line-height: 13px; +} + +/* line 51, ../../../hub/static/css/app/issue-new.scss */ +ul.edit-preview-tabs li { + list-style-type: none; + margin: 0; + display: inline-block; +} + +/* line 56, ../../../hub/static/css/app/issue-new.scss */ +ul.edit-preview-tabs a { + display: inline-block; + padding: 2px 8px; + font-size: 11px; + font-weight: bold; + text-decoration: none; + color: #666; + border: 1px solid transparent; + border-radius: 10px; +} + +/* Description Component background & help text, from hub.css*/ +/* line 68, ../../../hub/static/css/app/issue-new.scss */ +.comment-form { + position: relative; +} + +/* line 72, ../../../hub/static/css/app/issue-new.scss */ +.comment-form p.help { + margin: 0; + float: right; + line-height: 32px; + font-size: 12px; + color: #bbb; +} + +/* tag */ +/* line 81, ../../../hub/static/css/app/issue-new.scss */ +.tag-groups p { + margin: 0; +} + +/* line 85, ../../../hub/static/css/app/issue-new.scss */ +.tags input[type="text"] { + font-size: 14px; + padding: 5px 0px; + margin: 0 0 5px 5px; + width: 98%; + color: #444; +} diff --git a/dist/css/app/issue.css b/dist/css/app/issue.css new file mode 100644 index 0000000..d673b80 --- /dev/null +++ b/dist/css/app/issue.css @@ -0,0 +1,7505 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(to bottom, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 11, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.side-avatar { + float: left; + padding: 0px 5px 5px; + vertical-align: top; + margin-left: 0; +} + +/* line 18, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload { + position: relative; + top: -50px; + width: 360px; +} + +/* line 28, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload #file { + position: absolute; + width: 240px; + margin-left: -80px; + opacity: 0.0001; + cursor: pointer; +} + +/* line 36, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 43, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content { + display: block; + background: white; + border: 0px solid; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 49, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content textarea#new_comment_content { + width: 100%; + background: white; +} +/* line 54, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .tabnav { + border-bottom: none; + padding: 10px; +} +/* line 59, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .write-content { + position: relative; + padding: 10px 10px 10px; +} + +/* Zen Mode button hacks for FlatUI */ +/* line 67, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.write-content .enable-fullscreen { + top: 15px; +} + +/* line 71, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.tab-content { + overflow: visible; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 79, ../../../hub/static/css/mod/flatui-comment-form.scss */ + .side-avatar { + padding: 0px; + } + + /* line 85, ../../../hub/static/css/mod/flatui-comment-form.scss */ + form#add-comment-form .form-content .tabnav { + max-width: 100%; + } +} +/* hacks for markdown paragraph content for flatui */ +/* line 4, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0px 0px 0px; +} + +/* line 8, ../../../hub/static/css/mod/flatui-comment-content.scss */ +#summary.mod .header { + position: relative; +} + +/* line 12, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 15, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content input.title-field { + font-size: 20px; + font-weight: bold; + margin-bottom: 5px; + width: 99%; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content textarea { + min-height: 100px; + max-width: 100%; + width: 99%; + margin: 0; +} + +/* line 29, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.form-actions { + background-color: transparent; + border: none; + text-align: right; + margin: 0px; + padding: 10px 0px 0px; +} + +/* line 37, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right { + float: right; +} +/* line 39, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right a.change-header-date { + color: lightgray; +} + +/* line 44, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions { + margin-left: 10px; + display: inline; +} +/* line 47, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions li { + display: inline; +} + +/* line 52, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.comment-body { + padding: 0px; +} + +/* line 56, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body { + padding: 0px; +} + +/* line 1, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji { + margin-right: 10px; +} +/* line 4, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .description { + text-align: center; + color: #999; +} +/* line 9, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis { + overflow-x: hidden; + overflow-y: scroll; + word-wrap: break-word; + word-break: break-all; + width: 290px; + height: 260px; +} +/* line 17, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a { + display: block; + float: left; + width: 25px; + height: 25px; + padding: 2px; + border: 1px solid white; +} +/* line 24, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a:hover { + background: #eef; + border: 1px solid #aad; +} + +/* line 1, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit { + overflow: auto; +} + +/* line 4, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li { + -moz-border-radius: 5px 5px 5px 5px; + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 10, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice { + background-color: #00a89c; + padding: 2px 4px 3px; + color: #fff; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +/* line 19, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice:hover { + color: rgba(255, 255, 255, 0.8); + cursor: pointer; +} + +/* line 23, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-new { + padding: 2px 4px 3px; + padding: 2px 4px 1px; + padding: 2px 4px 1px 0; +} + +/* line 29, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice input { + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 34, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice a.tag-close { + color: #fff; + cursor: pointer; + font-weight: bold; + padding-left: 3px; + text-decoration: none; + text-shadow: none; +} + +/* line 42, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit input[type="text"] { + width: 200px; +} + +/* line 5, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content { + word-wrap: break-word; + word-break: normal; +} +/* line 10, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .side-avatar a:hover { + text-decoration: none; +} +/* line 14, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .side-avatar img { + width: 48px; + height: 48px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 20, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + display: block; + margin-left: 65px; + /* Milestone */ +} +/* line 25, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .form-content { + padding: 0px; +} +/* line 29, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .is-comment-editing .content-body { + display: none; +} +/* line 33, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary h2 { + font-size: 24px; +} +/* line 37, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions { + float: right; + text-align: right; +} +/* line 41, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions li { + display: inline; +} +/* line 45, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions #upvote i { + position: absolute; +} +/* line 49, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom { + margin-top: 10px; +} +/* line 52, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .assignee { + float: right; + margin-right: 10px; +} +/* line 56, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .state { + float: left; +} +/* line 58, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .state a#issue-closer { + padding-left: 10px; +} +/* line 64, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body { + display: block; +} +/* line 66, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body .milestone-bar-title { + display: inline; +} +/* line 68, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body .milestone-bar-title label { + display: inline; +} +/* line 76, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .participation p { + display: inline-block; + margin-left: 15px; +} +/* line 82, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog { + padding: 0px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 86, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change { + padding: 10px 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 90, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-text { + padding: 10px; +} +/* line 93, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change:hover .change-bottom .comment-header-actions { + display: inline; +} +/* line 96, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom { + position: relative; +} +/* line 98, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .comment-header-actions { + display: none; + position: absolute; + bottom: 10px; + left: 10px; +} +/* line 104, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile { + float: right; +} +/* line 106, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile p { + margin: 5px; + display: inline-block; +} +/* line 110, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile a.change-header-date { + color: lightgray; +} +/* line 113, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar { + float: none; +} +/* line 116, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar a:hover { + text-decoration: none; +} +/* line 120, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar img { + width: 32px; + height: 32px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 130, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog > .change:last-child { + border-bottom: none; +} +/* line 134, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .is-comment-editing .change-text { + display: none; +} +/* line 138, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .markdown-body pre { + font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace; + margin: 0; + border: 0; +} +/* line 144, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .avatar.avatar-tiny { + display: inline-block; + margin: 0 3px 0 0; + vertical-align: baseline; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* modal */ +/* line 155, ../../../hub/static/css/mod/issue-body.scss */ +.modal-header { + background: #63b6ae; + color: white; + text-shadow: none; +} +/* line 160, ../../../hub/static/css/mod/issue-body.scss */ +.modal-header p { + margin: 0; +} + +/* line 165, ../../../hub/static/css/mod/issue-body.scss */ +.modal-body { + text-shadow: none; +} + +/* line 169, ../../../hub/static/css/mod/issue-body.scss */ +.modal-footer { + background: #63b6ae; + color: white; + text-shadow: none; +} + +/* line 175, ../../../hub/static/css/mod/issue-body.scss */ +.quick-emoji .emojis { + height: 120px; +} + +/* Tag */ +/* line 180, ../../../hub/static/css/mod/issue-body.scss */ +ul.tagit li.tagit-choice { + margin-top: 6px; +} + +/* line 183, ../../../hub/static/css/mod/issue-body.scss */ +ul.tagit input[type="text"] { + width: 540px; +} + +/* line 186, ../../../hub/static/css/mod/issue-body.scss */ +.tag-groups p { + margin: 0; +} + +/* line 189, ../../../hub/static/css/mod/issue-body.scss */ +.tag-groups { + margin-bottom: 10px; +} + +/* Milestone */ +/* line 195, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu { + list-style: none; + display: block; + float: none; + position: relative; + margin-bottom: 5px; + border: 1px solid rgba(0, 0, 0, 0.2); + padding: 5px 0; + border-color: rgba(99, 182, 174, 0.8); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +/* line 208, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu > li > a:hover, +#milestone-modal .milestone-menu > li > a:focus, +#milestone-modal .milestone-menu > .active > a, +#milestone-modal .milestone-menu > .active > a:hover, +#milestone-modal .milestone-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background: #63b6ae; +} +/* line 217, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + white-space: nowrap; +} +/* line 226, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal input[type=radio] { + display: none; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 236, ../../../hub/static/css/mod/issue-body.scss */ + #issue #content .mod { + margin-left: 35px; + } + /* line 239, ../../../hub/static/css/mod/issue-body.scss */ + #issue #content span.side-avatar img.discussion-bubble-avatar { + width: 30px; + height: 30px; + } +} +/* line 1, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button { + height: 25px; + width: 25px; + display: block; + float: right; + background: url("/static/img/fav_star.png") 0 0 no-repeat; +} + +/* line 2, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button.faved { + background: url("/static/img/faved_star.png") 0 0 no-repeat; +} + +/* highlight */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ diff --git a/dist/css/app/issues.css b/dist/css/app/issues.css new file mode 100644 index 0000000..610fc45 --- /dev/null +++ b/dist/css/app/issues.css @@ -0,0 +1,6188 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li .tag-filter, .issue-tags ul li .tag-remove, .issue-tags ul li .icon-remove, .issue-tags ul li .icon-white, .issue-tags ul .tag-filter, .issue-tags ul .tag-remove, .issue-tags ul .icon-remove, .issue-tags ul .icon-white { + background: #63b6ae; + background-image: none; + cursor: pointer; +} + +/* line 6, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li a:hover, .issue-tags ul a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + border-radius: 4px; +} + +/* line 12, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags { + padding: 8px 0; +} +/* line 15, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li { + line-height: 20px; +} +/* line 23, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li .tag-remove, .issue-tags ul li .icon-remove, .issue-tags ul li .icon-white { + float: right; +} +/* line 31, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul .tag-remove, .issue-tags ul .icon-remove, .issue-tags ul .icon-white { + float: right; +} +/* line 40, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li.active a { + border-radius: 4px; +} +/* line 44, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .nav-header { + margin-bottom: 8px; +} +/* line 47, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin { + float: right; + cursor: pointer; + font-weight: 400; +} +/* line 52, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin-unuse { + color: #63b6ae; +} +/* line 55, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin-using { + color: #999; +} +/* line 58, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .nav-list-edit .tag-item { + display: block; + padding: 3px 1px; + color: #08c; +} + +/* edit tag */ +/* line 66, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser .color-cooser-color { + display: block; + text-align: center; + height: 25px; + cursor: pointer; + box-sizing: border-box; + border: solid 2px transparent; +} + +/* line 74, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form.open .color-chooser, .edit-color-label-form.open .color-editor { + display: block; +} + +/* line 77, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser { + height: 25px; + list-style-type: none; + display: table-row; +} + +/* line 82, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser li { + display: table-cell; + width: 1%; + vertical-align: top; +} + +/* line 87, ../../../hub/static/css/mod/tag-list.scss */ +.fieldWithErrors { + display: inline; +} + +/* line 90, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor-bg { + position: absolute; + left: 0; + height: 25px; + width: 130px; + opacity: 0.12; + border-radius: 3px; +} + +/* line 98, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .color-editor-input { + position: absolute; + left: 0; + background-color: transparent; + min-height: 25px; + border-left-width: 26px; + padding-top: 3px; + padding-bottom: 3px; + width: 130px; +} + +/* line 108, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .invalid-color-indicator { + display: none; + position: absolute; + top: 5px; + left: 9px; + color: #c00; + z-index: 10; + font-weight: bold; +} + +/* line 117, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor { + margin-top: 5px; + position: relative; + height: 25px; + margin-bottom: 10px; +} + +/* line 123, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .invalid-color-indicator { + display: none; + position: absolute; + top: 5px; + left: 9px; + color: #c00; + z-index: 10; + font-weight: bold; +} + +/* line 132, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form input[type="text"] { + min-height: 34px; + padding: 7px 8px; + outline: none; + color: #333; + background-color: #fff; + background-repeat: no-repeat; + background-position: right center; + border: 1px solid #ccc; + border-radius: 3px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + -moz-box-sizing: border-box; + box-sizing: border-box; + vertical-align: middle; +} + +/* line 147, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form.is-not-valid .color-editor .invalid-color-indicator { + display: block; +} + +/* line 1, ../../../hub/static/css/mod/issues-topbar.scss */ +.issues-topbar { + padding-bottom: 10px; +} + +/* line 2, ../../../hub/static/css/mod/navbar-search.scss */ +.navbar-search i { + color: #63b6ae; + padding-right: 4px; +} + +/* line 4, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar { + background: #fff; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + margin-bottom: 20px; +} +/* line 9, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .nav { + margin: 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 15, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .issue-tags { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +} +/* line 19, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:first-child { + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} +/* line 24, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:last-child { + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 29, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .rule { + clear: both; + height: 0px; + padding: 0; + margin: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 3px solid rgba(99, 182, 174, 0.2); +} +/* line 40, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label { + margin: 2px 0px; +} +/* line 42, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a { + color: #63b6ae; + text-decoration: none; +} +/* line 45, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} +/* line 54, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .well { + margin-bottom: 0; + overflow: hidden; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 3, ../../../hub/static/css/mod/issues-list.scss */ +.new-issue { + float: left; +} + +/* line 7, ../../../hub/static/css/mod/issues-list.scss */ +.sortby-issues { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/issues-list.scss */ +.issues-topbar { + overflow: hidden; + display: block; +} + +/* line 16, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list { + background: white; + margin-bottom: 20px; + border-bottom: 1px solid #eaeaea; +} +/* line 21, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list > :first-child { + margin-top: 0px; +} +/* line 25, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item { + padding: 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 29, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 { + font-size: 16px; + font-weight: 400; + overflow: hidden; + word-break: break-all; + margin: 0; +} +/* line 36, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 a { + color: #273338; +} +/* line 42, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item p a { + color: #999; +} +/* line 51, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item .meta { + margin-top: 20px; +} +/* line 55, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list a.comment-count, +.issue-list a.comment-count:link, +.issue-list span.issue-info { + color: #bbb; +} +/* line 61, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .rule { + clear: both; + height: 0px; + padding: 0; + overflow: hidden; + background: transparent; +} diff --git a/dist/css/app/m/gist.css b/dist/css/app/m/gist.css new file mode 100644 index 0000000..7e3c6b4 --- /dev/null +++ b/dist/css/app/m/gist.css @@ -0,0 +1,1585 @@ +/* Highlight style from pygments */ +/* line 2, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../../hub/static/css/mod/code-highlight.scss */ +.code { + background: #ffffff; +} + +/* line 4, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../../hub/static/css/mod/code-highlight.scss */ +.code .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* line 1, ../../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* Item Listing */ +/* line 2, ../../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* button list */ +/* line 3, ../../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +/* line 1, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.minibutton .mini-icon { + vertical-align: -2px; +} + +/* line 2, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist::before { + content: "\f00e"; +} + +/* line 3, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-gist-secret::before { + content: "\f28c"; + color: #F8EEC7; +} + +/* line 4, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-add::before { + content: "\f07a"; +} + +/* line 5, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-private::before { + content: "\f00f"; +} + +/* line 6, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-forked::before { + content: "\f079"; +} + +/* line 7, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-starred::before { + content: "\f02a"; +} + +/* line 8, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-up::before { + content: "\f03d"; +} + +/* line 9, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-secret::before { + content: "\f08c"; +} + +/* line 10, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-fork::before { + content: "\f020"; +} + +/* line 11, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-star::before { + content: "\f02a"; +} + +/* line 12, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-down::before { + content: "\f03f"; +} + +/* line 13, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-commit-comment::before { + content: "\f02b"; +} + +/* line 14, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-code::before { + content: "\f05f"; +} + +/* line 15, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-link::before { + content: "\f05c"; +} + +/* line 16, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-edit::before { + content: "\f058"; +} + +/* line 17, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::beforeremove-close::before { + content: "\f050"; +} + +/* line 18, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-right::before { + content: "\f03e"; +} + +/* line 19, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-diff::before { + content: "\f04d"; +} + +/* line 20, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-download::before { + content: "\f00b"; +} + +/* line 21, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-logout::before { + content: "\f032"; +} + +/* line 22, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-code-file::before, .mega-icon-download-unknown::before { + content: "\f210"; +} + +/* line 23, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-arr-right::before { + content: "\f23e"; +} + +/* line 24, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-gist-add::before { + content: "\f27a"; +} + +/* line 25, ../../../../hub/static/css/mod/gist-miniicon.scss */ +.discussion-bubble .discussion-bubble-content::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + position: absolute; + left: -10px; + top: 15px; +} + +/* line 1, ../../../../hub/static/css/mod/gist-comment.scss */ +.tabnav .tabnav-tabs > li:first-child .tabnav-tab.selected { + padding-left: 12px; +} + +/* line 2, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .tabnav { + margin-bottom: 10px; + margin-top: 10px; + position: relative; +} + +/* line 3, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 4, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + display: none; + padding: 0 10px 10px; +} + +/* line 6, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form.write-selected .write-content, .previewable-comment-form.preview-selected .preview-content { + display: block; +} + +/* line 7, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .comment { + border: 1px solid #CACACA; +} + +/* line 8, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background-color: #E1E1E1; + background-image: -moz-linear-gradient(#F8F8F8, #E1E1E1); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + background-repeat: repeat-x; + font-size: 12px; +} + +/* line 9, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-gravatar { + display: inline-block; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 10, ../../../../hub/static/css/mod/gist-comment.scss */ +.gist-form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 11, ../../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + display: none; + padding: 0 10px 10px; +} + +/* line 12, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-author { + display: inline-block; + max-width: 600px; + height: 33px; + line-height: 33px; + font-weight: bold; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; +} + +/* line 13, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a { + color: #666; +} + +/* line 14, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a:hover { + text-decoration: underline; +} + +/* line 15, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-right { + float: right; +} + +/* line 16, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + line-height: 33px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + line-height: 33px; +} + +/* line 17, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 18, ../../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body { + font-size: 14px; + line-height: 1.6; + overflow: hidden; + background-color: white; +} + +/* line 19, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-content { + color: #333; + font-size: 12px; +} + +/* line 20, ../../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body > :last-child { + margin-bottom: 0 !important; +} + +/* line 21, ../../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 22, ../../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0; +} + +/* line 23, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-content .comment-body { + font-size: 13px; +} + +/* line 25, ../../../../hub/static/css/mod/gist-comment.scss */ +.export-references { + list-style: none; + margin-top: 18px; +} + +/* line 26, ../../../../hub/static/css/mod/gist-comment.scss */ +.export-references li, .export-references label { + color: #999; + font-size: 11px; + margin-bottom: 2px; +} + +/* line 27, ../../../../hub/static/css/mod/gist-comment.scss */ +.export-references label { + display: block; + padding: 6px 0 1px; + margin-bottom: 0; +} + +/* line 28, ../../../../hub/static/css/mod/gist-comment.scss */ +input.url-field { + border-radius: 3px; + border: 1px solid #CCC; + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 11px; + color: #666; + padding: 0 5px 0 5px; + width: 136px; + height: 24px; + margin-bottom: 0; +} + +/* line 29, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header-actions { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +/* line 30, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + position: relative; + top: 1px; +} + +/* line 31, ../../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a:hover { + text-decoration: none; + color: #4183C4; +} + +/* line 1, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item { + display: inline-block; + display: block; + margin-bottom: 2em; + position: relative; +} + +/* line 2, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li .mini-icon { + line-height: 0.6; + opacity: 0.5; +} + +/* line 3, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta { + position: absolute; + right: 0; +} + +/* line 4, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li { + font-size: 12px; + font-weight: bold; + list-style-type: none; + display: inline-block; + margin-left: 12px; +} + +/* line 5, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li > a { + display: block; + text-decoration: none; + color: #666; +} + +/* line 6, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .byline { + margin: 3px 0 11px; +} + +/* line 7, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator img { + border-radius: 3px; + width: 28px; + height: 28px; + position: absolute; + top: 0; + left: 0; + margin-left: 3px; +} + +/* line 8, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator { + color: rgba(51, 51, 51, 0.75); + font-size: 13px; + font-weight: 300; + padding-left: 40px; + position: relative; + width: 480px; +} + +/* line 9, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator a { + font-weight: bold; +} + +/* line 10, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .metadata { + font-size: 11px; + margin-left: 40px; +} + +/* line 11, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .metadata .datetime { + color: #999; +} + +/* line 12, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .description { + color: rgba(51, 51, 51, 0.75); + display: block; + font-size: 12px; + vertical-align: text-top; + margin-top: 6px; + margin-left: 40px; + width: 480px; +} + +/* line 13, ../../../../hub/static/css/mod/gist-item.scss */ +.bubble { + background: #EEE; + border-radius: 3px; + margin-bottom: 1em; + padding: 3px; +} + +/* line 14, ../../../../hub/static/css/mod/gist-item.scss */ +table { + font-size: inherit; + font: 100%; +} + +/* line 15, ../../../../hub/static/css/mod/gist-item.scss */ +tbody { + display: table-row-group; + vertical-align: middle; + border-color: inherit; +} + +/* line 16, ../../../../hub/static/css/mod/gist-item.scss */ +.file-box { + background-color: #DDD; + border: 1px solid #CCC; + margin-bottom: 1em; + position: relative; +} + +/* line 17, ../../../../hub/static/css/mod/gist-item.scss */ +.file-box .data { + background-color: ghostWhite; + font-size: 12px; + overflow: auto; +} + +/* line 18, ../../../../hub/static/css/mod/gist-item.scss */ +.file-box .highlight { + border: none; + padding: 0; +} + +/* line 19, ../../../../hub/static/css/mod/gist-item.scss */ +.file-box .data tr:last-child td.line_numbers, .file-box .data tr:last-child .line_data { + padding-bottom: 12px; +} + +/* line 20, ../../../../hub/static/css/mod/gist-item.scss */ +.file-box .data tr:first-child td.line_numbers, .file-box .data tr:first-child .line_data { + padding-top: 12px; +} + +/* line 21, ../../../../hub/static/css/mod/gist-item.scss */ +.highlight { + background: white; +} + +/* line 22, ../../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box:only-child { + border-bottom: 1px solid #CCC; +} + +/* line 23, ../../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box .data { + background: ghostWhite; +} + +/* line 24, ../../../../hub/static/css/mod/gist-item.scss */ +.gist-item .file-box { + position: relative; +} + +/* line 25, ../../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box { + background: #ECECEC; + margin-bottom: 0; +} + +/* line 26, ../../../../hub/static/css/mod/gist-item.scss */ +.bubble.secret { + background-color: #F8EEC7; +} + +/* line 1, ../../../../hub/static/css/mod/gist-form.scss */ +.bubble { + background: #EEE; + border-radius: 3px; + margin-bottom: 1em; + padding: 3px; +} + +/* line 2, ../../../../hub/static/css/mod/gist-form.scss */ +#gist-form .file { + border: 1px solid #D9D9D9; + background: whiteSmoke; +} + +/* line 3, ../../../../hub/static/css/mod/gist-form.scss */ +#gist-form .file .meta { + background-color: #EAEAEA; + background-image: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background-image: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + background-image: linear-gradient(#FAFAFA, #EAEAEA); + background-repeat: repeat-x; + display: inline-block; + display: block; + border-bottom: 1px solid #D8D8D8; + color: #555; + font-size: 12px; + height: 26px; + padding: 8px; + position: relative; + text-align: left; + text-shadow: 0 1px 0 white; +} + +/* line 4, ../../../../hub/static/css/mod/gist-form.scss */ +#gist-form .editor-options { + position: absolute; + top: 6px; + right: 5px; +} + +/* line 1, ../../../../hub/static/css/mod/gist-render.scss */ +.link-overlay { + height: 100%; + width: 100%; + position: absolute; + visibility: hidden; + z-index: 50; +} + +/* line 2, ../../../../hub/static/css/mod/gist-render.scss */ +.link-overlay .link { + background-color: rgba(0, 0, 0, 0.75); + color: white; + margin: -14px 0 0 0; + padding: 4px 8px 4px 10px; + height: 20px; + position: absolute; + top: 20px; + right: 6px; + z-index: 100; +} + +/* line 3, ../../../../hub/static/css/mod/gist-render.scss */ +.link-overlay .link .mini-icon { + position: relative; + top: 2px; +} + +/* line 1, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 12, ../../../../hub/static/css/app/m/gist.scss */ +body { + margin: 0; +} + +/* line 13, ../../../../hub/static/css/app/m/gist.scss */ +.CodeMirror { + height: 300px; +} + +/* line 14, ../../../../hub/static/css/app/m/gist.scss */ +form { + margin: 0; +} + +/* line 15, ../../../../hub/static/css/app/m/gist.scss */ +.container { + width: 100%; +} + +/* line 16, ../../../../hub/static/css/app/m/gist.scss */ +#gist-form .file .meta { + position: fixed; + top: 0; + width: 100%; +} + +/* line 17, ../../../../hub/static/css/app/m/gist.scss */ +.input { + margin-top: 43px; +} + +/* line 18, ../../../../hub/static/css/app/m/gist.scss */ +#gist-form .editor-options { + right: 25px; +} + +/* line 19, ../../../../hub/static/css/app/m/gist.scss */ +.btn { + font-weight: bold; +} + +/* line 20, ../../../../hub/static/css/app/m/gist.scss */ +.link-overlay { + visibility: visible; +} + +/* line 21, ../../../../hub/static/css/app/m/gist.scss */ +input.gist-name-textbox { + width: 160px; +} + +/* line 23, ../../../../hub/static/css/app/m/gist.scss */ +.bubble .blob { + margin: 0 0 0 0; +} + +/* line 24, ../../../../hub/static/css/app/m/gist.scss */ +.blob .file { + min-height: 30px; + position: relative; + overflow: auto; +} + +/* line 26, ../../../../hub/static/css/app/m/gist.scss */ +.gist-options { + top: 5px; + position: absolute; + right: 5px; +} diff --git a/dist/css/app/mfeed.css b/dist/css/app/mfeed.css new file mode 100644 index 0000000..7106579 --- /dev/null +++ b/dist/css/app/mfeed.css @@ -0,0 +1,5707 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* Timeline on mobile */ +/* line 2, ../../../hub/static/css/mod/mobile_timeline.scss */ +body { + margin: 0; + padding: 0; +} + +/* line 4, ../../../hub/static/css/mod/mobile_timeline.scss */ +.ui-footer ul li { + line-height: 32px; +} + +/* line 5, ../../../hub/static/css/mod/mobile_timeline.scss */ +.scrollable .wrap { + background: #fff; +} + +/* line 7, ../../../hub/static/css/mod/mobile_timeline.scss */ +.timeline { + width: 100%; + height: 100%; + position: fixed; + margin-top: 0; +} + +/* line 8, ../../../hub/static/css/mod/mobile_timeline.scss */ +.timeline .action, .timeline .pulls { + margin-bottom: 0.5em; + padding: 0 12px 0 32px; + border-bottom: 1px solid #f1f1f1; +} + +/* line 9, ../../../hub/static/css/mod/mobile_timeline.scss */ +.timeline .desc { + border: none; + margin-bottom: 0.5em; + padding-bottom: 5px; +} diff --git a/dist/css/app/mirror-cloning.css b/dist/css/app/mirror-cloning.css new file mode 100644 index 0000000..857f555 --- /dev/null +++ b/dist/css/app/mirror-cloning.css @@ -0,0 +1,5673 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 4, ../../../hub/static/css/app/mirror-cloning.scss */ +.center { + text-align: center; +} diff --git a/dist/css/app/mirrors.css b/dist/css/app/mirrors.css new file mode 100644 index 0000000..eec87ac --- /dev/null +++ b/dist/css/app/mirrors.css @@ -0,0 +1,5445 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* Echo out a label for the example */ +/* line 2, ../../../hub/static/css/mod/project-item.scss */ +.bs-docs-project:after { + content: "Proj"; +} + +/* line 6, ../../../hub/static/css/mod/project-item.scss */ +.bs-docs-fork:after { + content: "Fork"; +} + +/* line 10, ../../../hub/static/css/mod/project-item.scss */ +.project-item { + overflow: hidden; + word-wrap: break-word; + word-break: normal; + min-height: 80px; + position: relative; + margin: 15px 0; + padding: 14px 19px 14px 49px; + *padding-top: 14px; + background-color: transparent; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +/* line 25, ../../../hub/static/css/mod/project-item.scss */ +.project-item:after { + position: absolute; + top: -1px; + left: -1px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #ddd; + color: #9da0a4; + -webkit-border-radius: 4px 0 4px 0; + -moz-border-radius: 4px 0 4px 0; + border-radius: 4px 0 4px 0; +} +/* line 40, ../../../hub/static/css/mod/project-item.scss */ +.project-item h4.project-title { + margin: 0; +} +/* line 42, ../../../hub/static/css/mod/project-item.scss */ +.project-item h4.project-title i { + margin-top: 5px; +} +/* line 47, ../../../hub/static/css/mod/project-item.scss */ +.project-item ul.project-stats li { + float: left; + margin-left: 10px; +} +/* line 52, ../../../hub/static/css/mod/project-item.scss */ +.project-item .summary { + margin-top: 10px; +} +/* line 55, ../../../hub/static/css/mod/project-item.scss */ +.project-item .commit-graph { + position: absolute; + left: 10px; + bottom: 0; + z-index: -9999; + height: 80px; + width: 440px; +} diff --git a/dist/css/app/my-actions.css b/dist/css/app/my-actions.css new file mode 100644 index 0000000..6ff9d07 --- /dev/null +++ b/dist/css/app/my-actions.css @@ -0,0 +1,5735 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 3, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects { + margin-top: 5px; +} +/* line 4, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects a.right { + float: right; +} +/* line 8, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li .delete-btn { + display: none; +} +/* line 16, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li.hover .delete-btn { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects .delete-btn { + padding: 0 6px 0 6px; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 4, ../../../hub/static/css/mod/watched-projects.scss */ +.watched-projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/dist/css/app/my-issues.css b/dist/css/app/my-issues.css new file mode 100644 index 0000000..93c485c --- /dev/null +++ b/dist/css/app/my-issues.css @@ -0,0 +1,5724 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 2, ../../../hub/static/css/mod/navbar-search.scss */ +.navbar-search i { + color: #63b6ae; + padding-right: 4px; +} + +/* line 4, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar { + background: #fff; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + margin-bottom: 20px; +} +/* line 9, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .nav { + margin: 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 15, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .issue-tags { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +} +/* line 19, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:first-child { + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} +/* line 24, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:last-child { + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 29, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .rule { + clear: both; + height: 0px; + padding: 0; + margin: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 3px solid rgba(99, 182, 174, 0.2); +} +/* line 40, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label { + margin: 2px 0px; +} +/* line 42, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a { + color: #63b6ae; + text-decoration: none; +} +/* line 45, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} +/* line 54, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .well { + margin-bottom: 0; + overflow: hidden; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 3, ../../../hub/static/css/mod/issues-list.scss */ +.new-issue { + float: left; +} + +/* line 7, ../../../hub/static/css/mod/issues-list.scss */ +.sortby-issues { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/issues-list.scss */ +.issues-topbar { + overflow: hidden; + display: block; +} + +/* line 16, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list { + background: white; + margin-bottom: 20px; + border-bottom: 1px solid #eaeaea; +} +/* line 21, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list > :first-child { + margin-top: 0px; +} +/* line 25, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item { + padding: 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 29, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 { + font-size: 16px; + font-weight: 400; + overflow: hidden; + word-break: break-all; + margin: 0; +} +/* line 36, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 a { + color: #273338; +} +/* line 42, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item p a { + color: #999; +} +/* line 51, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item .meta { + margin-top: 20px; +} +/* line 55, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list a.comment-count, +.issue-list a.comment-count:link, +.issue-list span.issue-info { + color: #bbb; +} +/* line 61, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .rule { + clear: both; + height: 0px; + padding: 0; + overflow: hidden; + background: transparent; +} diff --git a/dist/css/app/my-pullrequests.css b/dist/css/app/my-pullrequests.css new file mode 100644 index 0000000..fb326ba --- /dev/null +++ b/dist/css/app/my-pullrequests.css @@ -0,0 +1,5628 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item { + border-radius: 3px 3px 3px 3px; + color: #777777; + display: block; + font-size: 14px; + margin: 0 0 5px; + overflow: hidden; + padding: 8px 10px; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item:hover { + background: none repeat scroll 0 0 #EEEEEE; +} +/* line 15, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item.selected { + background: none repeat scroll 0 0 #4183C4; + color: #FFFFFF; +} +/* line 19, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item .count { + float: right; + font-weight: bold; +} + +/* line 25, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +.my-pull-requests-tab { + margin-top: 27px; +} + +/* line 1, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs { + display: block; + float: left; + padding: 5px 5px 0; + overflow: hidden; +} +/* line 6, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .filter-tab { + display: inline-block; + padding: 0 8px; + height: 24px; + line-height: 24px; + font-size: 12px; + font-weight: bold; + color: #888; + -webkit-font-smoothing: antialiased; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + text-decoration: none; + border: 1px solid #CCC; + border-bottom: 0; + border-radius: 3px 3px 0 0; + background: rgba(255, 255, 255, 0.2); + cursor: pointer; +} +/* line 23, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .selected { + color: #333; + background: white; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + border-color: #B4B4B4; + border-bottom: 1px solid white; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls { + margin: 20px 0; +} +/* line 6, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls h2 { + font-size: 16px; + font-weight: bold; + margin: 0; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-list.scss */ +.row.pulls .mod p { + word-wrap: break-word; +} + +/* line 17, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list { + word-break: break-all; +} +/* line 19, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 { + margin: 0; + font-size: 14px; + line-height: 1.3; +} +/* line 23, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 a { + color: #333; +} +/* line 27, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .list-browser-item { + position: relative; + padding: 10px; + border-bottom: 1px solid #EAEAEA; +} +/* line 32, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .meta { + float: left; + margin-top: 4px; + margin-bottom: -2px; + height: 16px; + padding: 4px 6px; + font-size: 11px; + color: rgba(0, 0, 0, 0.55); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: rgba(0, 0, 0, 0.07); + border-radius: 3px; +} +/* line 44, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list p a { + color: #555; + text-decoration: none; +} + +/* line 50, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser { + border-color: #D5D5D5; + position: relative; + border: 1px solid #DDD; + border-radius: 5px; +} +/* line 55, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination { + float: right; + margin: 7px; + font-weight: bold; + height: 26px; +} +/* line 60, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination a { + padding: 4px; + font-size: 11px; + color: #4183C4; + width: auto; +} +/* line 66, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination span { + padding: 4px; + font-size: 11px; + color: #4183C4; +} +/* line 72, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none, .chromed-list-browser .error { + padding: 10px; + border-bottom: 1px solid #DDD; +} +/* line 75, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none p, .chromed-list-browser .error p { + margin: 0; + padding: 20px; + border-radius: 3px; + text-align: center; + font-weight: bold; + font-size: 14px; + color: #999; + background: #F3F3F3; + -webkit-font-smoothing: antialiased; +} + +/* line 91, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-info { + position: absolute; + bottom: 3px; + right: 5px; +} +/* line 96, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item { + padding-left: 18px; + font-size: 11px; + font-weight: bold; + color: #999; +} +/* line 101, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item a { + color: #666; +} + +/* line 107, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar { + font-family: "Helvetica Neue", Helvetica, Arial, freesans; + border-radius: 5px 5px 0 0; + height: 31px; + background-color: #CACACA; + background-image: -moz-linear-gradient(#EFEFEF, #CACACA); + background-image: -webkit-linear-gradient(#EFEFEF, #CACACA); + background-image: linear-gradient(#EFEFEF, #CACACA); + background-repeat: repeat-x; + border-bottom: 1px solid #B4B4B4; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/* line 117, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar li { + list-style-type: none; + display: inline; +} + +/* line 123, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer { + font-size: 11px; + font-weight: bold; + color: #777; + overflow: hidden; + min-height: 15px; + background: #F6F6F6; + border-radius: 0 0 5px 5px; +} +/* line 131, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer .pagination { + margin: 5px; +} diff --git a/dist/css/app/my-settings.css b/dist/css/app/my-settings.css new file mode 100644 index 0000000..b14b668 --- /dev/null +++ b/dist/css/app/my-settings.css @@ -0,0 +1,5603 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 8, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 22, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 32, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 36, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 40, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 45, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/email.scss */ +span.email-actions { + float: right; +} + +/* line 2, ../../../hub/static/css/mod/email.scss */ +.new-email-form input#email { + padding: 6px; + margin: 2px 2px 2px 0px; +} + +/* line 3, ../../../hub/static/css/mod/email.scss */ +.new-email-form dd { + margin-left: 0px; +} + +/* line 1, ../../../hub/static/css/mod/github.scss */ +span.github-actions { + float: right; +} + +/* line 2, ../../../hub/static/css/mod/github.scss */ +.new-github-form input#github { + padding: 6px; + margin: 2px 2px 2px 0px; +} + +/* line 3, ../../../hub/static/css/mod/github.scss */ +.new-github-form dd { + margin-left: 0px; +} + +/* line 1, ../../../hub/static/css/mod/notification.scss */ +#settings-notifications h4 { + margin: 15px 0 5px 0; + font-size: 14px; + color: black; +} + +/* line 2, ../../../hub/static/css/mod/notification.scss */ +.user-mention { + font-weight: bold; + color: #333; +} + +/* line 3, ../../../hub/static/css/mod/notification.scss */ +#settings-notifications ul.compact-options { + margin: -6px 0 13px 0; +} + +/* line 4, ../../../hub/static/css/mod/notification.scss */ +#settings-notifications ul.compact-options li { + margin: 0 15px 0 0; + list-style-type: none; + font-weight: bold; +} + +/* line 5, ../../../hub/static/css/mod/notification.scss */ +.horizontal_line { + margin: 10px 0 10px -10px; + padding: 0 10px; + width: 100%; +} + +/* line 1, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container input[type=checkbox] { + vertical-align: middle; +} + +/* line 9, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container label { + display: inline; + vertical-align: middle; + padding: 0 0 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container label span { + margin: 0 0 0 5px; +} + +/* line 9, ../../../hub/static/css/app/my-settings.scss */ +.settings-content { + width: 60%; +} diff --git a/dist/css/app/newsfeed.css b/dist/css/app/newsfeed.css new file mode 100644 index 0000000..7a55fdc --- /dev/null +++ b/dist/css/app/newsfeed.css @@ -0,0 +1,5796 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 4, ../../../hub/static/css/mod/rightside.scss */ + .rightside { + padding: 10px; + } +} +/* line 7, ../../../hub/static/css/mod/rightside.scss */ +.rightside { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; + margin-bottom: 20px; +} +/* line 12, ../../../hub/static/css/mod/rightside.scss */ +.rightside li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 1px 15px 10px 10px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 21, ../../../hub/static/css/mod/rightside.scss */ +.rightside li .title { + margin-bottom: 0.5em; +} +/* line 23, ../../../hub/static/css/mod/rightside.scss */ +.rightside li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 33, ../../../hub/static/css/mod/rightside.scss */ +.rightside .time { + float: right; + color: #ccc; + font-size: 12px; +} + +/* line 40, ../../../hub/static/css/mod/rightside.scss */ +.rightside .padding { + height: 2em; + font-weight: bold; +} + +/* line 45, ../../../hub/static/css/mod/rightside.scss */ +.rightside .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/rightside.scss */ +.rightside .time { + color: #bbb; +} + +/* line 52, ../../../hub/static/css/mod/rightside.scss */ +.rightside .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 58, ../../../hub/static/css/mod/rightside.scss */ +.rightside .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 63, ../../../hub/static/css/mod/rightside.scss */ +div.right-tittle { + color: gray; + background: rgba(99, 182, 174, 0.2); + text-align: center; + padding-top: 6px; + padding-bottom: 6px; + font-size: 14px; + font-weight: bold; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 3, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects { + margin-top: 5px; +} +/* line 4, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects a.right { + float: right; +} +/* line 8, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li .delete-btn { + display: none; +} +/* line 16, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li.hover .delete-btn { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects .delete-btn { + padding: 0 6px 0 6px; +} diff --git a/dist/css/app/notifications.css b/dist/css/app/notifications.css new file mode 100644 index 0000000..1241738 --- /dev/null +++ b/dist/css/app/notifications.css @@ -0,0 +1,5627 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(to bottom, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +@media (max-width: 767px) { + /* line 7, ../../../hub/static/css/app/notifications.scss */ + .notif-list { + padding: 10px; + } +} +/* line 10, ../../../hub/static/css/app/notifications.scss */ +.mark-all-as-read { + margin-left: 10px; + float: right; +} + +/* line 15, ../../../hub/static/css/app/notifications.scss */ +.notif-sidebar { + margin-bottom: 20px; +} +/* line 18, ../../../hub/static/css/app/notifications.scss */ +.notif-sidebar .rule { + clear: both; + height: 0px; + padding: 0; + margin: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 3px solid rgba(99, 182, 174, 0.2); +} +/* line 30, ../../../hub/static/css/app/notifications.scss */ +.notif-sidebar .target-list { + background: #fff; + font-size: 12px; +} + +/* line 36, ../../../hub/static/css/app/notifications.scss */ +.notif-list { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 41, ../../../hub/static/css/app/notifications.scss */ +.notif-list form { + margin: 0; +} +/* line 45, ../../../hub/static/css/app/notifications.scss */ +.notif-list .title > a:hover { + text-decoration: none; +} +/* line 49, ../../../hub/static/css/app/notifications.scss */ +.notif-list .unread { + background-color: #EAF2F5 !important; + border-radius: 3px; +} +/* line 54, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item { + margin: 0 0 20px 0; + background: #fff; + -moz-box-shadow: 1px 1px 5px 0.8px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 1px 1px 5px 0.8px rgba(0, 0, 0, 0.3); + box-shadow: 1px 1px 5px 0.8px rgba(0, 0, 0, 0.3); +} +/* line 59, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-header { + background: rgba(99, 182, 174, 0.6); +} +/* line 62, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-header .mark-item { + float: right; +} +/* line 65, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-header .mark-item button { + padding: 8px; + background-color: transparent; + color: #555; + border: solid #d5d5d5; + border-width: 0 1px; + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.5); +} +/* line 75, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-header .title { + font-size: 14px; + padding: 8px 16px; +} +/* line 81, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry { + padding: 10px; + border-bottom: 1px solid #eee; +} +/* line 85, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title { + padding: 0 10px; +} +/* line 88, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title .title { + margin-right: 100px; + font-size: 15px; + cursor: pointer; +} +/* line 93, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title .title i { + margin-right: 10px; +} +/* line 97, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title .title .label { + text-shadow: none; + margin-left: 5px; +} +/* line 103, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title .entry-actions { + float: right; + margin: 0; + padding: 5px; +} +/* line 108, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title .entry-actions li { + float: right; + margin-left: 10px; +} +/* line 112, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-title .entry-actions li button { + background-color: transparent; + color: #999999; + border: none; + padding: 0; +} +/* line 123, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-body > :last-child { + border-bottom: none !important; +} +/* line 127, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-body .entry-item { + position: relative; + clear: both; + padding: 10px 20px 10px 32px; + border-bottom: 1px solid #eaeaea; +} +/* line 134, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-body .entry-item .title { + margin-bottom: 0.5em; +} +/* line 136, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-body .entry-item .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 143, ../../../hub/static/css/app/notifications.scss */ +.notif-list .notif-item .item-body .entry .entry-body .entry-item .title .time { + float: right; + color: #bbb; + font-size: 12px; +} +/* line 156, ../../../hub/static/css/app/notifications.scss */ +.notif-list .padding { + height: 2em; + font-weight: bold; +} +/* line 157, ../../../hub/static/css/app/notifications.scss */ +.notif-list .desc { + color: #666; + word-wrap: break-word; +} +/* line 158, ../../../hub/static/css/app/notifications.scss */ +.notif-list .desc .right_side { + float: right; + margin-right: 30px; +} + +/* // TODO: pagination +.timeline .pagination { display:none; background: rgba(99, 182, 174, 1);} +.pagination { display:block; margin:7px 0; overflow:hidden; border:1px solid #EAEAEA; border-bottom-color:#CACACA; border-top:none; border-bottom:none; border-radius: 3px; background-image: -webkit-linear-gradient(top, white, #EFEFEF); } +.timeline .pagination a {color: rgba(255,255,255,1);} +.pagination a { padding:8px; width:100%; text-align:center; line-height: 1.4; } +.pagination a:last-child, .pagination span:last-child { border-right:none; border-bottom-right-radius:3px; } +.pagination a:first-child, .pagination span:first-child { border-left:none; border-bottom-left-radius:3px; } +.pagination a, .pagination span { float:left; margin:0; color:#777; font-size:13px; text-decoration:none; text-shadow:0 1px 0 white; border-bottom:1px solid #DADADA; } +.timeline .loader img{display:block; width:16px; height:16px; margin:0 auto; position: relative; } +*/ diff --git a/dist/css/app/people.css b/dist/css/app/people.css new file mode 100644 index 0000000..850c6a1 --- /dev/null +++ b/dist/css/app/people.css @@ -0,0 +1,6387 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* Echo out a label for the example */ +/* line 2, ../../../hub/static/css/mod/project-item.scss */ +.bs-docs-project:after { + content: "Proj"; +} + +/* line 6, ../../../hub/static/css/mod/project-item.scss */ +.bs-docs-fork:after { + content: "Fork"; +} + +/* line 10, ../../../hub/static/css/mod/project-item.scss */ +.project-item { + overflow: hidden; + word-wrap: break-word; + word-break: normal; + min-height: 80px; + position: relative; + margin: 15px 0; + padding: 14px 19px 14px 49px; + *padding-top: 14px; + background-color: transparent; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +/* line 25, ../../../hub/static/css/mod/project-item.scss */ +.project-item:after { + position: absolute; + top: -1px; + left: -1px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #ddd; + color: #9da0a4; + -webkit-border-radius: 4px 0 4px 0; + -moz-border-radius: 4px 0 4px 0; + border-radius: 4px 0 4px 0; +} +/* line 40, ../../../hub/static/css/mod/project-item.scss */ +.project-item h4.project-title { + margin: 0; +} +/* line 42, ../../../hub/static/css/mod/project-item.scss */ +.project-item h4.project-title i { + margin-top: 5px; +} +/* line 47, ../../../hub/static/css/mod/project-item.scss */ +.project-item ul.project-stats li { + float: left; + margin-left: 10px; +} +/* line 52, ../../../hub/static/css/mod/project-item.scss */ +.project-item .summary { + margin-top: 10px; +} +/* line 55, ../../../hub/static/css/mod/project-item.scss */ +.project-item .commit-graph { + position: absolute; + left: 10px; + bottom: 0; + z-index: -9999; + height: 80px; + width: 440px; +} + +/* line 1, ../../../hub/static/css/mod/team-item.scss */ +.bs-docs-team:after { + content: "Team"; +} + +/* line 4, ../../../hub/static/css/mod/team-item.scss */ +.team-item { + position: relative; + margin: 15px 0; + padding: 14px 19px 14px 49px; + *padding-top: 14px; + background-color: transparent; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +/* line 14, ../../../hub/static/css/mod/team-item.scss */ +.team-item:after { + position: absolute; + top: -1px; + left: -1px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #ddd; + color: #9da0a4; + -webkit-border-radius: 4px 0 4px 0; + -moz-border-radius: 4px 0 4px 0; + border-radius: 4px 0 4px 0; +} +/* line 28, ../../../hub/static/css/mod/team-item.scss */ +.team-item h4.team-title { + margin: 0; +} +/* line 30, ../../../hub/static/css/mod/team-item.scss */ +.team-item h4.team-title i { + margin-top: 5px; +} +/* line 34, ../../../hub/static/css/mod/team-item.scss */ +.team-item ul.team-stats li { + float: left; + margin-left: 10px; +} +/* line 38, ../../../hub/static/css/mod/team-item.scss */ +.team-item .team-item .summary { + margin-top: 10px; +} + +/* line 43, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list { + height: 26px; + margin-bottom: 1px; + list-style: none; + display: block; +} +/* line 48, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list ul { + float: right; + margin-right: 10px; + margin-top: 0px; +} +/* line 53, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list li { + float: left; + margin-left: 10px; + line-height: 20px; +} +/* line 57, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + border-radius: 4px; + text-decoration: none; +} +/* line 65, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list li a img { + width: 26px; + height: 26px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 1, ../../../hub/static/css/mod/contribution.scss */ +h3.conversation-list-heading { + margin: 25px 0 10px 0; + height: 0; + text-align: center; + font-size: 16px; + font-weight: normal; + color: #999999; + border-bottom: 1px solid #ddd; +} + +/* line 2, ../../../hub/static/css/mod/contribution.scss */ +h3.conversation-list-heading .inner { + display: inline-block; + position: relative; + top: -10px; + padding: 0 5px; + background: #fff; +} + +/* line 3, ../../../hub/static/css/mod/contribution.scss */ +h3.conversation-list-heading strong { + font-weight: bold; + color: #333333; +} + +/* line 4, ../../../hub/static/css/mod/contribution.scss */ +.simple-conversation-list > li .title .project-info { + color: #999999; +} + +/* line 1, ../../../hub/static/css/mod/praise.scss */ +.recs, .rec-paginator { + margin: 35px 87px; +} + +/* line 2, ../../../hub/static/css/mod/praise.scss */ +.recs .rec { + margin-bottom: 36px; + width: 100%; +} + +/* line 3, ../../../hub/static/css/mod/praise.scss */ +.rec blockquote { + padding-left: 1.5em; + color: #404040; + background: url(/static/img/big_quotel.png) no-repeat 0 0 transparent; + margin: 0 15px; + border: none; + font-size: 15px; +} + +/* line 4, ../../../hub/static/css/mod/praise.scss */ +.rec .to-user-info { + margin-bottom: 15px; +} + +/* line 5, ../../../hub/static/css/mod/praise.scss */ +.rec .to-user-info img { + margin: 0 7px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/praise.scss */ +.rec .from-user-info { + float: right; + display: inline-block; + font-style: italic; +} + +/* line 7, ../../../hub/static/css/mod/praise.scss */ +.rec img { + width: 32px; + height: 32px; + margin-left: 7px; +} + +/* line 8, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons { + float: left; + text-align: center; +} + +/* line 9, ../../../hub/static/css/mod/praise.scss */ +.rec a.rec-vote { + display: block; + position: relative; + width: 24px; + height: 24px; + opacity: 0.5; +} + +/* line 10, ../../../hub/static/css/mod/praise.scss */ +.rec a.rec-vote:hover { + opacity: 0.8; +} + +/* line 11, ../../../hub/static/css/mod/praise.scss */ +.rec a.rec-vote { + background: url("/static/img/arrow-up.png") no-repeat scroll center center transparent; +} + +/* line 12, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons.likes a.rec-vote, .rec .vote-buttons.voted a.rec-vote { + background: url("/static/img/arrow-up-orange.png") no-repeat scroll center center transparent; +} + +/* line 13, ../../../hub/static/css/mod/praise.scss */ +.rec .rec-score { + font-weight: bold; + font-size: 20px; + margin-top: 3px; +} + +/* line 14, ../../../hub/static/css/mod/praise.scss */ +.rec .rec-score.current { + color: #C6C6C6; + display: block; +} + +/* line 15, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons.likes .rec-score.current { + display: none; +} + +/* line 16, ../../../hub/static/css/mod/praise.scss */ +.rec .rec-score.likes { + display: none; + color: #FF8B60; +} + +/* line 17, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons.likes .rec-score.likes { + display: block; +} + +/* line 19, ../../../hub/static/css/mod/praise.scss */ +.rec .item-right { + margin-left: 32px; + padding: 12px 5px; + border-bottom: 1px solid #DDD; +} + +/* line 20, ../../../hub/static/css/mod/praise.scss */ +.rec .item-right:hover { + background: #FFF6ED; + border-bottom: 1px solid #FFF6ED; +} + +/* line 22, ../../../hub/static/css/mod/praise.scss */ +.rec-paginator { + font-size: 14px; +} + +/* line 23, ../../../hub/static/css/mod/praise.scss */ +.rec-paginator .next { + float: right; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* Cal-HeatMap CSS */ +/* line 3, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph-browse-previous, .graph-browse-next { + padding: 5px; + background-image: linear-gradient(to bottom, white, #e6e6e6); + border: 1px solid #999; + border-radius: 3px; + line-height: 12px; + font-size: 12px; +} + +/* line 13, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph-browse-previous:hover, .graph-browse-next:hover { + text-decoration: none; +} + +/* line 17, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph-browse-previous { + margin-right: 5px; +} + +/* line 22, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph { + clear: both; + display: block; + margin-top: 10px; +} + +/* line 29, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph-label { + fill: #999; + font-size: 10px; +} + +/* line 35, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph-rect { + fill: #ededed; + shape-rendering: crispedges; +} + +/* line 41, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.graph-rect:hover { + stroke: #000; + stroke-width: 1px; +} + +/* line 47, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.qi { + background-color: #999; + fill: #999; +} + +/* line 52, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.q0 { + background-color: #fff; + fill: #fff; + stroke: #ededed; +} + +/* line 59, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.q1 { + background-color: #dae289; + fill: #dae289; +} + +/* line 65, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.q2 { + background-color: #cedb9c; + fill: #9cc069; +} + +/* line 71, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.q3 { + background-color: #b5cf6b; + fill: #669d45; +} + +/* line 77, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.q4 { + background-color: #637939; + fill: #637939; +} + +/* line 83, ../../../hub/static/css/lib/_cal-heatmap.scss */ +.q5 { + background-color: #3b6427; + fill: #3b6427; +} + +/* for flat-ui new people profile page */ +/* line 13, ../../../hub/static/css/app/people.scss */ +.span3, .span4 { + margin-left: 0px; +} + +/* line 18, ../../../hub/static/css/app/people.scss */ +.people-info img { + border-radius: 3px; + padding: 3px; + border: 1px solid lightgray; +} +/* line 24, ../../../hub/static/css/app/people.scss */ +.people-info .username { + font-size: 18px; + line-height: 36px; + font-weight: bold; + height: auto; + text-shadow: 1px 1px 0 white; + width: 180px; +} +/* line 33, ../../../hub/static/css/app/people.scss */ +.people-info dl > dd { + width: 170px; +} +/* line 37, ../../../hub/static/css/app/people.scss */ +.people-info .username, .people-info dl > dd { + max-width: 180px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 41, ../../../hub/static/css/app/people.scss */ +.people-info .follow-btn { + margin: 10px auto; +} +/* line 45, ../../../hub/static/css/app/people.scss */ +.people-info .contact { + border-bottom: 1px solid #eee; +} +/* line 49, ../../../hub/static/css/app/people.scss */ +.people-info .avatar-group-item { + display: inline-block; + margin-bottom: 3px; +} +/* line 52, ../../../hub/static/css/app/people.scss */ +.people-info .avatar-group-item .avatar { + display: inline-block; + vertical-align: middle; + width: 31px; + height: 31px; +} +/* line 60, ../../../hub/static/css/app/people.scss */ +.people-info .follow-stats { + margin: 15px auto; +} +/* line 64, ../../../hub/static/css/app/people.scss */ +.people-info .follow-stats ul li { + float: left; + margin: 5px 5px; +} +/* line 70, ../../../hub/static/css/app/people.scss */ +.people-info .follow-stats strong { + text-align: center; + display: block; + font-size: 26px; +} +/* line 76, ../../../hub/static/css/app/people.scss */ +.people-info .follow-stats span { + font-size: 12px; +} +/* line 81, ../../../hub/static/css/app/people.scss */ +.people-info .follow-stats a:hover { + color: #00ccbd; + text-decoration: none; +} + +/* line 90, ../../../hub/static/css/app/people.scss */ +.follow-list { + margin-bottom: 20px; +} +/* line 94, ../../../hub/static/css/app/people.scss */ +.follow-list h1 a:hover { + text-decoration: none; +} +/* line 100, ../../../hub/static/css/app/people.scss */ +.follow-list .user-list .follow-list-item { + float: left; + width: 250px; + padding-bottom: 5px; + margin-bottom: 15px; + margin-right: 20px; + border-bottom: 1px solid #ddd; + height: 100px; +} +/* line 109, ../../../hub/static/css/app/people.scss */ +.follow-list .user-list .follow-list-item .avatar { + width: 64px; + height: 64px; +} +/* line 113, ../../../hub/static/css/app/people.scss */ +.follow-list .user-list .follow-list-item .email { + margin-top: 10px; +} +/* line 117, ../../../hub/static/css/app/people.scss */ +.follow-list .user-list .follow-list-item .follow-btn { + float: right; + margin: 20px 5px; +} +/* line 120, ../../../hub/static/css/app/people.scss */ +.follow-list .user-list .follow-list-item .follow-btn a { + display: block; + width: 50px; + text-align: center; +} +/* line 128, ../../../hub/static/css/app/people.scss */ +.follow-list .user-list .follow-list-item .username { + display: inline-block; + max-width: 90px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* line 136, ../../../hub/static/css/app/people.scss */ +.glory { + padding: 10px 20px; +} + +/* line 138, ../../../hub/static/css/app/people.scss */ +.rec, .badge-list, .rec-num { + display: inline-block; +} + +/* line 142, ../../../hub/static/css/app/people.scss */ +.rec { + margin-right: 20px; +} + +/* fix for newer bootstrap to make it look just like old page */ +/* line 146, ../../../hub/static/css/app/people.scss */ +.dl-horizontal dt { + float: none; + width: 50px; + text-align: left; +} + +/* People Page */ +/* line 149, ../../../hub/static/css/app/people.scss */ +.add-rec { + background: url("../../static/img/recommend.png") 0 10px no-repeat; + width: 32px; + height: 36px; + opacity: 0.7; + display: inline-block; +} + +/* line 150, ../../../hub/static/css/app/people.scss */ +.add-rec:hover { + opacity: 1; +} + +/* line 151, ../../../hub/static/css/app/people.scss */ +.add-rec.mine:hover { + opacity: 0.7; +} + +/* line 153, ../../../hub/static/css/app/people.scss */ +h1.people-info img, .rec img { + vertical-align: middle; + position: relative; + top: -2px; + margin-right: 5px; + padding: 2px; + border: 1px solid #DDD; +} + +/* line 156, ../../../hub/static/css/app/people.scss */ +h1.people-info img, h1.people-info .username, +h1.people-info .follow-btn, h1.people-info .rec { + float: left; + margin-right: 12px; +} + +/* line 159, ../../../hub/static/css/app/people.scss */ +h1.people-info .rec-num { + display: inline-block; +} + +/* line 160, ../../../hub/static/css/app/people.scss */ +h1.people-info .rec-num a { + font-size: 20px; + color: #888; + text-decoration: none; +} + +/* line 161, ../../../hub/static/css/app/people.scss */ +h1.people-info .rec-num a:hover { + color: #08C; +} + +/* line 163, ../../../hub/static/css/app/people.scss */ +.right-info { + float: right; + font-size: 14px; + margin-top: 20px; +} +/* line 167, ../../../hub/static/css/app/people.scss */ +.right-info a { + color: #333; +} + +/* line 172, ../../../hub/static/css/app/people.scss */ +#add-rec-form { + margin: 0; +} +/* line 175, ../../../hub/static/css/app/people.scss */ +#add-rec-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} +/* line 189, ../../../hub/static/css/app/people.scss */ +#add-rec-form .form-actions { + padding: 0; + margin: 0; +} + +/* line 195, ../../../hub/static/css/app/people.scss */ +.form-actions { + text-align: right; + padding-bottom: 5px; + background: #fff; + border: none; +} +/* line 201, ../../../hub/static/css/app/people.scss */ +.form-actions .optional { + display: block; + padding-top: 8px; + float: left; + margin-right: 15px; + padding-top: 3px; +} +/* line 209, ../../../hub/static/css/app/people.scss */ +.form-actions .primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 222, ../../../hub/static/css/app/people.scss */ +.rec-wnd { + position: fixed; + top: 120px; + left: 453px; + width: 360px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + padding: 5px; +} + +/* line 233, ../../../hub/static/css/app/people.scss */ +.people-activity .info { + color: #888; + margin: 15px 5px; +} + +/* line 238, ../../../hub/static/css/app/people.scss */ +.pagination { + margin-right: 100px; +} +/* line 241, ../../../hub/static/css/app/people.scss */ +.pagination a { + float: left; + padding: 6px 15px 5px; + margin: 0; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; + border-top: none; + width: auto; +} + +/* line 254, ../../../hub/static/css/app/people.scss */ +img.is-new { + float: right; +} diff --git a/dist/css/app/project-create.css b/dist/css/app/project-create.css new file mode 100644 index 0000000..08093af --- /dev/null +++ b/dist/css/app/project-create.css @@ -0,0 +1,5412 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 3, ../../../hub/static/css/app/project-create.scss */ +#mirror { + display: none; +} + +/* line 7, ../../../hub/static/css/app/project-create.scss */ +.mirror-url { + display: none; +} + +/* line 11, ../../../hub/static/css/app/project-create.scss */ +.mirror-with-proxy { + display: none; + margin: 15px 0 5px 0; +} + +/* line 16, ../../../hub/static/css/app/project-create.scss */ +.splash { + margin: 0; + padding-top: 22px; + margin-left: 0; + width: auto; +} + +/* line 24, ../../../hub/static/css/app/project-create.scss */ +#owner img { + padding-top: 3px; + padding-left: 20px; +} + +/* line 31, ../../../hub/static/css/app/project-create.scss */ +#mirror img { + padding-top: 3px; + padding-left: 20px; +} diff --git a/dist/css/app/public-timeline.css b/dist/css/app/public-timeline.css new file mode 100644 index 0000000..c1d1271 --- /dev/null +++ b/dist/css/app/public-timeline.css @@ -0,0 +1,5668 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} diff --git a/dist/css/app/pull-new.css b/dist/css/app/pull-new.css new file mode 100644 index 0000000..080bd24 --- /dev/null +++ b/dist/css/app/pull-new.css @@ -0,0 +1,12012 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* line 1, ../../../hub/static/css/mod/pull-new.scss */ +.pull-heading .btn-change { + float: right; + margin: 9px 10px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/pull-new.scss */ +.editor-expander { + cursor: pointer; +} + +/* line 10, ../../../hub/static/css/mod/pull-new.scss */ +.pull-head { + padding: 10px; + border: 1px solid whiteSmoke; + border-top: none; + border-bottom: 2px solid #EEE; + border-radius: 5px; +} + +/* line 18, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description { + font-size: 14px; + margin: 0; + color: #333; + font-weight: 300; +} + +/* line 24, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description a { + font-weight: bold; + color: black; +} + +/* line 28, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description .commit-ref { + margin: 0 3px; +} + +/* line 32, ../../../hub/static/css/mod/pull-new.scss */ +.commit-ref { + padding: 2px 5px; + line-height: 19px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + font-weight: normal; + color: white; + text-shadow: -1px -1px 0 black; + text-decoration: none; + background: #787878; + background: -moz-linear-gradient(#787878, #282828); + background: -webkit-linear-gradient(#787878, #282828); + border-radius: 3px; +} + +/* line 46, ../../../hub/static/css/mod/pull-new.scss */ +.commit-ref .project { + font-weight: normal; + color: #CCC; +} + +/* line 51, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor { + margin: 15px 0 20px; + background: url("http://t.douban.com/img/files/file-1363274223.gif") 50% 80px no-repeat; +} + +/* line 55, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .chooser-box { + float: left; + width: 420px; +} + +/* line 59, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .chooser-box.head { + float: right; +} + +/* line 62, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor table.reposha { + margin: 15px 0 0 0; + width: 100%; +} + +/* line 66, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .commit-preview .message, +.range-editor .commit-preview p.error { + margin: 10px 0 0 0; + background: #F7F8F9; + border: 1px solid #DDD; + border-bottom: none; + border-radius: 3px; +} + +/* line 74, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .form-actions { + margin: 10px 0 0; + text-align: right; + padding-bottom: 5px; + padding: 0; + background-color: inherit; + border-top: none; +} + +/* line 83, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box { + padding: 0 10px 10px; + background: white; + background: -moz-linear-gradient(white, #F1F1F1); + background: -webkit-linear-gradient(white, #F1F1F1); + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 91, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box h3 { + margin: 0 0 0 -10px; + width: 100%; + padding: 13px 10px 10px; + font-size: 16px; + line-height: 1.2; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: #FBFBFB; + background: -moz-linear-gradient(#FBFBFB, #F2F2F2); + background: -webkit-linear-gradient(#FBFBFB, #F2F2F2); + border-top-left-radius: 5px; + border-bottom: 1px solid white; +} + +/* line 105, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box .fakerule { + margin: 0 0 0 -10px; + width: 100%; + height: 1px; + padding: 0 10px; + font-size: 1px; + line-height: 1px; + background: #DDD; +} + +/* line 115, ../../../hub/static/css/mod/pull-new.scss */ +.reposha td.repo { + width: 1%; + white-space: nowrap; +} + +/* line 119, ../../../hub/static/css/mod/pull-new.scss */ +.reposha .repo .at { + padding-right: 5px; + color: #666; +} + +/* line 123, ../../../hub/static/css/mod/pull-new.scss */ +.reposha .sha { + text-align: left; +} + +/* line 126, ../../../hub/static/css/mod/pull-new.scss */ +.reposha input[type="text"] { + width: 98%; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + line-height: 20px; + color: #444; +} + +/* following commit-preview styles are also used in commits.html */ +/* line 136, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview { + margin: 10px 0 0 0; + font-size: 11px; +} + +/* line 140, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name { + margin: 0; + height: 20px; + line-height: 20px; + font-size: 12px; + color: #5B6375; +} + +/* line 147, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name .avatar { + float: left; + margin-right: 5px; + width: 16px; + height: 16px; + padding: 1px; + background: white; + border: 1px solid #CEDADF; +} + +/* line 156, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name a { + font-weight: bold; + color: black; +} + +/* line 160, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name .date { + color: #5B6375; +} + +/* line 163, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message, +.commit-preview p.error { + clear: both; + padding: 5px; + background: #EAF2F5; + border: 1px solid #BEDCE7; +} + +/* line 170, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message pre { + font-size: 11px; + color: #333; + white-space: pre-wrap; + word-wrap: break-word; + border: none; +} + +/* line 177, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message p.commit-id { + margin: 5px 0 0 0; + padding: 0; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 11px; +} + +/* line 184, ../../../hub/static/css/mod/pull-new.scss */ +.new-pull-request .pull-tabs { + clear: both; +} + +/* line 188, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-commit::before { + content: "\f01f"; +} + +/* line 191, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-discussion::before { + content: "\f04f"; +} + +/* line 194, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-diff::before { + content: "\f04d"; +} + +/* line 198, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form { + margin: 0; +} + +/* line 201, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 208, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 211, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form .preview-content { + background: white; +} + +/* line 215, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 224, ../../../hub/static/css/mod/pull-new.scss */ +.pull-dest-repo a { + font-size: 12px; + font-weight: bold; + padding: 5px 0; +} + +/* line 229, ../../../hub/static/css/mod/pull-new.scss */ +.pull-dest-repo p { + font-size: 11px; + color: #999; + margin: 5px 0 15px 0; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .css-truncate-target + .css-truncate-target { + max-width: 125px; +} + +/* line 2, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .commit-ref .user { + color: #CCC; +} + +/* line 3, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head { + margin: 20px 0; + background-color: #FAFAFA; + border: 1px solid #EEE; + border-bottom-width: 2px; + border-radius: 3px; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .attention-icon { + position: relative; + float: left; + margin: 4px 10px 0 0; +} + +/* line 5, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 10px; + position: relative; + float: left; + margin: 0; + line-height: 36px; + font-size: 13px; + max-width: 690px; + white-space: nowrap; +} + +/* line 6, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .user { + font-weight: bold; + color: #333; +} + +/* line 8, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 0; +} + +/* line 12, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .pull-state { + float: left; + padding: 8px; + margin-right: 8px; + border-right: 1px solid #EEE; + line-height: 20px; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .state-indicator { + font-size: 13px; + display: inline-block; + height: 20px; + line-height: 20px; + padding: 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +.commit-ref { + position: relative; + height: 20px; + display: inline-block; + padding: 0 5px; + border: 1px solid black; + border-radius: 3px; + font: 10px/20px Monaco,"Liberation Mono",Courier,monospace; + color: white; + white-space: nowrap; + vertical-align: middle; + background-color: #222; + background-image: -moz-linear-gradient(#444, #222); + background-image: -webkit-linear-gradient(#444, #222); + background-image: linear-gradient(#444, #222); + background-repeat: repeat-x; +} + +/* line 1, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button { + height: 25px; + width: 25px; + display: block; + float: right; + background: url("/static/img/fav_star.png") 0 0 no-repeat; +} + +/* line 2, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button.faved { + background: url("/static/img/faved_star.png") 0 0 no-repeat; +} + +/* line 6, ../../../hub/static/css/mod/pull-request.scss */ +#project-info { + margin-bottom: 15px; +} + +/* line 8, ../../../hub/static/css/mod/pull-request.scss */ +.tab-content { + overflow: initial; + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest.tab-content { + min-height: 280px; + overflow: visible; +} + +/* line 11, ../../../hub/static/css/mod/pull-request.scss */ +.commit-preview .date { + color: #5B6375; +} + +/* line 13, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav { + margin: 0 0 10px; + border-bottom: none; + height: 35px; +} + +/* line 14, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active { + font-weight: bold; +} + +/* line 15, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li a:hover { + background-color: transparent; + border: 1px solid transparent; +} + +/* line 16, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active a { + background-color: #fff; + border-bottom: 1px solid #fff; +} + +/* line 17, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active a:hover { + background-color: #fff; + border: 1px solid #DDD; + border-bottom: 1px solid #fff; +} + +/* line 19, ../../../hub/static/css/mod/pull-request.scss */ +.tabnav .counter { + position: relative; + top: -1px; + margin: 0 0 0 5px; + padding: 1px 5px 2px 5px; + font-size: 10px; + font-weight: bold; + color: #666; + background: #E5E5E5; + border-radius: 10px; +} + +/* line 21, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .explain { + margin: 15px 0; +} + +/* line 23, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header { + position: relative; + margin: 10px; +} + +/* line 24, ../../../hub/static/css/mod/pull-request.scss */ +.discusion-topic-infobar { + border-bottom: 1px solid #e5e5e5; +} + +/* line 25, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header .comment-topic-actions { + position: absolute; + top: 10px; + right: 10px; + list-style-type: none; +} + +/* line 26, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header .comment-topic-actions li { + float: left; + margin-left: 12px; +} + +/* line 28, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest blockquote.citation { + border: none; +} + +/* line 29, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #trac-ticket-title { + display: none; +} + +/* line 30, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket { + margin-top: 23px; +} + +/* line 31, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .trac-topnav { + margin-top: 0; + top: -20px; + position: absolute; + right: 0; +} + +/* line 33, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket, .pullrequest div.change { + margin-bottom: 20px; + background: #fff; + border-radius: 3px; + border: 3px solid #eee; +} + +/* line 34, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket::before, .pullrequest div.change::before, .pullrequest #propertyform fieldset.iefix::before, .pullrequest #add-comment-form .form-content::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; + position: absolute; +} + +/* line 35, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket::before { + position: absolute; +} + +/* line 36, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change::before, .pullrequest #propertyform fieldset.iefix::before { + position: relative; +} + +/* line 37, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket { + padding: 5px; +} + +/* line 39, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date { + float: none; + clear: both; + color: #666; + font-size: 12px; +} + +/* line 40, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date::after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* line 41, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date p { + float: left; +} + +/* line 42, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .summary { + font-size: 20px; + font-weight: bold; + margin: 0; +} + +/* line 43, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .properties { + display: none; + border: none; +} + +/* line 44, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description { + margin-top: 10px; +} + +/* line 45, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description div { + padding: 0; +} + +/* line 46, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description h3 { + display: none; +} + +/* line 47, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description #addreply { + float: right; +} + +/* line 51, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .commits-condensed tr td.message { + word-break: break-all; +} +/* line 55, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog { + border: none; + padding: 0; +} +/* line 60, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.author { + width: 80px; +} +/* line 63, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.date { + width: 100px; +} +/* line 66, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.status { + width: 20px; +} +/* line 71, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.commit-status { + width: 100px; + display: inline-block; + border-radius: 100px; + width: 15px; + height: 15px; + vertical-align: middle; +} +/* line 79, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.dirty { + background-color: #f6e69f; +} +/* line 82, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.error { + background-color: #da4f49; +} +/* line 85, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.success { + background-color: #6eda62; +} + +/* line 93, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog h3 { + border: none; +} + +/* line 94, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_mark { + background-color: #DDD; + height: 31px; + text-align: center; + color: #777; + line-height: 31px; +} + +/* line 95, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_commits { + display: none; +} + +/* line 96, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_codereview { + display: none; +} + +/* line 97, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change { + padding: 0; + background: #FBFBFB; +} + +/* line 98, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change h3.change { + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#F8FBFC, #DDE8EB); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fbfc', endColorstr='#dde8eb')"; +} + +/* line 99, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change form[id^=reply-to-comment-] { + right: 7px; +} + +/* line 100, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change table.commits .commit code { + background-color: transparent; +} + +/* line 101, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment { + margin: 0; + top: -1px; + position: relative; +} + +/* line 102, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment #files { + margin-top: -24px; +} + +/* line 103, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment #files .file { + width: 100%; + margin: 0 0 0 -1px; +} + +/* line 104, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment p br { + height: 0; +} + +/* line 105, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment p { + padding: 5px; + margin: 0; + color: #333; +} + +/* line 107, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change form#trac-comment-editor { + position: relative; + right: 0; + margin: 12px; +} + +/* line 108, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest h2#trac-add-comment, .pullrequest .trac-nav { + display: none; +} + +/* line 109, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest fieldset.iefix { + padding: 6px; + background: #EEE; + border-radius: 3px; +} + +/* line 110, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest fieldset.iefix h3 { + font-size: 13px; + line-height: 1.4; + color: #333; + margin: 0 5px; +} + +/* line 112, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #propertyform .btn[type=submit] { + padding: 8px 15px; +} + +/* line 113, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #modify { + background-color: #EEE; + padding: 12px; +} + +/* line 114, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft { + padding: 1em; + background: none; + background-color: #FBFBFB; +} + +/* line 115, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment { + margin: 1em; +} + +/* line 116, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment blockquote.citation { + margin: 12px 0; +} + +/* line 117, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment blockquote.citation p { + font-size: 13px; +} + +/* line 119, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket .side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 121, ../../../hub/static/css/mod/pull-request.scss */ +table.commits { + margin: 0; + font-size: 12px; +} + +/* line 123, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation { + margin: -10px 0 15px; + font-size: 13px; + font-weight: 300; + color: #666; +} + +/* line 124, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation p.quickstat { + display: inline-block; + margin: 0 5px 0 0; +} + +/* line 125, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation a { + color: #666; +} + +/* line 126, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation .avatar { + position: relative; + display: inline-block; + height: 24px; + top: -2px; + margin-right: 3px; + margin-bottom: 3px; +} + +/* line 127, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation .avatar img { + vertical-align: middle; +} + +/* action-bubble part is also used in commits.html */ +/* line 131, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble { + margin: 20px 0; +} + +/* line 132, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .action { + float: left; + line-height: 29px; +} + +/* line 133, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state-indicator { + display: inline-block; + margin-right: 8px; + font-size: 12px; + padding: 0 5px; + line-height: 24px; +} + +/* line 134, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator.closed { + background: #BD2C00; +} + +/* line 135, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator { + display: block; + font-size: 14px; + font-weight: bold; + color: white; + text-align: center; + border-radius: 3px; + background: #999; +} + +/* line 136, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble { + font-size: 13px; + font-weight: 300; + background-color: transparent; +} + +/* line 137, ../../../hub/static/css/mod/pull-request.scss */ +.bubble { + padding: 3px; + background: #EEE; + border-radius: 3px; +} + +/* line 138, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble p { + margin: 0; + line-height: 26px; +} + +/* line 139, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble strong { + font-weight: bold; +} + +/* line 140, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .avatar { + position: relative; + top: -2px; + display: inline-block; + height: 24px; + margin-right: 3px; + line-height: 1px; +} + +/* line 141, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .avatar img { + vertical-align: middle; +} + +/* line 142, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator.open, .state-indicator.reopened, .state-indicator.merged { + background: #6CC644; +} + +/* the following action-bubble style seems only used in commits.html */ +/* line 146, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state-renamed { + color: black; + background-color: #FFFA5D; + text-shadow: none; +} + +/* line 151, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state { + display: inline-block; + padding: 0 5px; + height: 24px; + line-height: 25px; + text-shadow: 0 -1px -1px rgba(0, 0, 0, 0.25); +} + +/* line 158, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state { + float: none; + padding: 3px 5px; + font-size: 11px; +} + +/* line 165, ../../../hub/static/css/mod/pull-request.scss */ +.closed-banner { + margin: 15px 0; + height: 7px; + overflow: hidden; + background: url("/static/img/closed_pattern.gif"); + border-radius: 5px; +} + +/* line 167, ../../../hub/static/css/mod/pull-request.scss */ +.change-header .change-header-right { + float: right; + height: 15px; +} + +/* line 168, ../../../hub/static/css/mod/pull-request.scss */ +.change-header .change-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); +} + +/* line 170, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket { + padding: 0; +} + +/* line 171, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 172, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 174, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change .change-header { + height: 23px; + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 3px 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#F8FBFC, #DDE8EB); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fbfc', endColorstr='#dde8eb')"; +} + +/* line 176, ../../../hub/static/css/mod/pull-request.scss */ +.comment-content .comment-body, .pullrequest .ticket #ticket .comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 177, ../../../hub/static/css/mod/pull-request.scss */ +.comment-content .comment-body, .pullrequest #changelog .comment p { + font-size: 13px; +} + +/* line 179, ../../../hub/static/css/mod/pull-request.scss */ +.user-mention, .team-mention { + font-weight: bold; + color: #333; +} + +/* line 181, ../../../hub/static/css/mod/pull-request.scss */ +.change #files .file { + border: none; +} + +/*========= Github Style ========*/ +/* line 4, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 12, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 16, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 34, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 39, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 45, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 46, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 47, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 48, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* TODO remove the following line */ +/* file-blame-blob should only be import at blame page */ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files { + position: relative; +} + +/* line 6, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file { + margin-top: 0; +} + +/* line 9, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 15, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta, +.file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 30, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info, +.file-box .meta .info { + float: left; + height: 33px; + max-width: 555px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* line 41, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span, +.file-box .meta .info span { + padding-left: 9px; + margin-left: 5px; + border-left: 1px solid #C1C1C1; + box-shadow: inset 1px 0 0 white; +} + +/* line 50, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 63, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 67, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 76, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat .diffstat-bar { + color: #D8D8D8; +} + +/* line 79, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 85, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes { + display: block; + position: relative; + display: block; + float: left; + margin-right: 10px; +} + +/* line 92, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes label { + font-weight: bold; + margin: 5px 0; +} + +/* line 96, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes input { + margin: 0; +} + +/* line 99, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .button-group, +.file-box .meta .actions .button-group { + float: right; + margin-top: 2px; +} + +/* line 104, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions code, +.file-box .meta .actions code { + background: inherit; + border: none; + font-size: 11px; + color: inherit; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + padding: 0; +} + +/* line 114, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file { + margin: 15px 0; +} + +/* line 118, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 120, ../../../hub/static/css/mod/file-blame-blob.scss */ +.change #files .file, .file-box, .change .file { + margin-bottom: 0; +} + +/* line 122, ../../../hub/static/css/mod/file-blame-blob.scss */ +.blame .line-data { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* ticket style */ +/* line 2, ../../../hub/static/css/mod/pull-ticket.scss */ +#content.ticket { + width: 63em; + max-width: 100%; + margin-left: auto; +} + +/* line 8, ../../../hub/static/css/mod/pull-ticket.scss */ +#field-description-help { + float: right; +} + +/* line 9, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties div.trac-resizable, #field-description { + width: 100%; +} + +/* line 11, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket { + background: #ffd; + border: 1px outset #996; + margin-top: 1em; + padding: .5em 1em; + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket.ticketdraft { + background: #f8f8f8 url(../draft.png); +} + +/* line 22, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticketchange.ticketdraft { + padding: 0 1em; + margin: 1em 0; +} + +/* line 26, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticketchange.ticketdraft h3 { + margin-top: .5em; +} + +/* line 29, ../../../hub/static/css/mod/pull-ticket.scss */ +.preview-notice { + font-weight: bold; +} + +/* line 31, ../../../hub/static/css/mod/pull-ticket.scss */ +.ticketdraft { + background: #f8f8f8 url(../draft.png); + border: 1px outset #996; + padding: 0 .2em; +} + +/* line 37, ../../../hub/static/css/mod/pull-ticket.scss */ +h1 .status { + color: #444; +} + +/* line 38, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket h2.summary { + margin: 0 0 0.8em 0; +} + +/* line 39, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .date { + color: #996; + float: right; + font-size: 85%; + position: relative; +} + +/* line 40, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .date p { + margin: 0.3em; +} + +/* line 42, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties { + clear: both; + border-top: 1px solid #dd9; + border-collapse: collapse; + table-layout: fixed; + width: 100%; +} + +/* line 49, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties tr { + border-bottom: 1px dotted #eed; +} + +/* line 50, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td, #ticket table.properties th { + font-size: 80%; + padding: .5em 1em; + vertical-align: top; +} + +/* line 55, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties th { + color: #663; + font-weight: normal; + text-align: left; + width: 20%; +} + +/* line 61, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td { + width: 30%; +} + +/* line 62, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td p:first-child { + margin-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td p:last-child { + margin-bottom: 0; +} + +/* line 64, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties .description { + border-top: 1px solid #dd9; +} + +/* line 66, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .description h3 { + border-bottom: 1px solid #dd9; + color: #663; + font-size: 100%; + font-weight: normal; +} + +/* line 72, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .description h3 .lastmod { + font-size: 90%; +} + +/* line 75, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .inlinebuttons { + float: right; + position: relative; + bottom: 0.3em; + margin-left: 0.2em; +} + +/* line 82, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog { + border: 1px outset #996; + padding: 1em; +} + +/* line 83, ../../../hub/static/css/mod/pull-ticket.scss */ +.trac-shade { + background-color: #eee; +} + +/* line 84, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor { + margin-left: 2em; + margin-bottom: 1em; +} + +/* line 85, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor div.trac-resizable { + width: 100%; +} + +/* line 86, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor textarea { + background: #ffffe0; + margin-left: -1px; + margin-right: -1px; + width: 100%; +} + +/* line 92, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor .wikitoolbar { + margin-left: -1px; +} + +/* line 93, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-add-comment :link, #trac-add-comment :visited { + color: #b00; +} + +/* line 94, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog h3, #ticketchange h3 { + border-bottom: 1px solid #d7d7d7; + color: #999; + font-size: 100%; + font-weight: normal; +} + +/* line 100, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading, #changelog .inlinebuttons { + float: right; + margin-left: 0.2em; +} + +/* line 101, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading { + font-size: 85%; +} + +/* line 102, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading :link, .threading :visited { + border-bottom: 0; +} + +/* line 103, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .trac-lastedit { + padding-left: 2.5em; + color: #999; + font-size: 80%; +} + +/* line 108, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .trac-lastedit :link, #changelog .trac-lastedit :visited { + color: inherit; +} + +/* line 110, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .changes, #ticketchange .changes { + list-style: square; + margin-left: 2em; + padding: 0; +} + +/* line 111, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .comment, #ticketchange .comment { + margin-left: 2em; +} + +/* line 113, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field { + margin-top: .75em; + width: 100%; +} + +/* line 114, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field fieldset.iefix { + margin-left: 1px; + margin-right: 1px; +} + +/* line 115, ../../../hub/static/css/mod/pull-ticket.scss */ +label[for=comment] { + float: right; +} + +/* line 116, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field .wikitoolbar { + margin-left: -1px; +} + +/* line 117, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field div.trac-resizable { + width: 100%; +} + +/* line 119, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties { + white-space: nowrap; + line-height: 160%; + padding: 0.5em; +} + +/* line 120, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table { + border-spacing: 0; + width: 100%; + padding: 0 0.5em; +} + +/* line 121, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table th { + padding: .4em; + text-align: right; + width: 20%; + vertical-align: top; +} + +/* line 127, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table th.col2 { + border-left: 1px dotted #d7d7d7; +} + +/* line 128, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table td { + vertical-align: middle; + width: 30%; +} + +/* line 129, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table td.fullrow { + vertical-align: middle; + width: 80%; +} + +/* line 131, ../../../hub/static/css/mod/pull-ticket.scss */ +#action { + line-height: 2em; +} + +/* line 133, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio { + border: none; + margin: 0; + padding: 0; +} + +/* line 134, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio legend { + color: #000; + float: left; + font-size: 100%; + font-weight: normal; + padding: 0 1em 0 0; +} + +/* line 141, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio label { + padding-right: 1em; +} + +/* tabs */ +/* line 3, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs { + margin: 15px 0 15px 0; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #555; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: #E8E8E8; + background: -moz-linear-gradient(#E8E8E8, #D2D2D2); + background: -webkit-linear-gradient(#E8E8E8, #D2D2D2); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8e8e8',endColorstr='#d2d2d2')"; + border: 1px solid #D1D1D1; + border-bottom-color: #BBB; + border-radius: 3px; +} + +/* line 18, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li { + list-style-type: none; + display: inline; + line-height: 24px; +} + +/* line 23, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li:first-child a.selected { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +/* line 27, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li:first-child a { + border-left: none; +} + +/* line 30, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li.active a { + color: #333; + background: white; + background: -moz-linear-gradient(white, #F2F2F2); + background: -webkit-linear-gradient(white, #F2F2F2); +} + +/* line 36, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs a { + float: left; + height: 24px; + padding: 0 7px; + color: #666; + font-weight: bold; + text-decoration: none; + border-right: 1px solid #ABABAB; + border-left: 1px solid #F6F6F6; +} + +/* line 46, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs .mini-icon { + vertical-align: middle; + color: #888; +} + +/* line 50, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs .counter { + display: inline-block; + position: relative; + top: -1px; + margin-left: 2px; + line-height: 12px; + padding: 1px 3px 0 3px; + font-size: 9px; + background: #ECECEC; + border: 1px solid #AFAFAF; + border-right-color: #ECECEC; + border-bottom-color: #ECECEC; + border-radius: 2px; +} + +/* codereview style */ +/* comments style is also used in pull-new page's description input box */ +/* line 5, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comments { + padding: 5px; +} + +/* line 8, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment { + margin: 5px 0; + border: 1px solid #CACACA; +} + +/* line 12, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-meta { + padding: 5px 10px; + border-bottom: 1px solid #CCC; + background-image: linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -o-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -moz-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -webkit-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -ms-linear-gradient(top, #F4F8F9, #DCE8EC); +} + +/* line 22, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment .body { + color: #333; + font-size: 13px; + padding: 10px; + background: #FBFBFB; +} + +/* line 29, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-form .help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} + +/* line 35, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-form textarea { + width: 100%; + height: 100px; + font-size: 12px; +} + +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +/* Like these */ +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin-top: 10px; +} + +/* line 6, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 13, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 27, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 37, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 41, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 45, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 50, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} + +/* line 59, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed { + margin-top: 0; + border: none; + background-color: white; +} + +/* line 64, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td { + padding: 4px; + vertical-align: top; + border-top: 1px solid #E2EAEE; +} + +/* line 69, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.gravatar { + width: 29px; + padding: 5px; +} + +/* line 74, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:first-child td { + border-top: 0; +} + +/* line 77, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:nth-child(2n) td { + background: #F7FBFC; +} + +/* line 80, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar { + display: block; + width: 16px; + height: 16px; + line-height: 1px; + padding: 1px; + border: 1px solid #DDD; + background: white; +} + +/* line 89, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar a { + display: inline-block; +} + +/* line 92, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author { + padding-left: 0; + color: #666; + width: 100px; + font-weight: bold; +} + +/* line 98, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author span.commit-author { + display: inline-block; + width: 100px; + text-overflow: ellipsis; + overflow: hidden; + line-height: 22px; +} + +/* line 105, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author a { + color: #333; +} + +/* line 108, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message { + padding-left: 0; +} + +/* line 111, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed code { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + background: inherit; +} + +/* line 115, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message code { + line-height: 22px; +} + +/* line 118, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message a { + color: #333; +} + +/* line 121, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed .commit-desc pre { + margin-top: 5px; + margin-bottom: 4px; + border-left: 1px solid #E5E5E5; + padding-left: 8px; + font-size: 11px; + font-weight: normal; + color: #596063; +} + +/* line 130, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta { + width: 1%; + text-align: right; + white-space: nowrap; + padding-right: 10px; +} + +/* line 136, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta code { + line-height: 22px; +} + +/* following style for new-pull 'xxx add commits' commits-condense style */ +/* line 142, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin: 0; + font-size: 12px; +} + +/* line 147, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits .commit { + width: 59px; + padding-right: 10px; +} + +/* line 151, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits code { + border: none; +} + +/* line 154, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.message { + /* width: 70%;*/ +} + +/* line 157, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.date { + text-align: right; +} + +/* line 161, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed code { + white-space: normal; +} + +/* line 164, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed pre { + white-space: pre-wrap; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} + +/* line 5, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 2px 0 16px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} +/* line 12, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.deletion, .file-box .data .line_numbers.deletion { + color: #AAA; + background-color: #f7c8c8; +} +/* line 16, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.insertion, .file-box .data .line_numbers.insertion { + color: #AAA; + background-color: #ceffce; +} + +/* line 21, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 24, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .code { + width: 100%; +} + +/* line 28, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side { + overflow-x: none; + display: none; +} + +/* line 33, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side .file-col { + width: 50%; + float: left; + overflow-x: auto; +} + +/* line 40, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table { + border-collapse: collapse; +} + +/* line 44, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 46, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table pre { + border-radius: 0px; +} + +/* line 48, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data table, .file-box .data table { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + line-height: 1.4; +} + +/* line 54, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .file-diff-line span.color { + cursor: default; +} + +/* Comment Bubble */ +/* line 58, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line .add-bubble { + position: absolute; + left: 0; + width: 25px; + height: 16px; + margin-top: 0; + cursor: pointer; + opacity: 0; + color: #4183C4; +} + +/* line 69, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line:hover .add-bubble { + opacity: 1; +} + +/* Comment Bubble icons */ +/* line 72, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 83, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 91, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon-add-comment::before { + content: "\f06f"; +} + +/* line 93, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:first-child:after { + margin: -18px 0 0; +} + +/* line 97, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:after { + background: none repeat scroll 0 0 #fff; + content: ""; + display: block; + height: 2px; + margin: -16px 0 0; + position: absolute; + left: 0px; + width: 938px; +} + +/* line 109, ../../../hub/static/css/mod/file-diff-blob.scss */ +.data .line-numbers-skipped { + position: absolute; + width: 79px; + background-color: #f5f5f5; + border-right: 1px solid #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* line 119, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .skipped-top, .skipped-container .skipped-bottom { + height: 18px; + background-color: #f5f5f5; +} + +/* line 124, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top::before { + background: #fff; + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + display: block; + height: 4px; + position: relative; + top: -1px; + margin-left: -1px; +} + +/* line 140, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 145, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 20px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 5px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 170, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .ellipsis { + margin-top: -10px; +} + +/* line 174, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before, .skipped-container .ellipsis::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 188, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2026"; + padding: 2px 0 0; + top: -4px; +} + +/* line 197, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 206, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 211, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 16px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 44px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 236, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .toggle_whitespace { + margin-top: -10px; +} + +/* line 240, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before, .skipped-container .toggle_whitespace::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 254, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2423"; + padding: 2px 0 0; + top: -4px; +} + +/* line 263, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/merge-guide.scss */ +.pullrequest .merge-guide { + margin: 20px 0; +} + +/* line 4, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview { + margin: 10px 0 0 0; +} +/* line 7, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview .message, .commit-preview .commit-preview p.error { + clear: both; + padding: 5px; + background: #eaf2f5; + border: 1px solid #bedce7; +} +/* line 14, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview .message pre { + font-size: 11px; + color: #333; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* line 24, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .mergeable { + padding: 8px 10px; + border: 1px solid #ddd; + border-radius: 2px; +} +/* line 30, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .mergeable.merging { + background-color: #589ab3; + background-image: -moz-linear-gradient(#82bccd, #589ab3); + background-image: -webkit-linear-gradient(#82bccd, #589ab3); + background-image: linear-gradient(#82bccd, #589ab3); + background-repeat: repeat-x; + border-color: #7699ad; + border-bottom-color: #648192; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-repeat: repeat-x; + border-color: #8bc384; +} +/* line 44, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable { + background-color: #6eda62; + background-image: -moz-linear-gradient(#9ee692, #6eda62); + background-image: -webkit-linear-gradient(#9ee692, #6eda62); + background-image: linear-gradient(#9ee692, #6eda62); +} +/* line 50, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable p.message { + color: #0b5f00; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.4); +} +/* line 54, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable p.message span.blue { + color: blue; +} +/* line 58, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-dirty .mergeable, .merge-branch .dirty-cleanup .mergeable { + position: relative; + background-color: #f6e69f; + background-image: -moz-linear-gradient(#f6e69f, #f6e69f); + background-image: -webkit-linear-gradient(#f6e69f, #f6e69f); + background-image: linear-gradient(#f6e69f, #f6e69f); + background-repeat: repeat-x; + border-color: #888; +} +/* line 68, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-error .mergeable, .merge-branch .dirty-cleanup .mergeable { + position: relative; + background-color: #da4f49; + background-image: -moz-linear-gradient(#da4f49, #da4f49); + background-image: -webkit-linear-gradient(#da4f49, #da4f49); + background-image: linear-gradient(#da4f49, #da4f49); + background-repeat: repeat-x; + border-color: #888; +} +/* line 78, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .minibutton { + float: right; + margin: -3px 0 0 15px; +} +/* line 83, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch p.message { + margin: 0; + font-size: 13px; + font-weight: bold; +} +/* line 89, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .merge-form .merge-error-message { + display: none; + margin: 10px 0 0 0; + padding: 5px 7px; + color: #bd2c00; + font-weight: bold; + font-size: 12px; + line-height: 19px; + background: rgba(255, 255, 255, 0.8); + border-radius: 2px; +} +/* line 101, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview { + position: relative; + display: table-row; + font-size: 12px; +} +/* line 106, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .author { + display: table-cell; + width: 36px; + padding: 8px 10px; + vertical-align: top; + background: #d3e5eb; + border: 1px solid #bedce7; + border-right: none; +} +/* line 116, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .gravatar { + float: left; + margin: 2px 8px 0 0; +} +/* line 121, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message { + display: table-cell; + width: 805px; + padding: 8px 10px; + vertical-align: top; + background-color: #e7f0f3; + background-image: -moz-linear-gradient(#f6f9fa, #e7f0f3); + background-image: -webkit-linear-gradient(#f6f9fa, #e7f0f3); + background-image: linear-gradient(#f6f9fa, #e7f0f3); + background-repeat: repeat-x; + border: 1px solid #bedce7; +} +/* line 133, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message pre { + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 12px; + color: #5b6f74; +} +/* line 139, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message textarea { + margin-top: 5px; + box-sizing: border-box; + width: 100%; + height: 50px; + padding: 4px; + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 12px; + color: #666; + background-color: #fafafa; +} + +/* line 154, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-form { + display: none; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* highlight */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* Write/Preview Control style for new PR component */ +/* line 27, ../../../hub/static/css/app/pull-new.scss */ +ul.edit-preview-tabs { + margin: 0 0 5px 0; + line-height: 13px; +} + +/* line 31, ../../../hub/static/css/app/pull-new.scss */ +ul.edit-preview-tabs li { + list-style-type: none; + margin: 0; + display: inline-block; +} + +/* line 36, ../../../hub/static/css/app/pull-new.scss */ +ul.edit-preview-tabs a { + display: inline-block; + padding: 2px 8px; + font-size: 11px; + font-weight: bold; + text-decoration: none; + color: #666; + border: 1px solid transparent; + border-radius: 10px; +} + +/* line 47, ../../../hub/static/css/app/pull-new.scss */ +.previewable-comment-form li.active .write-tab, +.previewable-comment-form li.active .preview-tab { + color: #333; + background: white; + border-color: #BBB; + border-right-color: #DDD; + border-bottom-color: #DDD; +} + +/* Description Component background & help text, from hub.css*/ +/* line 57, ../../../hub/static/css/app/pull-new.scss */ +.comment-form { + position: relative; + margin: -10px 0 10px 0; + padding: 5px; + background: #EEE; + border-radius: 5px; +} + +/* line 65, ../../../hub/static/css/app/pull-new.scss */ +.comment-form p.help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} + +/* line 72, ../../../hub/static/css/app/pull-new.scss */ +.write-content.zen-enabled .go-zen { + top: 15px; +} + +/* line 74, ../../../hub/static/css/app/pull-new.scss */ +#form-file-upload { + top: -70px; +} + +/* line 76, ../../../hub/static/css/app/pull-new.scss */ +.contributing { + padding: 15px; + margin: 15px 0; + font-size: 14px; + color: #4c4a42; + background-color: #fff9ea; + border: 1px solid #dfd8c2; + border-radius: 3px; +} diff --git a/dist/css/app/pulls.css b/dist/css/app/pulls.css new file mode 100644 index 0000000..486d2fc --- /dev/null +++ b/dist/css/app/pulls.css @@ -0,0 +1,6001 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs { + display: block; + float: left; + padding: 5px 5px 0; + overflow: hidden; +} +/* line 6, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .filter-tab { + display: inline-block; + padding: 0 8px; + height: 24px; + line-height: 24px; + font-size: 12px; + font-weight: bold; + color: #888; + -webkit-font-smoothing: antialiased; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + text-decoration: none; + border: 1px solid #CCC; + border-bottom: 0; + border-radius: 3px 3px 0 0; + background: rgba(255, 255, 255, 0.2); + cursor: pointer; +} +/* line 23, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .selected { + color: #333; + background: white; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + border-color: #B4B4B4; + border-bottom: 1px solid white; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls { + margin: 20px 0; +} +/* line 6, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls h2 { + font-size: 16px; + font-weight: bold; + margin: 0; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-list.scss */ +.row.pulls .mod p { + word-wrap: break-word; +} + +/* line 17, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list { + word-break: break-all; +} +/* line 19, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 { + margin: 0; + font-size: 14px; + line-height: 1.3; +} +/* line 23, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 a { + color: #333; +} +/* line 27, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .list-browser-item { + position: relative; + padding: 10px; + border-bottom: 1px solid #EAEAEA; +} +/* line 32, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .meta { + float: left; + margin-top: 4px; + margin-bottom: -2px; + height: 16px; + padding: 4px 6px; + font-size: 11px; + color: rgba(0, 0, 0, 0.55); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: rgba(0, 0, 0, 0.07); + border-radius: 3px; +} +/* line 44, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list p a { + color: #555; + text-decoration: none; +} + +/* line 50, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser { + border-color: #D5D5D5; + position: relative; + border: 1px solid #DDD; + border-radius: 5px; +} +/* line 55, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination { + float: right; + margin: 7px; + font-weight: bold; + height: 26px; +} +/* line 60, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination a { + padding: 4px; + font-size: 11px; + color: #4183C4; + width: auto; +} +/* line 66, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination span { + padding: 4px; + font-size: 11px; + color: #4183C4; +} +/* line 72, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none, .chromed-list-browser .error { + padding: 10px; + border-bottom: 1px solid #DDD; +} +/* line 75, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none p, .chromed-list-browser .error p { + margin: 0; + padding: 20px; + border-radius: 3px; + text-align: center; + font-weight: bold; + font-size: 14px; + color: #999; + background: #F3F3F3; + -webkit-font-smoothing: antialiased; +} + +/* line 91, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-info { + position: absolute; + bottom: 3px; + right: 5px; +} +/* line 96, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item { + padding-left: 18px; + font-size: 11px; + font-weight: bold; + color: #999; +} +/* line 101, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item a { + color: #666; +} + +/* line 107, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar { + font-family: "Helvetica Neue", Helvetica, Arial, freesans; + border-radius: 5px 5px 0 0; + height: 31px; + background-color: #CACACA; + background-image: -moz-linear-gradient(#EFEFEF, #CACACA); + background-image: -webkit-linear-gradient(#EFEFEF, #CACACA); + background-image: linear-gradient(#EFEFEF, #CACACA); + background-repeat: repeat-x; + border-bottom: 1px solid #B4B4B4; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/* line 117, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar li { + list-style-type: none; + display: inline; +} + +/* line 123, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer { + font-size: 11px; + font-weight: bold; + color: #777; + overflow: hidden; + min-height: 15px; + background: #F6F6F6; + border-radius: 0 0 5px 5px; +} +/* line 131, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer .pagination { + margin: 5px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 2, ../../../hub/static/css/mod/navbar-search.scss */ +.navbar-search i { + color: #63b6ae; + padding-right: 4px; +} diff --git a/dist/css/app/settings.css b/dist/css/app/settings.css new file mode 100644 index 0000000..d546ae9 --- /dev/null +++ b/dist/css/app/settings.css @@ -0,0 +1,5526 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 5, ../../../hub/static/css/app/settings.scss */ +.avatar { + display: inline-block; + width: 48px; + margin-right: 5px; +} + +/* line 10, ../../../hub/static/css/app/settings.scss */ +img.avatar { + width: 18px; + height: 18px; +} + +/* line 14, ../../../hub/static/css/app/settings.scss */ +.form-note { + margin-top: -1px; + display: inline-block; + padding: 5px; + font-size: 11px; + color: #494620; + background: #f7ea57; + border: 1px solid #c0b536; + border-top-color: #fff; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +/* line 26, ../../../hub/static/css/app/settings.scss */ +ul.hook-list li a { + display: inline-block; + padding: 3px 0 3px 5px; + color: #999; + text-decoration: none; +} + +/* line 33, ../../../hub/static/css/app/settings.scss */ +.btn-details { + margin-right: 4px; +} diff --git a/dist/css/app/source.css b/dist/css/app/source.css new file mode 100644 index 0000000..b7148da --- /dev/null +++ b/dist/css/app/source.css @@ -0,0 +1,8541 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} + +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.svg") format("svg"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 8, ../../../hub/static/css/mod/source.scss */ +.last-bar { + margin-top: 5px; +} + +/* line 11, ../../../hub/static/css/mod/source.scss */ +p.last-commit { + margin: 10px 0 -5px 0; + font-size: 11px; + color: #888; +} +/* line 16, ../../../hub/static/css/mod/source.scss */ +p.last-commit .mini-icon { + color: #BBB; + position: relative; + top: 1px; +} + +/* line 22, ../../../hub/static/css/mod/source.scss */ +.pr-latest-branch { + color: #888; + margin-top: 10px; + line-height: 27px; + border-bottom: 1px solid #DDD; + padding-bottom: 10px; +} + +/* line 29, ../../../hub/static/css/mod/source.scss */ +.pr-latest-branch #pullrequest-btn { + margin-right: 5px; +} + +/* line 32, ../../../hub/static/css/mod/source.scss */ +.mini-icon, .mega-icon { + line-height: 1; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + text-decoration: none; +} + +/* line 43, ../../../hub/static/css/mod/source.scss */ +.commit-tease { + margin: 10px 0; + padding: 8px 8px 0; + background: #EEE; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 50, ../../../hub/static/css/mod/source.scss */ +.commit-tease p.commit-title { + margin: 0 0 6px 0; +} + +/* line 53, ../../../hub/static/css/mod/source.scss */ +.commit .commit-title, .commit .commit-title a { + color: #4E575B; +} + +/* line 56, ../../../hub/static/css/mod/source.scss */ +.commit-tease .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 65, ../../../hub/static/css/mod/source.scss */ +.commit-tease .sha-block { + float: right; + color: #888; +} + +/* line 69, ../../../hub/static/css/mod/source.scss */ +.commit .sha-block, .commit .sha { + font-size: 11px; + font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; +} + +/* line 73, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship { + font-size: 12px; + color: #999; + margin-left: -4px; + margin-bottom: -4px; + margin-top: -2px; +} +/* line 79, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} +/* line 85, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship a, .commit-tease .authorship span { + color: #444; + text-decoration: none; + font-weight: bold; +} +/* line 89, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship a:hover, .commit-tease .authorship span:hover { + text-decoration: underline; +} + +/* line 95, ../../../hub/static/css/mod/source.scss */ +.commit-tease .mini-icon-clippy { + margin-right: 5px; + float: right; +} + +/* line 99, ../../../hub/static/css/mod/source.scss */ +.mini-icon-clippy { + display: inline-block; + height: 16px; + width: 16px; + background-color: transparent; + background-position: 0 0; + background-repeat: no-repeat; + vertical-align: text-bottom; + background-image: url("/static/img/clippy.png"); +} + +/* line 109, ../../../hub/static/css/mod/source.scss */ +.mini-icon-u-list:before { + content: "\f061"; +} + +/* line 110, ../../../hub/static/css/mod/source.scss */ +.mini-icon-text-file:before { + content: "\f211"; +} + +/* line 111, ../../../hub/static/css/mod/source.scss */ +.mini-icon-code-file:before { + content: "\f210"; +} + +/* line 112, ../../../hub/static/css/mod/source.scss */ +.mini-icon-directory:before { + content: "\f016"; +} + +/* line 113, ../../../hub/static/css/mod/source.scss */ +.mini-icon-submodule:before { + content: "\f017"; +} + +/* line 115, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li { + padding: 3px 0 2px 0; + border-top: 1px solid #eee; +} + +/* line 116, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles a.mode-040000 { + color: #333; +} + +/* line 117, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li a { + display: block; +} + +/* line 118, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li:hover { + background: #eee; +} + +/* line 119, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li a.warn-bad { + color: red; +} + +/* line 1, ../../../hub/static/css/mod/source-edit.scss */ +.raw { + overflow: visible; +} + +/* line 2, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop { + float: right; + width: 137px; + height: 140px; + margin-top: -140px; + margin-right: 20px; + overflow: hidden; + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop .popic { + display: block; + position: absolute; + bottom: -115px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; +} + +/* line 19, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop:hover .popic { + bottom: -10px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; +} + +/* Like these */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* Highlight style from pygments */ +/* line 2, ../../../hub/static/css/mod/code-highlight.scss */ +.code .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/code-highlight.scss */ +.code { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/code-highlight.scss */ +.code .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/code-highlight.scss */ +.code .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/code-highlight.scss */ +.code .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/code-highlight.scss */ +.code .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/code-highlight.scss */ +.code .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/code-highlight.scss */ +.code .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/code-highlight.scss */ +.code .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/code-highlight.scss */ +.code .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/code-highlight.scss */ +.code .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/code-highlight.scss */ +.code .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/code-highlight.scss */ +.code .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/code-highlight.scss */ +.code .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/file-browser.scss */ +#tree, #blob { + margin: 0 0 27px; +} + +/* line 3, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser { + width: 100%; + margin: 0; + border-radius: 3px; + border: 1px solid #CACACA; +} + +/* line 4, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser th { + text-align: left; + font-weight: bold; + padding: 6px 3px; + color: #555; + text-shadow: 0 1px 0 #fff; + border-bottom: 1px solid #d8d8d8; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 5, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser td { + background: #f8f8f8; + border-bottom: 1px solid #eee; + padding: 7px 3px; + color: #484848; + vertical-align: middle; +} + +/* line 6, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser tbody tr:last-child td { + border-bottom: 0; +} + +/* line 7, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser .message { + min-width: 270px; + max-width: 484px; +} + +/* line 8, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser td a.message { + color: #484848; +} + +/* line 10, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser i, .file i, .commit-group-item i { + filter: alpha(opacity=70); + opacity: .7; +} + +/* line 11, ../../../hub/static/css/mod/file-browser.scss */ +.file .error { + text-align: center; + margin: 30px; + color: #666; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} diff --git a/dist/css/app/stat.css b/dist/css/app/stat.css new file mode 100644 index 0000000..3edf2ea --- /dev/null +++ b/dist/css/app/stat.css @@ -0,0 +1,5528 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +/* line 10, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + *display: inline; +} +/* line 13, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +/* line 21, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { + *display: inline; +} +/* line 24, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + visibility: hidden; +} +/* line 32, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { + *display: inline; +} +/* line 35, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +/* line 45, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { + display: block; +} +/* line 48, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +/* line 52, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +/* line 56, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +/* line 59, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +/* line 66, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +/* line 73, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +/* line 80, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} +/* line 92, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + line-height: 0.7; + font-size: 52px; + font-family: "HelveticaNeue-CondensedBold","Helvetica Neue","Arial Narrow",Arial,sans-serif; + font-weight: bold; + font-stretch: condensed; +} +/* line 99, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { + text-align: center; +} + +/* line 3, ../../../hub/static/css/app/stat.scss */ +h2 { + margin: 0px 20px 20px 20px; +} + +/* line 7, ../../../hub/static/css/app/stat.scss */ +.data { + display: block; + margin: 20px; +} + +/* line 12, ../../../hub/static/css/app/stat.scss */ +.data h2 { + margin: 0 0 6px; + line-height: 1.1; + font-size: 15px; + color: #999; +} + +/* line 19, ../../../hub/static/css/app/stat.scss */ +.mod { + padding: 15px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} + +/* line 28, ../../../hub/static/css/app/stat.scss */ +.indent { + margin-left: -10px; +} diff --git a/dist/css/app/team-add-project.css b/dist/css/app/team-add-project.css new file mode 100644 index 0000000..4be3628 --- /dev/null +++ b/dist/css/app/team-add-project.css @@ -0,0 +1,5496 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 1, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu { + display: none; + position: absolute; + top: 35px; + width: 218px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 10, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.intro { + padding: 7px; + color: #666666; +} + +/* line 14, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666666; +} + +/* line 19, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.active { + background: #4183C4; + color: white; +} + +/* line 23, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 30, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; + border-radius: 3px; +} + +/* line 4, ../../../hub/static/css/app/team-add-project.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} +/* line 10, ../../../hub/static/css/app/team-add-project.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 21, ../../../hub/static/css/app/team-add-project.scss */ +#project_id { + margin-bottom: 1px; +} + +/* line 24, ../../../hub/static/css/app/team-add-project.scss */ +label { + margin-left: 10px; + color: #63b6ae; +} + +/* line 28, ../../../hub/static/css/app/team-add-project.scss */ +dd { + position: relative; +} + +/* line 31, ../../../hub/static/css/app/team-add-project.scss */ +.add-item-menu { + top: 30px; +} diff --git a/dist/css/app/team-groups.css b/dist/css/app/team-groups.css new file mode 100644 index 0000000..ea54c7d --- /dev/null +++ b/dist/css/app/team-groups.css @@ -0,0 +1,5768 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 3, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects { + margin-top: 5px; +} +/* line 4, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects a.right { + float: right; +} +/* line 8, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li .delete-btn { + display: none; +} +/* line 16, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li.hover .delete-btn { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects .delete-btn { + padding: 0 6px 0 6px; +} + +/* line 6, ../../../hub/static/css/app/team-groups.scss */ +.group-link { + text-decoration: none; +} + +/* line 9, ../../../hub/static/css/app/team-groups.scss */ +.group-link:focus { + outline: none; +} + +/* line 12, ../../../hub/static/css/app/team-groups.scss */ +.group-link:hover { + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/app/team-groups.scss */ +.group-description { + overflow: hidden; + max-width: 80%; + margin-top: 5px; + font-size: 14px; + color: #777; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/dist/css/app/team-issue.css b/dist/css/app/team-issue.css new file mode 100644 index 0000000..874de41 --- /dev/null +++ b/dist/css/app/team-issue.css @@ -0,0 +1,7521 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(to bottom, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 11, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.side-avatar { + float: left; + padding: 0px 5px 5px; + vertical-align: top; + margin-left: 0; +} + +/* line 18, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload { + position: relative; + top: -50px; + width: 360px; +} + +/* line 28, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload #file { + position: absolute; + width: 240px; + margin-left: -80px; + opacity: 0.0001; + cursor: pointer; +} + +/* line 36, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 43, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content { + display: block; + background: white; + border: 0px solid; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 49, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content textarea#new_comment_content { + width: 100%; + background: white; +} +/* line 54, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .tabnav { + border-bottom: none; + padding: 10px; +} +/* line 59, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .write-content { + position: relative; + padding: 10px 10px 10px; +} + +/* Zen Mode button hacks for FlatUI */ +/* line 67, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.write-content .enable-fullscreen { + top: 15px; +} + +/* line 71, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.tab-content { + overflow: visible; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 79, ../../../hub/static/css/mod/flatui-comment-form.scss */ + .side-avatar { + padding: 0px; + } + + /* line 85, ../../../hub/static/css/mod/flatui-comment-form.scss */ + form#add-comment-form .form-content .tabnav { + max-width: 100%; + } +} +/* hacks for markdown paragraph content for flatui */ +/* line 4, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0px 0px 0px; +} + +/* line 8, ../../../hub/static/css/mod/flatui-comment-content.scss */ +#summary.mod .header { + position: relative; +} + +/* line 12, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 15, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content input.title-field { + font-size: 20px; + font-weight: bold; + margin-bottom: 5px; + width: 99%; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content textarea { + min-height: 100px; + max-width: 100%; + width: 99%; + margin: 0; +} + +/* line 29, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.form-actions { + background-color: transparent; + border: none; + text-align: right; + margin: 0px; + padding: 10px 0px 0px; +} + +/* line 37, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right { + float: right; +} +/* line 39, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right a.change-header-date { + color: lightgray; +} + +/* line 44, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions { + margin-left: 10px; + display: inline; +} +/* line 47, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions li { + display: inline; +} + +/* line 52, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.comment-body { + padding: 0px; +} + +/* line 56, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body { + padding: 0px; +} + +/* line 1, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji { + margin-right: 10px; +} +/* line 4, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .description { + text-align: center; + color: #999; +} +/* line 9, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis { + overflow-x: hidden; + overflow-y: scroll; + word-wrap: break-word; + word-break: break-all; + width: 290px; + height: 260px; +} +/* line 17, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a { + display: block; + float: left; + width: 25px; + height: 25px; + padding: 2px; + border: 1px solid white; +} +/* line 24, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a:hover { + background: #eef; + border: 1px solid #aad; +} + +/* line 1, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit { + overflow: auto; +} + +/* line 4, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li { + -moz-border-radius: 5px 5px 5px 5px; + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 10, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice { + background-color: #00a89c; + padding: 2px 4px 3px; + color: #fff; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +/* line 19, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice:hover { + color: rgba(255, 255, 255, 0.8); + cursor: pointer; +} + +/* line 23, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-new { + padding: 2px 4px 3px; + padding: 2px 4px 1px; + padding: 2px 4px 1px 0; +} + +/* line 29, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice input { + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 34, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice a.tag-close { + color: #fff; + cursor: pointer; + font-weight: bold; + padding-left: 3px; + text-decoration: none; + text-shadow: none; +} + +/* line 42, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit input[type="text"] { + width: 200px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 5, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content { + word-wrap: break-word; + word-break: normal; +} +/* line 10, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .side-avatar a:hover { + text-decoration: none; +} +/* line 14, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .side-avatar img { + width: 48px; + height: 48px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 20, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + display: block; + margin-left: 65px; + /* Milestone */ +} +/* line 25, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .form-content { + padding: 0px; +} +/* line 29, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .is-comment-editing .content-body { + display: none; +} +/* line 33, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary h2 { + font-size: 24px; +} +/* line 37, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions { + float: right; + text-align: right; +} +/* line 41, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions li { + display: inline; +} +/* line 45, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions #upvote i { + position: absolute; +} +/* line 49, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom { + margin-top: 10px; +} +/* line 52, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .assignee { + float: right; + margin-right: 10px; +} +/* line 56, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .state { + float: left; +} +/* line 58, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .state a#issue-closer { + padding-left: 10px; +} +/* line 64, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body { + display: block; +} +/* line 66, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body .milestone-bar-title { + display: inline; +} +/* line 68, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body .milestone-bar-title label { + display: inline; +} +/* line 76, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .participation p { + display: inline-block; + margin-left: 15px; +} +/* line 82, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog { + padding: 0px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 86, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change { + padding: 10px 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 90, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-text { + padding: 10px; +} +/* line 93, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change:hover .change-bottom .comment-header-actions { + display: inline; +} +/* line 96, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom { + position: relative; +} +/* line 98, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .comment-header-actions { + display: none; + position: absolute; + bottom: 10px; + left: 10px; +} +/* line 104, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile { + float: right; +} +/* line 106, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile p { + margin: 5px; + display: inline-block; +} +/* line 110, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile a.change-header-date { + color: lightgray; +} +/* line 113, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar { + float: none; +} +/* line 116, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar a:hover { + text-decoration: none; +} +/* line 120, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar img { + width: 32px; + height: 32px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 130, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog > .change:last-child { + border-bottom: none; +} +/* line 134, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .is-comment-editing .change-text { + display: none; +} +/* line 138, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .markdown-body pre { + font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace; + margin: 0; + border: 0; +} +/* line 144, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .avatar.avatar-tiny { + display: inline-block; + margin: 0 3px 0 0; + vertical-align: baseline; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* modal */ +/* line 155, ../../../hub/static/css/mod/issue-body.scss */ +.modal-header { + background: #63b6ae; + color: white; + text-shadow: none; +} +/* line 160, ../../../hub/static/css/mod/issue-body.scss */ +.modal-header p { + margin: 0; +} + +/* line 165, ../../../hub/static/css/mod/issue-body.scss */ +.modal-body { + text-shadow: none; +} + +/* line 169, ../../../hub/static/css/mod/issue-body.scss */ +.modal-footer { + background: #63b6ae; + color: white; + text-shadow: none; +} + +/* line 175, ../../../hub/static/css/mod/issue-body.scss */ +.quick-emoji .emojis { + height: 120px; +} + +/* Tag */ +/* line 180, ../../../hub/static/css/mod/issue-body.scss */ +ul.tagit li.tagit-choice { + margin-top: 6px; +} + +/* line 183, ../../../hub/static/css/mod/issue-body.scss */ +ul.tagit input[type="text"] { + width: 540px; +} + +/* line 186, ../../../hub/static/css/mod/issue-body.scss */ +.tag-groups p { + margin: 0; +} + +/* line 189, ../../../hub/static/css/mod/issue-body.scss */ +.tag-groups { + margin-bottom: 10px; +} + +/* Milestone */ +/* line 195, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu { + list-style: none; + display: block; + float: none; + position: relative; + margin-bottom: 5px; + border: 1px solid rgba(0, 0, 0, 0.2); + padding: 5px 0; + border-color: rgba(99, 182, 174, 0.8); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +/* line 208, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu > li > a:hover, +#milestone-modal .milestone-menu > li > a:focus, +#milestone-modal .milestone-menu > .active > a, +#milestone-modal .milestone-menu > .active > a:hover, +#milestone-modal .milestone-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background: #63b6ae; +} +/* line 217, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + white-space: nowrap; +} +/* line 226, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal input[type=radio] { + display: none; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 236, ../../../hub/static/css/mod/issue-body.scss */ + #issue #content .mod { + margin-left: 35px; + } + /* line 239, ../../../hub/static/css/mod/issue-body.scss */ + #issue #content span.side-avatar img.discussion-bubble-avatar { + width: 30px; + height: 30px; + } +} +/* highlight */ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ diff --git a/dist/css/app/team-issues.css b/dist/css/app/team-issues.css new file mode 100644 index 0000000..39a03f3 --- /dev/null +++ b/dist/css/app/team-issues.css @@ -0,0 +1,5761 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 2, ../../../hub/static/css/mod/navbar-search.scss */ +.navbar-search i { + color: #63b6ae; + padding-right: 4px; +} + +/* line 4, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar { + background: #fff; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + margin-bottom: 20px; +} +/* line 9, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .nav { + margin: 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 15, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .issue-tags { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +} +/* line 19, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:first-child { + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} +/* line 24, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:last-child { + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 29, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .rule { + clear: both; + height: 0px; + padding: 0; + margin: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 3px solid rgba(99, 182, 174, 0.2); +} +/* line 40, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label { + margin: 2px 0px; +} +/* line 42, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a { + color: #63b6ae; + text-decoration: none; +} +/* line 45, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} +/* line 54, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .well { + margin-bottom: 0; + overflow: hidden; +} + +/* line 1, ../../../hub/static/css/mod/issues-topbar.scss */ +.issues-topbar { + padding-bottom: 10px; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 3, ../../../hub/static/css/mod/issues-list.scss */ +.new-issue { + float: left; +} + +/* line 7, ../../../hub/static/css/mod/issues-list.scss */ +.sortby-issues { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/issues-list.scss */ +.issues-topbar { + overflow: hidden; + display: block; +} + +/* line 16, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list { + background: white; + margin-bottom: 20px; + border-bottom: 1px solid #eaeaea; +} +/* line 21, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list > :first-child { + margin-top: 0px; +} +/* line 25, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item { + padding: 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 29, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 { + font-size: 16px; + font-weight: 400; + overflow: hidden; + word-break: break-all; + margin: 0; +} +/* line 36, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 a { + color: #273338; +} +/* line 42, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item p a { + color: #999; +} +/* line 51, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item .meta { + margin-top: 20px; +} +/* line 55, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list a.comment-count, +.issue-list a.comment-count:link, +.issue-list span.issue-info { + color: #bbb; +} +/* line 61, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .rule { + clear: both; + height: 0px; + padding: 0; + overflow: hidden; + background: transparent; +} + +/* line 1, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li .tag-filter, .issue-tags ul li .tag-remove, .issue-tags ul li .icon-remove, .issue-tags ul li .icon-white, .issue-tags ul .tag-filter, .issue-tags ul .tag-remove, .issue-tags ul .icon-remove, .issue-tags ul .icon-white { + background: #63b6ae; + background-image: none; + cursor: pointer; +} + +/* line 6, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li a:hover, .issue-tags ul a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + border-radius: 4px; +} + +/* line 12, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags { + padding: 8px 0; +} +/* line 15, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li { + line-height: 20px; +} +/* line 23, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li .tag-remove, .issue-tags ul li .icon-remove, .issue-tags ul li .icon-white { + float: right; +} +/* line 31, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul .tag-remove, .issue-tags ul .icon-remove, .issue-tags ul .icon-white { + float: right; +} +/* line 40, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li.active a { + border-radius: 4px; +} +/* line 44, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .nav-header { + margin-bottom: 8px; +} +/* line 47, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin { + float: right; + cursor: pointer; + font-weight: 400; +} +/* line 52, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin-unuse { + color: #63b6ae; +} +/* line 55, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin-using { + color: #999; +} +/* line 58, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .nav-list-edit .tag-item { + display: block; + padding: 3px 1px; + color: #08c; +} + +/* edit tag */ +/* line 66, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser .color-cooser-color { + display: block; + text-align: center; + height: 25px; + cursor: pointer; + box-sizing: border-box; + border: solid 2px transparent; +} + +/* line 74, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form.open .color-chooser, .edit-color-label-form.open .color-editor { + display: block; +} + +/* line 77, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser { + height: 25px; + list-style-type: none; + display: table-row; +} + +/* line 82, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser li { + display: table-cell; + width: 1%; + vertical-align: top; +} + +/* line 87, ../../../hub/static/css/mod/tag-list.scss */ +.fieldWithErrors { + display: inline; +} + +/* line 90, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor-bg { + position: absolute; + left: 0; + height: 25px; + width: 130px; + opacity: 0.12; + border-radius: 3px; +} + +/* line 98, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .color-editor-input { + position: absolute; + left: 0; + background-color: transparent; + min-height: 25px; + border-left-width: 26px; + padding-top: 3px; + padding-bottom: 3px; + width: 130px; +} + +/* line 108, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .invalid-color-indicator { + display: none; + position: absolute; + top: 5px; + left: 9px; + color: #c00; + z-index: 10; + font-weight: bold; +} + +/* line 117, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor { + margin-top: 5px; + position: relative; + height: 25px; + margin-bottom: 10px; +} + +/* line 123, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .invalid-color-indicator { + display: none; + position: absolute; + top: 5px; + left: 9px; + color: #c00; + z-index: 10; + font-weight: bold; +} + +/* line 132, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form input[type="text"] { + min-height: 34px; + padding: 7px 8px; + outline: none; + color: #333; + background-color: #fff; + background-repeat: no-repeat; + background-position: right center; + border: 1px solid #ccc; + border-radius: 3px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + -moz-box-sizing: border-box; + box-sizing: border-box; + vertical-align: middle; +} + +/* line 147, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form.is-not-valid .color-editor .invalid-color-indicator { + display: block; +} diff --git a/dist/css/app/team-new-issue.css b/dist/css/app/team-new-issue.css new file mode 100644 index 0000000..e85c020 --- /dev/null +++ b/dist/css/app/team-new-issue.css @@ -0,0 +1,5762 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 2, ../../../hub/static/css/mod/flat-hack.scss */ +a.btn i { + padding-right: 5px; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit { + overflow: auto; +} + +/* line 4, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li { + -moz-border-radius: 5px 5px 5px 5px; + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 10, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice { + background-color: #00a89c; + padding: 2px 4px 3px; + color: #fff; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +/* line 19, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice:hover { + color: rgba(255, 255, 255, 0.8); + cursor: pointer; +} + +/* line 23, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-new { + padding: 2px 4px 3px; + padding: 2px 4px 1px; + padding: 2px 4px 1px 0; +} + +/* line 29, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice input { + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 34, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice a.tag-close { + color: #fff; + cursor: pointer; + font-weight: bold; + padding-left: 3px; + text-decoration: none; + text-shadow: none; +} + +/* line 42, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit input[type="text"] { + width: 200px; +} + +/* line 8, ../../../hub/static/css/app/team-new-issue.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 15, ../../../hub/static/css/app/team-new-issue.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 18, ../../../hub/static/css/app/team-new-issue.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 27, ../../../hub/static/css/app/team-new-issue.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 30, ../../../hub/static/css/app/team-new-issue.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* Write/Preview Control style for new PR component */ +/* line 44, ../../../hub/static/css/app/team-new-issue.scss */ +ul.edit-preview-tabs { + margin: 0 0 5px 0; + line-height: 13px; +} + +/* line 48, ../../../hub/static/css/app/team-new-issue.scss */ +ul.edit-preview-tabs li { + list-style-type: none; + margin: 0; + display: inline-block; +} + +/* line 53, ../../../hub/static/css/app/team-new-issue.scss */ +ul.edit-preview-tabs a { + display: inline-block; + padding: 2px 8px; + font-size: 11px; + font-weight: bold; + text-decoration: none; + color: #666; + border: 1px solid transparent; + border-radius: 10px; +} + +/* line 64, ../../../hub/static/css/app/team-new-issue.scss */ +.previewable-comment-form li.active .write-tab, +.previewable-comment-form li.active .preview-tab { + color: #333; + background: white; + border-color: #BBB; + border-right-color: #DDD; + border-bottom-color: #DDD; +} + +/* Description Component background & help text, from hub.css*/ +/* line 74, ../../../hub/static/css/app/team-new-issue.scss */ +.comment-form { + position: relative; + margin: -10px 0 10px 0; + padding: 5px; +} + +/* line 80, ../../../hub/static/css/app/team-new-issue.scss */ +.comment-form p.help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} + +/* tag */ +/* line 88, ../../../hub/static/css/app/team-new-issue.scss */ +.tag-groups p { + margin: 0; +} + +/* line 91, ../../../hub/static/css/app/team-new-issue.scss */ +.tags input[type="text"] { + font-size: 14px; + padding: 5px 0px; + margin: 0 0 5px 5px; + width: 98%; + color: #444; +} diff --git a/dist/css/app/team-pulls.css b/dist/css/app/team-pulls.css new file mode 100644 index 0000000..1250c51 --- /dev/null +++ b/dist/css/app/team-pulls.css @@ -0,0 +1,5625 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 1, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs { + display: block; + float: left; + padding: 5px 5px 0; + overflow: hidden; +} +/* line 6, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .filter-tab { + display: inline-block; + padding: 0 8px; + height: 24px; + line-height: 24px; + font-size: 12px; + font-weight: bold; + color: #888; + -webkit-font-smoothing: antialiased; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + text-decoration: none; + border: 1px solid #CCC; + border-bottom: 0; + border-radius: 3px 3px 0 0; + background: rgba(255, 255, 255, 0.2); + cursor: pointer; +} +/* line 23, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .selected { + color: #333; + background: white; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + border-color: #B4B4B4; + border-bottom: 1px solid white; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls { + margin: 20px 0; +} +/* line 6, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls h2 { + font-size: 16px; + font-weight: bold; + margin: 0; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-list.scss */ +.row.pulls .mod p { + word-wrap: break-word; +} + +/* line 17, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list { + word-break: break-all; +} +/* line 19, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 { + margin: 0; + font-size: 14px; + line-height: 1.3; +} +/* line 23, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 a { + color: #333; +} +/* line 27, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .list-browser-item { + position: relative; + padding: 10px; + border-bottom: 1px solid #EAEAEA; +} +/* line 32, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .meta { + float: left; + margin-top: 4px; + margin-bottom: -2px; + height: 16px; + padding: 4px 6px; + font-size: 11px; + color: rgba(0, 0, 0, 0.55); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: rgba(0, 0, 0, 0.07); + border-radius: 3px; +} +/* line 44, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list p a { + color: #555; + text-decoration: none; +} + +/* line 50, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser { + border-color: #D5D5D5; + position: relative; + border: 1px solid #DDD; + border-radius: 5px; +} +/* line 55, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination { + float: right; + margin: 7px; + font-weight: bold; + height: 26px; +} +/* line 60, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination a { + padding: 4px; + font-size: 11px; + color: #4183C4; + width: auto; +} +/* line 66, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination span { + padding: 4px; + font-size: 11px; + color: #4183C4; +} +/* line 72, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none, .chromed-list-browser .error { + padding: 10px; + border-bottom: 1px solid #DDD; +} +/* line 75, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none p, .chromed-list-browser .error p { + margin: 0; + padding: 20px; + border-radius: 3px; + text-align: center; + font-weight: bold; + font-size: 14px; + color: #999; + background: #F3F3F3; + -webkit-font-smoothing: antialiased; +} + +/* line 91, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-info { + position: absolute; + bottom: 3px; + right: 5px; +} +/* line 96, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item { + padding-left: 18px; + font-size: 11px; + font-weight: bold; + color: #999; +} +/* line 101, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item a { + color: #666; +} + +/* line 107, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar { + font-family: "Helvetica Neue", Helvetica, Arial, freesans; + border-radius: 5px 5px 0 0; + height: 31px; + background-color: #CACACA; + background-image: -moz-linear-gradient(#EFEFEF, #CACACA); + background-image: -webkit-linear-gradient(#EFEFEF, #CACACA); + background-image: linear-gradient(#EFEFEF, #CACACA); + background-repeat: repeat-x; + border-bottom: 1px solid #B4B4B4; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/* line 117, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar li { + list-style-type: none; + display: inline; +} + +/* line 123, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer { + font-size: 11px; + font-weight: bold; + color: #777; + overflow: hidden; + min-height: 15px; + background: #F6F6F6; + border-radius: 0 0 5px 5px; +} +/* line 131, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer .pagination { + margin: 5px; +} diff --git a/dist/css/app/team-settings.css b/dist/css/app/team-settings.css new file mode 100644 index 0000000..ccb8cde --- /dev/null +++ b/dist/css/app/team-settings.css @@ -0,0 +1,5674 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 1, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu { + display: none; + position: absolute; + top: 35px; + width: 218px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 10, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.intro { + padding: 7px; + color: #666666; +} + +/* line 14, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666666; +} + +/* line 19, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.active { + background: #4183C4; + color: white; +} + +/* line 23, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 30, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/app/team-settings.scss */ +.columns { + display: block; +} +/* line 7, ../../../hub/static/css/app/team-settings.scss */ +.columns:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +/* line 14, ../../../hub/static/css/app/team-settings.scss */ +.columns.equacols .column { + width: 520px; + float: left; +} + +/* line 21, ../../../hub/static/css/app/team-settings.scss */ +.equacols .column > .fieldgroup:first-child { + margin-top: 0; +} +/* line 24, ../../../hub/static/css/app/team-settings.scss */ +.equacols .fieldgroup .fields { + text-align: center; + background-image: url(""); +} + +/* line 29, ../../../hub/static/css/app/team-settings.scss */ +.fieldgroup { + position: relative; + margin-top: 10px; + width: 440px; +} +/* line 33, ../../../hub/static/css/app/team-settings.scss */ +.fieldgroup .fields { + margin: 10px 0 0 0; + padding: 10px; + background: url("") 0 0 no-repeat; +} +/* line 38, ../../../hub/static/css/app/team-settings.scss */ +.fieldgroup h2 { + margin: 15px 0 0 0; + font-size: 18px; + font-weight: normal; + color: #666; +} + +/* line 45, ../../../hub/static/css/app/team-settings.scss */ +ul.fieldpills { + position: relative; + margin: 0; +} +/* line 48, ../../../hub/static/css/app/team-settings.scss */ +ul.fieldpills li { + position: relative; + list-style-type: none; + margin: 3px 0; + min-height: 24px; + line-height: 24px; + padding: 4px 5px; + background: #eee; + font-size: 12px; + font-weight: bold; + color: #333; + border: 1px solid #ddd; + border-radius: 3px; +} +/* line 62, ../../../hub/static/css/app/team-settings.scss */ +ul.fieldpills.usernames li img { + margin-right: 2px; + padding: 1px; + background: #fff; + border: 1px solid #ddd; + vertical-align: middle; +} + +/* line 70, ../../../hub/static/css/app/team-settings.scss */ +a { + text-decoration: none; +} +/* line 72, ../../../hub/static/css/app/team-settings.scss */ +a.action { + color: #d00; + text-decoration: underline; +} + +/* line 78, ../../../hub/static/css/app/team-settings.scss */ +.team-setting input[type="text"] { + min-height: 34px; + padding: 7px 8px; + outline: none; + color: #333; + background-color: #fff; + background-repeat: no-repeat; + background-position: right center; + border: 1px solid #ccc; + border-radius: 3px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + -moz-box-sizing: border-box; + box-sizing: border-box; + transition: all 0.15s ease-in; + -webkit-transition: all 0.15s ease-in 0; + vertical-align: middle; +} + +/* line 96, ../../../hub/static/css/app/team-settings.scss */ +.add-pill-form { + margin-top: 15px; + padding: 4px 5px; + background: #f5f5f5; + font-size: 12px; + color: #333; + border: 1px solid #ddd; + border-radius: 5px; + position: relative; + height: 40px; +} +/* line 106, ../../../hub/static/css/app/team-settings.scss */ +.add-pill-form input[type=text] { + font-size: 14px; + width: 350px; + padding: 2px 5px; + color: #666; + width: 332px; + margin-bottom: 1px; +} + +/* line 115, ../../../hub/static/css/app/team-settings.scss */ +.autocomplete-results { + display: none; + position: absolute; + max-height: 20em; + list-style: none; + background: #fff; + border: 1px solid #c1c1c1; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); + overflow-y: auto; + font-size: 13px; + z-index: 99; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 130, ../../../hub/static/css/app/team-settings.scss */ +.autocomplete-group { + width: 100%; + overflow: hidden; + border-radius: 0 0 3px 3px; +} +/* line 134, ../../../hub/static/css/app/team-settings.scss */ +.autocomplete-group:first-child { + border-radius: 3px; +} + +/* line 138, ../../../hub/static/css/app/team-settings.scss */ +.button, .minibutton { + position: relative; + display: inline-block; + padding: 7px 15px; + font-size: 13px; + font-weight: bold; + color: #333; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.9); + white-space: nowrap; + background-color: #eaeaea; + background-image: -moz-linear-gradient(#fafafa, #eaeaea); + background-image: -webkit-linear-gradient(#fafafa, #eaeaea); + background-image: linear-gradient(#fafafa, #eaeaea); + background-repeat: repeat-x; + border-radius: 3px; + border: 1px solid #ddd; + border-bottom-color: #c5c5c5; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.075); + vertical-align: middle; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-appearance: none; +} + +/* line 166, ../../../hub/static/css/app/team-settings.scss */ +.minibutton { + padding: 0 10px; + line-height: 24px; + box-shadow: none; +} + +/* line 171, ../../../hub/static/css/app/team-settings.scss */ +.button:hover, .button:active, .minibutton:hover, .minibutton:active { + color: #fff; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #3072b3; + background-image: -moz-linear-gradient(#599bcd, #3072b3); + background-image: -webkit-linear-gradient(#599bcd, #3072b3); + background-image: linear-gradient(#599bcd, #3072b3); + background-repeat: repeat-x; + border-color: #2a65a0; +} + +/* line 182, ../../../hub/static/css/app/team-settings.scss */ +.team-setting-item { + margin-top: 15px; + border-radius: 5px; +} +/* line 185, ../../../hub/static/css/app/team-settings.scss */ +.team-setting-item h2 { + margin: 15px 0 15px 0; + font-size: 18px; + font-weight: normal; + color: #666; +} diff --git a/dist/css/app/team.css b/dist/css/app/team.css new file mode 100644 index 0000000..896e558 --- /dev/null +++ b/dist/css/app/team.css @@ -0,0 +1,5747 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 3, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects { + margin-top: 5px; +} +/* line 4, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects a.right { + float: right; +} +/* line 8, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li .delete-btn { + display: none; +} +/* line 16, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li.hover .delete-btn { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects .delete-btn { + padding: 0 6px 0 6px; +} + +/* line 6, ../../../hub/static/css/app/team.scss */ +.text-center .add_team_btn { + margin-left: 150px; +} diff --git a/dist/css/app/teams.css b/dist/css/app/teams.css new file mode 100644 index 0000000..1ee9964 --- /dev/null +++ b/dist/css/app/teams.css @@ -0,0 +1,5637 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 2, ../../../hub/static/css/app/teams.scss */ +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +/* line 6, ../../../hub/static/css/app/teams.scss */ +.cf { + zoom: 1; +} +/* line 8, ../../../hub/static/css/app/teams.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 12, ../../../hub/static/css/app/teams.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 18, ../../../hub/static/css/app/teams.scss */ +ul { + list-style: none; + display: block; + -webkit-margin-before: 1em; + -webkit-margin-after: 1em; + -webkit-margin-start: 0px; + -webkit-margin-end: 0px; +} + +/* line 26, ../../../hub/static/css/app/teams.scss */ +h3 { + font-family: "MuseoSans-500", arial, sans-serif; +} + +/* line 29, ../../../hub/static/css/app/teams.scss */ +h2 { + display: block; + font-size: 1.5em; + -webkit-margin-before: 0.83em; + -webkit-margin-after: 0.83em; + -webkit-margin-start: 0px; + -webkit-margin-end: 0px; + font-weight: bold; +} + +/* line 38, ../../../hub/static/css/app/teams.scss */ +.featured-team-list { + width: 940px; +} +/* line 40, ../../../hub/static/css/app/teams.scss */ +.featured-team-list a { + text-decoration: none; +} +/* line 43, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li { + text-align: -webkit-match-parent; + display: inline-block; + vertical-align: top; + width: 450px; + margin-left: 32px; + margin-bottom: 30px; + background: #fff; + border: 1px solid #c1ccd4; + position: relative; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 58, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li .image { + height: 150px; + line-height: 150px; + text-align: center; +} +/* line 62, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li .image img { + max-width: 100%; + max-height: 100%; + vertical-align: middle; +} +/* line 68, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li header { + border-bottom: solid 1px #eaeaea; + display: block; +} +/* line 71, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li header h2 { + font-size: 1.5em; + margin-bottom: 3px; + color: #343131; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + height: 22px; + margin-top: 1px; + line-height: 20px; +} +/* line 84, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li header h3 { + font-size: 1.0em; + color: #5d5d5d; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + height: 16px; + margin-top: 1px; + margin-bottom: 1px; + line-height: 20px; +} +/* line 97, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li header .avatar { + float: left; + margin-right: 15px; +} +/* line 100, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li header .avatar img { + display: block; + width: 39px; + height: 39px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 112, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li .team-link { + display: block; + padding: 20px; + height: 40px; + -webkit-transform: translate3d(0, 0, 0); + text-rendering: optimizeLegibility; + -webkit-font-smoothing: subpixel-antialiased; + -moz-font-smoothing: subpixel-antialiased; + font-smoothing: subpixel-antialiased; + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +/* line 133, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li .hiring-ribbon { + position: absolute; + z-index: 100; + width: 76px; + height: 77px; + top: -6px; + right: -5px; + background: url("/static/img/join_team.png") no-repeat; +} +/* line 141, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li .hiring-ribbon span { + display: none; +} +/* line 145, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li:nth-child(odd) { + margin-left: 0; +} +/* line 148, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li .content { + padding: 20px; + -webkit-box-shadow: inset 0px 0px 2px 2px #ffffff; + box-shadow: inset 0px 0px 2px 2px #ffffff; + background: url("/static/img/team_paper_texture.jpg") repeat; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +/* line 160, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li footer { + border-top: solid 1px #eaeaea; + padding-top: 20px; + height: 26px; +} +/* line 164, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li footer .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 178, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li footer .members { + float: right; + margin-right: 10px; + margin-top: 0px; +} +/* line 182, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li footer .members li { + float: left; + margin-left: 10px; +} +/* line 185, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li footer .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 195, ../../../hub/static/css/app/teams.scss */ +.featured-team-list > li footer .members li a img { + width: 26px; + height: 26px; +} + +/* line 206, ../../../hub/static/css/app/teams.scss */ +.pagehead h2 { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 212, ../../../hub/static/css/app/teams.scss */ +.pagehead .teams-right { + float: right; + width: 100px; +} + +/* line 217, ../../../hub/static/css/app/teams.scss */ +.add_team { + float: left; + margin-right: 5px; +} + +/* line 221, ../../../hub/static/css/app/teams.scss */ +.clearfix { + display: block; +} diff --git a/dist/css/app/ticket.css b/dist/css/app/ticket.css new file mode 100644 index 0000000..98d4f42 --- /dev/null +++ b/dist/css/app/ticket.css @@ -0,0 +1,10946 @@ +@charset "UTF-8"; +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* TODO Refactor the following mods into components */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .css-truncate-target + .css-truncate-target { + max-width: 125px; +} + +/* line 2, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .commit-ref .user { + color: #CCC; +} + +/* line 3, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head { + margin: 20px 0; + background-color: #FAFAFA; + border: 1px solid #EEE; + border-bottom-width: 2px; + border-radius: 3px; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .attention-icon { + position: relative; + float: left; + margin: 4px 10px 0 0; +} + +/* line 5, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 10px; + position: relative; + float: left; + margin: 0; + line-height: 36px; + font-size: 13px; + max-width: 690px; + white-space: nowrap; +} + +/* line 6, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .user { + font-weight: bold; + color: #333; +} + +/* line 8, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 0; +} + +/* line 12, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .pull-state { + float: left; + padding: 8px; + margin-right: 8px; + border-right: 1px solid #EEE; + line-height: 20px; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .state-indicator { + font-size: 13px; + display: inline-block; + height: 20px; + line-height: 20px; + padding: 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +.commit-ref { + position: relative; + height: 20px; + display: inline-block; + padding: 0 5px; + border: 1px solid black; + border-radius: 3px; + font: 10px/20px Monaco,"Liberation Mono",Courier,monospace; + color: white; + white-space: nowrap; + vertical-align: middle; + background-color: #222; + background-image: -moz-linear-gradient(#444, #222); + background-image: -webkit-linear-gradient(#444, #222); + background-image: linear-gradient(#444, #222); + background-repeat: repeat-x; +} + +/* line 1, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button { + height: 25px; + width: 25px; + display: block; + float: right; + background: url("/static/img/fav_star.png") 0 0 no-repeat; +} + +/* line 2, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button.faved { + background: url("/static/img/faved_star.png") 0 0 no-repeat; +} + +/* line 6, ../../../hub/static/css/mod/pull-request.scss */ +#project-info { + margin-bottom: 15px; +} + +/* line 8, ../../../hub/static/css/mod/pull-request.scss */ +.tab-content { + overflow: initial; + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest.tab-content { + min-height: 280px; + overflow: visible; +} + +/* line 11, ../../../hub/static/css/mod/pull-request.scss */ +.commit-preview .date { + color: #5B6375; +} + +/* line 13, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav { + margin: 0 0 10px; + border-bottom: none; + height: 35px; +} + +/* line 14, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active { + font-weight: bold; +} + +/* line 15, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li a:hover { + background-color: transparent; + border: 1px solid transparent; +} + +/* line 16, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active a { + background-color: #fff; + border-bottom: 1px solid #fff; +} + +/* line 17, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active a:hover { + background-color: #fff; + border: 1px solid #DDD; + border-bottom: 1px solid #fff; +} + +/* line 19, ../../../hub/static/css/mod/pull-request.scss */ +.tabnav .counter { + position: relative; + top: -1px; + margin: 0 0 0 5px; + padding: 1px 5px 2px 5px; + font-size: 10px; + font-weight: bold; + color: #666; + background: #E5E5E5; + border-radius: 10px; +} + +/* line 21, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .explain { + margin: 15px 0; +} + +/* line 23, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header { + position: relative; + margin: 10px; +} + +/* line 24, ../../../hub/static/css/mod/pull-request.scss */ +.discusion-topic-infobar { + border-bottom: 1px solid #e5e5e5; +} + +/* line 25, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header .comment-topic-actions { + position: absolute; + top: 10px; + right: 10px; + list-style-type: none; +} + +/* line 26, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header .comment-topic-actions li { + float: left; + margin-left: 12px; +} + +/* line 28, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest blockquote.citation { + border: none; +} + +/* line 29, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #trac-ticket-title { + display: none; +} + +/* line 30, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket { + margin-top: 23px; +} + +/* line 31, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .trac-topnav { + margin-top: 0; + top: -20px; + position: absolute; + right: 0; +} + +/* line 33, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket, .pullrequest div.change { + margin-bottom: 20px; + background: #fff; + border-radius: 3px; + border: 3px solid #eee; +} + +/* line 34, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket::before, .pullrequest div.change::before, .pullrequest #propertyform fieldset.iefix::before, .pullrequest #add-comment-form .form-content::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; + position: absolute; +} + +/* line 35, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket::before { + position: absolute; +} + +/* line 36, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change::before, .pullrequest #propertyform fieldset.iefix::before { + position: relative; +} + +/* line 37, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket { + padding: 5px; +} + +/* line 39, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date { + float: none; + clear: both; + color: #666; + font-size: 12px; +} + +/* line 40, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date::after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* line 41, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date p { + float: left; +} + +/* line 42, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .summary { + font-size: 20px; + font-weight: bold; + margin: 0; +} + +/* line 43, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .properties { + display: none; + border: none; +} + +/* line 44, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description { + margin-top: 10px; +} + +/* line 45, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description div { + padding: 0; +} + +/* line 46, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description h3 { + display: none; +} + +/* line 47, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description #addreply { + float: right; +} + +/* line 51, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .commits-condensed tr td.message { + word-break: break-all; +} +/* line 55, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog { + border: none; + padding: 0; +} +/* line 60, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.author { + width: 80px; +} +/* line 63, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.date { + width: 100px; +} +/* line 66, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.status { + width: 20px; +} +/* line 71, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.commit-status { + width: 100px; + display: inline-block; + border-radius: 100px; + width: 15px; + height: 15px; + vertical-align: middle; +} +/* line 79, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.dirty { + background-color: #f6e69f; +} +/* line 82, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.error { + background-color: #da4f49; +} +/* line 85, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.success { + background-color: #6eda62; +} + +/* line 93, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog h3 { + border: none; +} + +/* line 94, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_mark { + background-color: #DDD; + height: 31px; + text-align: center; + color: #777; + line-height: 31px; +} + +/* line 95, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_commits { + display: none; +} + +/* line 96, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_codereview { + display: none; +} + +/* line 97, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change { + padding: 0; + background: #FBFBFB; +} + +/* line 98, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change h3.change { + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#F8FBFC, #DDE8EB); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fbfc', endColorstr='#dde8eb')"; +} + +/* line 99, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change form[id^=reply-to-comment-] { + right: 7px; +} + +/* line 100, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change table.commits .commit code { + background-color: transparent; +} + +/* line 101, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment { + margin: 0; + top: -1px; + position: relative; +} + +/* line 102, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment #files { + margin-top: -24px; +} + +/* line 103, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment #files .file { + width: 100%; + margin: 0 0 0 -1px; +} + +/* line 104, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment p br { + height: 0; +} + +/* line 105, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment p { + padding: 5px; + margin: 0; + color: #333; +} + +/* line 107, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change form#trac-comment-editor { + position: relative; + right: 0; + margin: 12px; +} + +/* line 108, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest h2#trac-add-comment, .pullrequest .trac-nav { + display: none; +} + +/* line 109, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest fieldset.iefix { + padding: 6px; + background: #EEE; + border-radius: 3px; +} + +/* line 110, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest fieldset.iefix h3 { + font-size: 13px; + line-height: 1.4; + color: #333; + margin: 0 5px; +} + +/* line 112, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #propertyform .btn[type=submit] { + padding: 8px 15px; +} + +/* line 113, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #modify { + background-color: #EEE; + padding: 12px; +} + +/* line 114, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft { + padding: 1em; + background: none; + background-color: #FBFBFB; +} + +/* line 115, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment { + margin: 1em; +} + +/* line 116, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment blockquote.citation { + margin: 12px 0; +} + +/* line 117, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment blockquote.citation p { + font-size: 13px; +} + +/* line 119, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket .side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 121, ../../../hub/static/css/mod/pull-request.scss */ +table.commits { + margin: 0; + font-size: 12px; +} + +/* line 123, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation { + margin: -10px 0 15px; + font-size: 13px; + font-weight: 300; + color: #666; +} + +/* line 124, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation p.quickstat { + display: inline-block; + margin: 0 5px 0 0; +} + +/* line 125, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation a { + color: #666; +} + +/* line 126, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation .avatar { + position: relative; + display: inline-block; + height: 24px; + top: -2px; + margin-right: 3px; + margin-bottom: 3px; +} + +/* line 127, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation .avatar img { + vertical-align: middle; +} + +/* action-bubble part is also used in commits.html */ +/* line 131, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble { + margin: 20px 0; +} + +/* line 132, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .action { + float: left; + line-height: 29px; +} + +/* line 133, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state-indicator { + display: inline-block; + margin-right: 8px; + font-size: 12px; + padding: 0 5px; + line-height: 24px; +} + +/* line 134, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator.closed { + background: #BD2C00; +} + +/* line 135, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator { + display: block; + font-size: 14px; + font-weight: bold; + color: white; + text-align: center; + border-radius: 3px; + background: #999; +} + +/* line 136, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble { + font-size: 13px; + font-weight: 300; + background-color: transparent; +} + +/* line 137, ../../../hub/static/css/mod/pull-request.scss */ +.bubble { + padding: 3px; + background: #EEE; + border-radius: 3px; +} + +/* line 138, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble p { + margin: 0; + line-height: 26px; +} + +/* line 139, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble strong { + font-weight: bold; +} + +/* line 140, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .avatar { + position: relative; + top: -2px; + display: inline-block; + height: 24px; + margin-right: 3px; + line-height: 1px; +} + +/* line 141, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .avatar img { + vertical-align: middle; +} + +/* line 142, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator.open, .state-indicator.reopened, .state-indicator.merged { + background: #6CC644; +} + +/* the following action-bubble style seems only used in commits.html */ +/* line 146, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state-renamed { + color: black; + background-color: #FFFA5D; + text-shadow: none; +} + +/* line 151, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state { + display: inline-block; + padding: 0 5px; + height: 24px; + line-height: 25px; + text-shadow: 0 -1px -1px rgba(0, 0, 0, 0.25); +} + +/* line 158, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state { + float: none; + padding: 3px 5px; + font-size: 11px; +} + +/* line 165, ../../../hub/static/css/mod/pull-request.scss */ +.closed-banner { + margin: 15px 0; + height: 7px; + overflow: hidden; + background: url("/static/img/closed_pattern.gif"); + border-radius: 5px; +} + +/* line 167, ../../../hub/static/css/mod/pull-request.scss */ +.change-header .change-header-right { + float: right; + height: 15px; +} + +/* line 168, ../../../hub/static/css/mod/pull-request.scss */ +.change-header .change-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); +} + +/* line 170, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket { + padding: 0; +} + +/* line 171, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 172, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 174, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change .change-header { + height: 23px; + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 3px 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#F8FBFC, #DDE8EB); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fbfc', endColorstr='#dde8eb')"; +} + +/* line 176, ../../../hub/static/css/mod/pull-request.scss */ +.comment-content .comment-body, .pullrequest .ticket #ticket .comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 177, ../../../hub/static/css/mod/pull-request.scss */ +.comment-content .comment-body, .pullrequest #changelog .comment p { + font-size: 13px; +} + +/* line 179, ../../../hub/static/css/mod/pull-request.scss */ +.user-mention, .team-mention { + font-weight: bold; + color: #333; +} + +/* line 181, ../../../hub/static/css/mod/pull-request.scss */ +.change #files .file { + border: none; +} + +/* line 1, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content { + padding: 0; + width: 100%; +} + +/* line 2, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 3, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content.is-comment-editing .comment-body { + display: none; +} + +/* line 4, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content.is-comment-editing .form-content { + display: block; + background-color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content form { + margin: 0; +} + +/* line 6, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content input.title-field { + font-size: 20px; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content input[type="text"] { + margin-bottom: 5px; + width: 99%; +} + +/* line 8, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content textarea { + margin: 0; + width: 99%; + max-width: 100%; + height: 100px; + min-height: 100px; +} + +/* line 9, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content .form-actions { + padding: 0; + margin: 10px 0 0 0; +} + +/* line 10, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .comment-cancel-button { + float: left; +} + +/* line 12, ../../../hub/static/css/mod/pull-comment.scss */ +.pullrequest #attachments, .pullrequest .foldable, .pullrequest .threading { + display: none; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* Button style from hub.css */ +/* line 17, ../../../hub/static/css/mod/pull-comment.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* codereview style */ +/* comments style is also used in pull-new page's description input box */ +/* line 5, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comments { + padding: 5px; +} + +/* line 8, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment { + margin: 5px 0; + border: 1px solid #CACACA; +} + +/* line 12, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-meta { + padding: 5px 10px; + border-bottom: 1px solid #CCC; + background-image: linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -o-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -moz-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -webkit-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -ms-linear-gradient(top, #F4F8F9, #DCE8EC); +} + +/* line 22, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment .body { + color: #333; + font-size: 13px; + padding: 10px; + background: #FBFBFB; +} + +/* line 29, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-form .help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} + +/* line 35, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-form textarea { + width: 100%; + height: 100px; + font-size: 12px; +} + +/*========= Github Style ========*/ +/* line 4, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 12, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 16, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 34, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 39, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 45, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 46, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 47, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 48, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* TODO remove the following line */ +/* file-blame-blob should only be import at blame page */ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files { + position: relative; +} + +/* line 6, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file { + margin-top: 0; +} + +/* line 9, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 15, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta, +.file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 30, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info, +.file-box .meta .info { + float: left; + height: 33px; + max-width: 555px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* line 41, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span, +.file-box .meta .info span { + padding-left: 9px; + margin-left: 5px; + border-left: 1px solid #C1C1C1; + box-shadow: inset 1px 0 0 white; +} + +/* line 50, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 63, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 67, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 76, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat .diffstat-bar { + color: #D8D8D8; +} + +/* line 79, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 85, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes { + display: block; + position: relative; + display: block; + float: left; + margin-right: 10px; +} + +/* line 92, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes label { + font-weight: bold; + margin: 5px 0; +} + +/* line 96, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes input { + margin: 0; +} + +/* line 99, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .button-group, +.file-box .meta .actions .button-group { + float: right; + margin-top: 2px; +} + +/* line 104, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions code, +.file-box .meta .actions code { + background: inherit; + border: none; + font-size: 11px; + color: inherit; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + padding: 0; +} + +/* line 114, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file { + margin: 15px 0; +} + +/* line 118, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 120, ../../../hub/static/css/mod/file-blame-blob.scss */ +.change #files .file, .file-box, .change .file { + margin-bottom: 0; +} + +/* line 122, ../../../hub/static/css/mod/file-blame-blob.scss */ +.blame .line-data { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ +/* ticket style */ +/* line 2, ../../../hub/static/css/mod/pull-ticket.scss */ +#content.ticket { + width: 63em; + max-width: 100%; + margin-left: auto; +} + +/* line 8, ../../../hub/static/css/mod/pull-ticket.scss */ +#field-description-help { + float: right; +} + +/* line 9, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties div.trac-resizable, #field-description { + width: 100%; +} + +/* line 11, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket { + background: #ffd; + border: 1px outset #996; + margin-top: 1em; + padding: .5em 1em; + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket.ticketdraft { + background: #f8f8f8 url(../draft.png); +} + +/* line 22, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticketchange.ticketdraft { + padding: 0 1em; + margin: 1em 0; +} + +/* line 26, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticketchange.ticketdraft h3 { + margin-top: .5em; +} + +/* line 29, ../../../hub/static/css/mod/pull-ticket.scss */ +.preview-notice { + font-weight: bold; +} + +/* line 31, ../../../hub/static/css/mod/pull-ticket.scss */ +.ticketdraft { + background: #f8f8f8 url(../draft.png); + border: 1px outset #996; + padding: 0 .2em; +} + +/* line 37, ../../../hub/static/css/mod/pull-ticket.scss */ +h1 .status { + color: #444; +} + +/* line 38, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket h2.summary { + margin: 0 0 0.8em 0; +} + +/* line 39, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .date { + color: #996; + float: right; + font-size: 85%; + position: relative; +} + +/* line 40, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .date p { + margin: 0.3em; +} + +/* line 42, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties { + clear: both; + border-top: 1px solid #dd9; + border-collapse: collapse; + table-layout: fixed; + width: 100%; +} + +/* line 49, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties tr { + border-bottom: 1px dotted #eed; +} + +/* line 50, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td, #ticket table.properties th { + font-size: 80%; + padding: .5em 1em; + vertical-align: top; +} + +/* line 55, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties th { + color: #663; + font-weight: normal; + text-align: left; + width: 20%; +} + +/* line 61, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td { + width: 30%; +} + +/* line 62, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td p:first-child { + margin-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td p:last-child { + margin-bottom: 0; +} + +/* line 64, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties .description { + border-top: 1px solid #dd9; +} + +/* line 66, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .description h3 { + border-bottom: 1px solid #dd9; + color: #663; + font-size: 100%; + font-weight: normal; +} + +/* line 72, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .description h3 .lastmod { + font-size: 90%; +} + +/* line 75, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .inlinebuttons { + float: right; + position: relative; + bottom: 0.3em; + margin-left: 0.2em; +} + +/* line 82, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog { + border: 1px outset #996; + padding: 1em; +} + +/* line 83, ../../../hub/static/css/mod/pull-ticket.scss */ +.trac-shade { + background-color: #eee; +} + +/* line 84, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor { + margin-left: 2em; + margin-bottom: 1em; +} + +/* line 85, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor div.trac-resizable { + width: 100%; +} + +/* line 86, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor textarea { + background: #ffffe0; + margin-left: -1px; + margin-right: -1px; + width: 100%; +} + +/* line 92, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor .wikitoolbar { + margin-left: -1px; +} + +/* line 93, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-add-comment :link, #trac-add-comment :visited { + color: #b00; +} + +/* line 94, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog h3, #ticketchange h3 { + border-bottom: 1px solid #d7d7d7; + color: #999; + font-size: 100%; + font-weight: normal; +} + +/* line 100, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading, #changelog .inlinebuttons { + float: right; + margin-left: 0.2em; +} + +/* line 101, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading { + font-size: 85%; +} + +/* line 102, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading :link, .threading :visited { + border-bottom: 0; +} + +/* line 103, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .trac-lastedit { + padding-left: 2.5em; + color: #999; + font-size: 80%; +} + +/* line 108, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .trac-lastedit :link, #changelog .trac-lastedit :visited { + color: inherit; +} + +/* line 110, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .changes, #ticketchange .changes { + list-style: square; + margin-left: 2em; + padding: 0; +} + +/* line 111, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .comment, #ticketchange .comment { + margin-left: 2em; +} + +/* line 113, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field { + margin-top: .75em; + width: 100%; +} + +/* line 114, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field fieldset.iefix { + margin-left: 1px; + margin-right: 1px; +} + +/* line 115, ../../../hub/static/css/mod/pull-ticket.scss */ +label[for=comment] { + float: right; +} + +/* line 116, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field .wikitoolbar { + margin-left: -1px; +} + +/* line 117, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field div.trac-resizable { + width: 100%; +} + +/* line 119, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties { + white-space: nowrap; + line-height: 160%; + padding: 0.5em; +} + +/* line 120, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table { + border-spacing: 0; + width: 100%; + padding: 0 0.5em; +} + +/* line 121, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table th { + padding: .4em; + text-align: right; + width: 20%; + vertical-align: top; +} + +/* line 127, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table th.col2 { + border-left: 1px dotted #d7d7d7; +} + +/* line 128, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table td { + vertical-align: middle; + width: 30%; +} + +/* line 129, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table td.fullrow { + vertical-align: middle; + width: 80%; +} + +/* line 131, ../../../hub/static/css/mod/pull-ticket.scss */ +#action { + line-height: 2em; +} + +/* line 133, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio { + border: none; + margin: 0; + padding: 0; +} + +/* line 134, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio legend { + color: #000; + float: left; + font-size: 100%; + font-weight: normal; + padding: 0 1em 0 0; +} + +/* line 141, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio label { + padding-right: 1em; +} + +/* Like these */ +/* line 1, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .css-truncate-target + .css-truncate-target { + max-width: 125px; +} + +/* line 2, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .commit-ref .user { + color: #CCC; +} + +/* line 3, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head { + margin: 20px 0; + background-color: #FAFAFA; + border: 1px solid #EEE; + border-bottom-width: 2px; + border-radius: 3px; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .attention-icon { + position: relative; + float: left; + margin: 4px 10px 0 0; +} + +/* line 5, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 10px; + position: relative; + float: left; + margin: 0; + line-height: 36px; + font-size: 13px; + max-width: 690px; + white-space: nowrap; +} + +/* line 6, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .user { + font-weight: bold; + color: #333; +} + +/* line 8, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 0; +} + +/* line 12, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .pull-state { + float: left; + padding: 8px; + margin-right: 8px; + border-right: 1px solid #EEE; + line-height: 20px; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .state-indicator { + font-size: 13px; + display: inline-block; + height: 20px; + line-height: 20px; + padding: 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +.commit-ref { + position: relative; + height: 20px; + display: inline-block; + padding: 0 5px; + border: 1px solid black; + border-radius: 3px; + font: 10px/20px Monaco,"Liberation Mono",Courier,monospace; + color: white; + white-space: nowrap; + vertical-align: middle; + background-color: #222; + background-image: -moz-linear-gradient(#444, #222); + background-image: -webkit-linear-gradient(#444, #222); + background-image: linear-gradient(#444, #222); + background-repeat: repeat-x; +} + +@media (max-width: 767px) { + /* line 2, ../../../hub/static/css/mod/pullrequest-pull-head-responsive.scss */ + div.pull-head .pull-description p { + white-space: normal; + } +} +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} + +/* line 1, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin-top: 10px; +} + +/* line 6, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 13, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 27, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 37, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 41, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 45, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 50, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} + +/* line 59, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed { + margin-top: 0; + border: none; + background-color: white; +} + +/* line 64, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td { + padding: 4px; + vertical-align: top; + border-top: 1px solid #E2EAEE; +} + +/* line 69, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.gravatar { + width: 29px; + padding: 5px; +} + +/* line 74, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:first-child td { + border-top: 0; +} + +/* line 77, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:nth-child(2n) td { + background: #F7FBFC; +} + +/* line 80, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar { + display: block; + width: 16px; + height: 16px; + line-height: 1px; + padding: 1px; + border: 1px solid #DDD; + background: white; +} + +/* line 89, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar a { + display: inline-block; +} + +/* line 92, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author { + padding-left: 0; + color: #666; + width: 100px; + font-weight: bold; +} + +/* line 98, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author span.commit-author { + display: inline-block; + width: 100px; + text-overflow: ellipsis; + overflow: hidden; + line-height: 22px; +} + +/* line 105, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author a { + color: #333; +} + +/* line 108, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message { + padding-left: 0; +} + +/* line 111, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed code { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + background: inherit; +} + +/* line 115, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message code { + line-height: 22px; +} + +/* line 118, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message a { + color: #333; +} + +/* line 121, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed .commit-desc pre { + margin-top: 5px; + margin-bottom: 4px; + border-left: 1px solid #E5E5E5; + padding-left: 8px; + font-size: 11px; + font-weight: normal; + color: #596063; +} + +/* line 130, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta { + width: 1%; + text-align: right; + white-space: nowrap; + padding-right: 10px; +} + +/* line 136, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta code { + line-height: 22px; +} + +/* following style for new-pull 'xxx add commits' commits-condense style */ +/* line 142, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin: 0; + font-size: 12px; +} + +/* line 147, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits .commit { + width: 59px; + padding-right: 10px; +} + +/* line 151, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits code { + border: none; +} + +/* line 154, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.message { + /* width: 70%;*/ +} + +/* line 157, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.date { + text-align: right; +} + +/* line 161, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed code { + white-space: normal; +} + +/* line 164, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed pre { + white-space: pre-wrap; +} + +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} + +/* line 5, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 2px 0 16px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} +/* line 12, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.deletion, .file-box .data .line_numbers.deletion { + color: #AAA; + background-color: #f7c8c8; +} +/* line 16, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.insertion, .file-box .data .line_numbers.insertion { + color: #AAA; + background-color: #ceffce; +} + +/* line 21, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 24, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .code { + width: 100%; +} + +/* line 28, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side { + overflow-x: none; + display: none; +} + +/* line 33, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side .file-col { + width: 50%; + float: left; + overflow-x: auto; +} + +/* line 40, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table { + border-collapse: collapse; +} + +/* line 44, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 46, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table pre { + border-radius: 0px; +} + +/* line 48, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data table, .file-box .data table { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + line-height: 1.4; +} + +/* line 54, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .file-diff-line span.color { + cursor: default; +} + +/* Comment Bubble */ +/* line 58, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line .add-bubble { + position: absolute; + left: 0; + width: 25px; + height: 16px; + margin-top: 0; + cursor: pointer; + opacity: 0; + color: #4183C4; +} + +/* line 69, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line:hover .add-bubble { + opacity: 1; +} + +/* Comment Bubble icons */ +/* line 72, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 83, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 91, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon-add-comment::before { + content: "\f06f"; +} + +/* line 93, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:first-child:after { + margin: -18px 0 0; +} + +/* line 97, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:after { + background: none repeat scroll 0 0 #fff; + content: ""; + display: block; + height: 2px; + margin: -16px 0 0; + position: absolute; + left: 0px; + width: 938px; +} + +/* line 109, ../../../hub/static/css/mod/file-diff-blob.scss */ +.data .line-numbers-skipped { + position: absolute; + width: 79px; + background-color: #f5f5f5; + border-right: 1px solid #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* line 119, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .skipped-top, .skipped-container .skipped-bottom { + height: 18px; + background-color: #f5f5f5; +} + +/* line 124, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top::before { + background: #fff; + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + display: block; + height: 4px; + position: relative; + top: -1px; + margin-left: -1px; +} + +/* line 140, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 145, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 20px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 5px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 170, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .ellipsis { + margin-top: -10px; +} + +/* line 174, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before, .skipped-container .ellipsis::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 188, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2026"; + padding: 2px 0 0; + top: -4px; +} + +/* line 197, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 206, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 211, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 16px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 44px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 236, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .toggle_whitespace { + margin-top: -10px; +} + +/* line 240, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before, .skipped-container .toggle_whitespace::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 254, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2423"; + padding: 2px 0 0; + top: -4px; +} + +/* line 263, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/merge-guide.scss */ +.pullrequest .merge-guide { + margin: 20px 0; +} + +/* line 4, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview { + margin: 10px 0 0 0; +} +/* line 7, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview .message, .commit-preview .commit-preview p.error { + clear: both; + padding: 5px; + background: #eaf2f5; + border: 1px solid #bedce7; +} +/* line 14, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview .message pre { + font-size: 11px; + color: #333; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* line 24, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .mergeable { + padding: 8px 10px; + border: 1px solid #ddd; + border-radius: 2px; +} +/* line 30, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .mergeable.merging { + background-color: #589ab3; + background-image: -moz-linear-gradient(#82bccd, #589ab3); + background-image: -webkit-linear-gradient(#82bccd, #589ab3); + background-image: linear-gradient(#82bccd, #589ab3); + background-repeat: repeat-x; + border-color: #7699ad; + border-bottom-color: #648192; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-repeat: repeat-x; + border-color: #8bc384; +} +/* line 44, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable { + background-color: #6eda62; + background-image: -moz-linear-gradient(#9ee692, #6eda62); + background-image: -webkit-linear-gradient(#9ee692, #6eda62); + background-image: linear-gradient(#9ee692, #6eda62); +} +/* line 50, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable p.message { + color: #0b5f00; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.4); +} +/* line 54, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable p.message span.blue { + color: blue; +} +/* line 58, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-dirty .mergeable, .merge-branch .dirty-cleanup .mergeable { + position: relative; + background-color: #f6e69f; + background-image: -moz-linear-gradient(#f6e69f, #f6e69f); + background-image: -webkit-linear-gradient(#f6e69f, #f6e69f); + background-image: linear-gradient(#f6e69f, #f6e69f); + background-repeat: repeat-x; + border-color: #888; +} +/* line 68, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-error .mergeable, .merge-branch .dirty-cleanup .mergeable { + position: relative; + background-color: #da4f49; + background-image: -moz-linear-gradient(#da4f49, #da4f49); + background-image: -webkit-linear-gradient(#da4f49, #da4f49); + background-image: linear-gradient(#da4f49, #da4f49); + background-repeat: repeat-x; + border-color: #888; +} +/* line 78, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .minibutton { + float: right; + margin: -3px 0 0 15px; +} +/* line 83, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch p.message { + margin: 0; + font-size: 13px; + font-weight: bold; +} +/* line 89, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .merge-form .merge-error-message { + display: none; + margin: 10px 0 0 0; + padding: 5px 7px; + color: #bd2c00; + font-weight: bold; + font-size: 12px; + line-height: 19px; + background: rgba(255, 255, 255, 0.8); + border-radius: 2px; +} +/* line 101, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview { + position: relative; + display: table-row; + font-size: 12px; +} +/* line 106, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .author { + display: table-cell; + width: 36px; + padding: 8px 10px; + vertical-align: top; + background: #d3e5eb; + border: 1px solid #bedce7; + border-right: none; +} +/* line 116, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .gravatar { + float: left; + margin: 2px 8px 0 0; +} +/* line 121, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message { + display: table-cell; + width: 805px; + padding: 8px 10px; + vertical-align: top; + background-color: #e7f0f3; + background-image: -moz-linear-gradient(#f6f9fa, #e7f0f3); + background-image: -webkit-linear-gradient(#f6f9fa, #e7f0f3); + background-image: linear-gradient(#f6f9fa, #e7f0f3); + background-repeat: repeat-x; + border: 1px solid #bedce7; +} +/* line 133, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message pre { + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 12px; + color: #5b6f74; +} +/* line 139, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message textarea { + margin-top: 5px; + box-sizing: border-box; + width: 100%; + height: 50px; + padding: 4px; + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 12px; + color: #666; + background-color: #fafafa; +} + +/* line 154, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-form { + display: none; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment-form.scss */ +.show-inline-comment-form { + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment-form.scss */ +tr.inline-comments.show-inline-comment-form .show-inline-comment-form { + display: none; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .comment-count { + overflow: hidden; + padding: 0 !important; + border: solid #DDD; + border-width: 1px 0; + vertical-align: top; + text-align: center !important; +} + +/* line 8, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .counter { + display: inline-block; + padding: 2px 8px 6px; + font-family: 11px/1.2 bold Helvetica,arial,freesans,clean,sans-serif !important; + color: #333 !important; + border: 1px solid #C0CCD0; + border-top: 0; + border-radius: 0 0 3px 3px; + cursor: default !important; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment-form.scss */ +#files .file.show-inline-notes tr.inline-comments { + display: table-row; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .line-comments { + overflow: auto; + padding: 0; + border-top: 1px solid #CCC; + border-bottom: 1px solid #DDD; + background: #fff; + font-family: Helvetica, arial, freesans, clean, sans-serif !important; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form { + max-width: 870px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form form { + margin: 0; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .form-actions { + padding: 0 10px 10px; + margin: 0; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-content .form-actions { + background-color: transparent; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions { + text-align: right; + padding-bottom: 5px; + background: #fff; + border: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions .optional { + display: block; + padding-top: 8px; + float: left; + margin-right: 15px; + padding-top: 3px; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment.scss */ +.inline-comments .comment-holder { + max-width: 850px; + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment.scss */ +.inline-comments .comment { + margin: 5px 0 !important; + border: 1px solid #CACACA; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: #F8F8F8; + font-size: 12px; + background-image: -webkit-linear-gradient(top, #F4FAF6, #D8E5DD); +} + +/* line 8, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-gravatar { + display: inline-block; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-author { + display: inline-block; + max-width: 600px; + height: 33px; + line-height: 33px; + font-weight: bold; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-right { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + ine-height: 33px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + line-height: 33px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/inline-comment.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions { + display: inline-block; + vertical-align: middle; + font-size: 13px; + margin-left: 7px; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + position: relative; + top: 2px; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions li .mini-icon { + -moz-transition: all 0.15s ease-in 0; + -webkit-transition: all 0.15s ease-in 0; + text-decoration: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-date { + color: #939AA0; + text-decoration: none; +} + +/* line 18, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-content { + padding: 0; + color: #333; + font-size: 12px; + background: #FBFBFB; +} + +/* line 19, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 20, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions li { + list-style-type: none; + float: left; + margin: 0 0 0 8px; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji { + margin-right: 10px; +} +/* line 4, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .description { + text-align: center; + color: #999; +} +/* line 9, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis { + overflow-x: hidden; + overflow-y: scroll; + word-wrap: break-word; + word-break: break-all; + width: 290px; + height: 260px; +} +/* line 17, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a { + display: block; + float: left; + width: 25px; + height: 25px; + padding: 2px; + border: 1px solid white; +} +/* line 24, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a:hover { + background: #eef; + border: 1px solid #aad; +} + +/* line 1, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container input[type=checkbox] { + vertical-align: middle; +} + +/* line 9, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container label { + display: inline; + vertical-align: middle; + padding: 0 0 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container label span { + margin: 0 0 0 5px; +} + +/* line 30, ../../../hub/static/css/app/ticket.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 35, ../../../hub/static/css/app/ticket.scss */ +#files .file .meta .info { + max-width: 410px !important; +} +/* line 38, ../../../hub/static/css/app/ticket.scss */ +#files .file .meta .info .patch-title { + padding: 0; + margin: 0; + border: 0; + box-shadow: none; +} diff --git a/dist/css/app/watchers.css b/dist/css/app/watchers.css new file mode 100644 index 0000000..c57d652 --- /dev/null +++ b/dist/css/app/watchers.css @@ -0,0 +1,5514 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 5, ../../../hub/static/css/app/watchers.scss */ +.userlist { + padding: 5px; +} + +/* line 9, ../../../hub/static/css/app/watchers.scss */ +.gray { + color: #ccc; + margin-top: 10px; + padding: 5px; +} + +/* line 15, ../../../hub/static/css/app/watchers.scss */ +.userlist .user { + margin-top: 15px; +} + +/* line 19, ../../../hub/static/css/app/watchers.scss */ +.userlist .user img { + width: 32px; + height: 32px; +} + +/* line 24, ../../../hub/static/css/app/watchers.scss */ +.userlist a { + margin-right: 10px; +} diff --git a/dist/css/app/watching.css b/dist/css/app/watching.css new file mode 100644 index 0000000..1cee0e6 --- /dev/null +++ b/dist/css/app/watching.css @@ -0,0 +1,5458 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} + +/* line 1, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 8, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 22, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 32, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 36, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 40, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 45, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} + +/* line 4, ../../../hub/static/css/app/watching.scss */ +.settings-content { + width: 60%; +} + +/* line 5, ../../../hub/static/css/app/watching.scss */ +.watch-btn { + display: inline-table; + float: right; +} + +/* line 6, ../../../hub/static/css/app/watching.scss */ +li.inline-list { + clear: both; + margin: 2px 5px; +} diff --git a/dist/css/lib/bootstrap-responsive.css b/dist/css/lib/bootstrap-responsive.css new file mode 100644 index 0000000..895fa67 --- /dev/null +++ b/dist/css/lib/bootstrap-responsive.css @@ -0,0 +1,1067 @@ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/dist/css/lib/jquery.atwho.css b/dist/css/lib/jquery.atwho.css new file mode 100644 index 0000000..d497791 --- /dev/null +++ b/dist/css/lib/jquery.atwho.css @@ -0,0 +1,60 @@ +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} diff --git a/dist/css/lib/odometer.css b/dist/css/lib/odometer.css new file mode 100644 index 0000000..9414735 --- /dev/null +++ b/dist/css/lib/odometer.css @@ -0,0 +1,117 @@ +/* line 2, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +/* line 10, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + *display: inline; +} +/* line 13, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + position: relative; +} +/* line 21, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { + *display: inline; +} +/* line 24, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { + display: -moz-inline-box; + -moz-box-orient: vertical; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + visibility: hidden; +} +/* line 32, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { + *display: inline; +} +/* line 35, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { + text-align: left; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +/* line 45, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { + display: block; +} +/* line 48, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { + display: block; + -webkit-backface-visibility: hidden; +} +/* line 52, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { + display: block; + -webkit-transform: translateZ(0); +} +/* line 56, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { + position: absolute; +} +/* line 59, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; +} +/* line 66, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +/* line 73, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -ms-transform: translateY(-100%); + -o-transform: translateY(-100%); + transform: translateY(-100%); +} +/* line 80, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { + -webkit-transition: -webkit-transform 2s; + -moz-transition: -moz-transform 2s; + -ms-transition: -ms-transform 2s; + -o-transition: -o-transform 2s; + transition: transform 2s; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); +} +/* line 92, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme, .odometer.odometer-theme-default { + line-height: 0.7; + font-size: 52px; + font-family: "HelveticaNeue-CondensedBold","Helvetica Neue","Arial Narrow",Arial,sans-serif; + font-weight: bold; + font-stretch: condensed; +} +/* line 99, ../../../hub/static/css/lib/odometer.scss */ +.odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { + text-align: center; +} diff --git a/dist/css/lib/tag-it.css b/dist/css/lib/tag-it.css new file mode 100644 index 0000000..ab67455 --- /dev/null +++ b/dist/css/lib/tag-it.css @@ -0,0 +1,57 @@ +/* line 1, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit { + overflow: auto; +} + +/* line 4, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li { + -moz-border-radius: 5px 5px 5px 5px; + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 10, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice { + background-color: #00a89c; + padding: 2px 4px 3px; + color: #fff; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +/* line 19, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice:hover { + color: rgba(255, 255, 255, 0.8); + cursor: pointer; +} + +/* line 23, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-new { + padding: 2px 4px 3px; + padding: 2px 4px 1px; + padding: 2px 4px 1px 0; +} + +/* line 29, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice input { + display: block; + float: left; + margin: 2px 5px 2px 0; +} + +/* line 34, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit li.tagit-choice a.tag-close { + color: #fff; + cursor: pointer; + font-weight: bold; + padding-left: 3px; + text-decoration: none; + text-shadow: none; +} + +/* line 42, ../../../hub/static/css/lib/tag-it.scss */ +ul.tagit input[type="text"] { + width: 200px; +} diff --git a/dist/css/lib/zen-form.css b/dist/css/lib/zen-form.css new file mode 100644 index 0000000..1a39193 --- /dev/null +++ b/dist/css/lib/zen-form.css @@ -0,0 +1,140 @@ +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} diff --git a/dist/css/mod/checkbox.css b/dist/css/mod/checkbox.css new file mode 100644 index 0000000..209066d --- /dev/null +++ b/dist/css/mod/checkbox.css @@ -0,0 +1,21 @@ +/* line 1, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container input[type=checkbox] { + vertical-align: middle; +} + +/* line 9, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container label { + display: inline; + vertical-align: middle; + padding: 0 0 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/checkbox.scss */ +.checkbox-container label span { + margin: 0 0 0 5px; +} diff --git a/dist/css/mod/code-highlight.css b/dist/css/mod/code-highlight.css new file mode 100644 index 0000000..efa53f4 --- /dev/null +++ b/dist/css/mod/code-highlight.css @@ -0,0 +1,403 @@ +/* Highlight style from pygments */ +/* line 2, ../../../hub/static/css/mod/code-highlight.scss */ +.code .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/code-highlight.scss */ +.code { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/code-highlight.scss */ +.code .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/code-highlight.scss */ +.code .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/code-highlight.scss */ +.code .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/code-highlight.scss */ +.code .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/code-highlight.scss */ +.code .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/code-highlight.scss */ +.code .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/code-highlight.scss */ +.code .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/code-highlight.scss */ +.code .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/code-highlight.scss */ +.code .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/code-highlight.scss */ +.code .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/code-highlight.scss */ +.code .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/code-highlight.scss */ +.code .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/code-highlight.scss */ +.code .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/code-highlight.scss */ +.code .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/code-highlight.scss */ +.code .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/code-highlight.scss */ +.code .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/code-highlight.scss */ +.code .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/code-highlight.scss */ +.code .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/code-highlight.scss */ +.code .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/code-highlight.scss */ +.code .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/code-highlight.scss */ +.code .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/code-highlight.scss */ +.code .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ diff --git a/dist/css/mod/colorcube.css b/dist/css/mod/colorcube.css new file mode 100644 index 0000000..6a675e9 --- /dev/null +++ b/dist/css/mod/colorcube.css @@ -0,0 +1,22 @@ +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} diff --git a/dist/css/mod/comment-form-button.css b/dist/css/mod/comment-form-button.css new file mode 100644 index 0000000..5e2a55f --- /dev/null +++ b/dist/css/mod/comment-form-button.css @@ -0,0 +1,58 @@ +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} diff --git a/dist/css/mod/comment-form-content.css b/dist/css/mod/comment-form-content.css new file mode 100644 index 0000000..8698d76 --- /dev/null +++ b/dist/css/mod/comment-form-content.css @@ -0,0 +1,63 @@ +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} diff --git a/dist/css/mod/comment-form-preview.css b/dist/css/mod/comment-form-preview.css new file mode 100644 index 0000000..d7a599c --- /dev/null +++ b/dist/css/mod/comment-form-preview.css @@ -0,0 +1,64 @@ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} diff --git a/dist/css/mod/comment-form-zen.css b/dist/css/mod/comment-form-zen.css new file mode 100644 index 0000000..d7b22d4 --- /dev/null +++ b/dist/css/mod/comment-form-zen.css @@ -0,0 +1,208 @@ +@charset "UTF-8"; +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} diff --git a/dist/css/mod/comment-form.css b/dist/css/mod/comment-form.css new file mode 100644 index 0000000..52e3e3c --- /dev/null +++ b/dist/css/mod/comment-form.css @@ -0,0 +1,581 @@ +@charset "UTF-8"; +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} diff --git a/dist/css/mod/comment.css b/dist/css/mod/comment.css new file mode 100644 index 0000000..68ee708 --- /dev/null +++ b/dist/css/mod/comment.css @@ -0,0 +1,75 @@ +/* line 2, ../../../hub/static/css/mod/comment.scss */ +.full-comment .comment-row { + padding: 0; + background: #FBFBFB; + margin-bottom: 20px; + border-radius: 3px; + border: 3px solid #eee; +} + +/* line 9, ../../../hub/static/css/mod/comment.scss */ +.full-comment .comment-row:before { + position: relative; + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; +} + +/* line 22, ../../../hub/static/css/mod/comment.scss */ +.full-comment .side-avatar { + position: relative; + float: left; + border-radius: 3px; + margin-left: -70px; +} + +/* line 28, ../../../hub/static/css/mod/comment.scss */ +.full-comment { + width: 63em; + max-width: 100%; + margin-left: auto; +} + +/* line 33, ../../../hub/static/css/mod/comment.scss */ +.full-comment .comment-header { + height: 23px; + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 3px 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#f8fbfc, #dde8eb); + background-image: linear-gradient(#f8f8f8, #e1e1e1); +} + +/* line 46, ../../../hub/static/css/mod/comment.scss */ +#new_comment .form-content { + width: auto; + position: relative; + border: 3px solid #EEE; +} + +/* line 51, ../../../hub/static/css/mod/comment.scss */ +.form-content:before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; + position: absolute; +} diff --git a/dist/css/mod/commits-condensed.css b/dist/css/mod/commits-condensed.css new file mode 100644 index 0000000..c671d66 --- /dev/null +++ b/dist/css/mod/commits-condensed.css @@ -0,0 +1,222 @@ +/* line 1, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin-top: 10px; +} + +/* line 6, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 13, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 27, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 37, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 41, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 45, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 50, ../../../hub/static/css/mod/commits-condensed.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} + +/* line 59, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed { + margin-top: 0; + border: none; + background-color: white; +} + +/* line 64, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td { + padding: 4px; + vertical-align: top; + border-top: 1px solid #E2EAEE; +} + +/* line 69, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.gravatar { + width: 29px; + padding: 5px; +} + +/* line 74, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:first-child td { + border-top: 0; +} + +/* line 77, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed tr:nth-child(2n) td { + background: #F7FBFC; +} + +/* line 80, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar { + display: block; + width: 16px; + height: 16px; + line-height: 1px; + padding: 1px; + border: 1px solid #DDD; + background: white; +} + +/* line 89, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed span.gravatar a { + display: inline-block; +} + +/* line 92, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author { + padding-left: 0; + color: #666; + width: 100px; + font-weight: bold; +} + +/* line 98, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author span.commit-author { + display: inline-block; + width: 100px; + text-overflow: ellipsis; + overflow: hidden; + line-height: 22px; +} + +/* line 105, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.author a { + color: #333; +} + +/* line 108, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message { + padding-left: 0; +} + +/* line 111, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed code { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + background: inherit; +} + +/* line 115, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message code { + line-height: 22px; +} + +/* line 118, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.message a { + color: #333; +} + +/* line 121, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed .commit-desc pre { + margin-top: 5px; + margin-bottom: 4px; + border-left: 1px solid #E5E5E5; + padding-left: 8px; + font-size: 11px; + font-weight: normal; + color: #596063; +} + +/* line 130, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta { + width: 1%; + text-align: right; + white-space: nowrap; + padding-right: 10px; +} + +/* line 136, ../../../hub/static/css/mod/commits-condensed.scss */ +.commits-condensed td.commit-meta code { + line-height: 22px; +} + +/* following style for new-pull 'xxx add commits' commits-condense style */ +/* line 142, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits { + width: 100%; + margin: 0; + font-size: 12px; +} + +/* line 147, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits .commit { + width: 59px; + padding-right: 10px; +} + +/* line 151, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits code { + border: none; +} + +/* line 154, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.message { + /* width: 70%;*/ +} + +/* line 157, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits td.date { + text-align: right; +} + +/* line 161, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed code { + white-space: normal; +} + +/* line 164, ../../../hub/static/css/mod/commits-condensed.scss */ +table.commits-condensed pre { + white-space: pre-wrap; +} diff --git a/dist/css/mod/commits.css b/dist/css/mod/commits.css new file mode 100644 index 0000000..059c6cf --- /dev/null +++ b/dist/css/mod/commits.css @@ -0,0 +1,1457 @@ +@charset "UTF-8"; +/* For other page that still depends on commits.scss */ +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/commits.scss */ +div.container div.raw { + overflow: visible; +} + +/* line 9, ../../../hub/static/css/mod/commits.scss */ +#commits-graph { + position: absolute; + left: -200px; + width: 200px; +} + +/* line 15, ../../../hub/static/css/mod/commits.scss */ +.commits-body { + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/commits.scss */ +h3.commit-group-heading { + margin: 15px 0 0 0; + padding: 5px 8px; + font-size: 13px; + color: #3a505b; + text-shadow: 0 1px white; + background: #e6f1f6; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +/* line 31, ../../../hub/static/css/mod/commits.scss */ +h3.history { + margin-top: 15px; +} + +/* line 35, ../../../hub/static/css/mod/commits.scss */ +.commit-group { + list-style-type: none; + margin: 15px 0; + background: #f7fbfc; + border: 1px solid #c5d5dd; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 46, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item { + position: relative; + padding: 8px 8px 8px 52px; + border-top: 1px solid #e2eaee; +} + +/* line 52, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:first-child { + border-top: none; +} + +/* line 56, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:last-child { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 61, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n) { + background: #fff; +} + +/* line 65, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus { + background: #fcfce2; +} + +/* line 69, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gravatar { + float: left; + margin-left: -44px; + border-radius: 4px; +} + +/* line 75, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title { + margin: 1px 0 1px 0; + font-size: 14px; + font-weight: bold; + color: #333; +} + +/* line 82, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-title a { + color: #333; +} + +/* line 86, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-desc pre { + margin-top: 5px; + margin-bottom: 10px; + font-size: 12px; + color: #596063; + border-left: 1px solid #e5e5e5; + padding-left: 8px; +} + +/* line 95, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship { + font-size: 12px; + color: #888; +} + +/* line 100, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship a { + color: #444; +} + +/* line 104, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .author-name { + color: #444; +} + +/* line 108, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer { + display: block; + font-size: 11px; +} + +/* line 113, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .authorship .committer .mini-icon { + position: relative; + top: 2px; +} + +/* line 118, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .commit-links { + position: absolute; + top: 7px; + right: 8px; + width: 243px; + text-align: right; +} + +/* line 126, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .mini-icon-clippy { + visibility: hidden; + float: left; + margin-right: 7px; + margin-top: 5px; +} + +/* line 133, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:hover .mini-icon-clippy { + visibility: visible; +} + +/* line 137, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton { + float: right; + height: 18px; + padding: 0 7px; + line-height: 22px; + font-size: 11px; + color: #4e575b; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #eff6f9; + background: -moz-linear-gradient(#eff6f9, #ddecf3); + background: -webkit-linear-gradient(#eff6f9, #ddecf3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #cedee5; + border-radius: 3px; + min-width: 70px; + text-align: center; +} + +/* line 155, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-popover { + color: #91A6B1; + border-right: 1px solid #ddd; + padding-right: 4px; +} + +/* line 161, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + color: #5a5b4e; +} + +/* line 165, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item:nth-child(2n+1) .gobutton { + border-color: #d5dcdf; + background: #f2f5f6; + background: -moz-linear-gradient(#f2f5f6, #e3eaed); + background: -webkit-linear-gradient(#f2f5f6, #e3eaed); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f5f6',endColorstr='#e3eaed')"; +} + +/* line 173, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton { + border-color: #e7e86d; + background: #f9fac9; + background: -moz-linear-gradient(#f9fac9, #f3f494); + background: -webkit-linear-gradient(#f9fac9, #f3f494); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9fac9',endColorstr='#f3f494')"; +} + +/* line 181, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton:hover { + text-decoration: none; + border-color: #cedee5; + background: #fbfdfe; + background: -moz-linear-gradient(#fbfdfe, #eaf4f8); + background: -webkit-linear-gradient(#fbfdfe, #eaf4f8); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbfdfe',endColorstr='#eaf4f8')"; +} + +/* line 190, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha, .commit-group-item.navigation-focus .gobutton:hover > .sha { + display: inline-block; + height: 22px; + margin-right: -3px; +} + +/* line 196, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton > .sha .mini-icon, .commit-group-item.navigation-focus .gobutton:hover > .sha .mini-icon { + position: relative; + top: 2px; + border-radius: 30px; + border: 1px solid #CFDEE5; + background-color: rgba(255, 255, 255, 0.5); + color: #91a6b1; + margin-left: 5px; + width: 16px; +} + +/* line 207, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton > .sha .mini-icon { + border: 1px solid #E7E86D; + color: #c3c45c; +} + +/* line 212, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments { + padding-left: 5px; +} + +/* line 216, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton.with-comments .sha, .commit-group-item.navigation-focus .gobutton.with-comments:hover .sha { + padding-left: 8px; + border-left: 1px solid #cfdee5; +} + +/* line 221, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton.with-comments .sha { + border-left-color: #e1e29e; +} + +/* line 225, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count, .commit-group-item.navigation-focus .gobutton:hover .comment-count { + float: left; + height: 22px; + padding-right: 9px; + line-height: 24px; + font-weight: bold; + border-right: 1px solid #f6fafc; +} + +/* line 234, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .gobutton .comment-count .mini-icon, .commit-group-item.navigation-focus .gobutton:hover .comment-count .mini-icon { + position: relative; + top: 2px; + color: #91A6B1; +} + +/* line 240, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item.navigation-focus .gobutton .comment-count .mini-icon { + color: #C3C45C; +} + +/* line 244, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button, .commit-group-item .compare-button { + clear: left; + margin-top: 1px; + font-size: 11px; + font-weight: bold; + text-align: right; + color: #999; +} + +/* line 253, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button .mini-icon { + position: relative; + top: 2px; +} + +/* line 258, ../../../hub/static/css/mod/commits.scss */ +.commit-group-item .browse-button:hover { + color: #4183C4; + background-position: 100% -95px; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 266, ../../../hub/static/css/mod/commits.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 268, ../../../hub/static/css/mod/commits.scss */ +.full-commit { + margin: 10px 0; + padding: 8px 8px 0; + background: #E6F1F6; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 276, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 286, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc { + display: block; + margin: -4px 0 10px 0; +} + +/* line 291, ../../../hub/static/css/mod/commits.scss */ +.full-commit .commit-desc pre { + max-width: 100%; + font-size: 14px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 297, ../../../hub/static/css/mod/commits.scss */ +.full-commit .browse-button { + float: right; + margin: -3px -3px 0 0; + height: 26px; + padding: 0 10px; + line-height: 26px; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + background: #EFF6F9; + background: -moz-linear-gradient(#EFF6F9, #DDECF3); + background: -webkit-linear-gradient(#EFF6F9, #DDECF3); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#eff6f9',endColorstr='#ddecf3')"; + border: 1px solid #CEDEE5; + border-radius: 3px; +} + +/* line 314, ../../../hub/static/css/mod/commits.scss */ +.full-commit p.commit-title { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: bold; + color: #213F4D; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); +} + +/* line 322, ../../../hub/static/css/mod/commits.scss */ +.clearfix { + display: block; +} + +/* line 326, ../../../hub/static/css/mod/commits.scss */ +.full-commit .sha-block { + float: right; + margin-left: 15px; + color: #888; + font-size: 12px; +} + +/* line 333, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship { + margin-top: -2px; + margin-left: -4px; + margin-bottom: -4px; + font-size: 14px; + color: #999; +} + +/* line 341, ../../../hub/static/css/mod/commits.scss */ +.full-commit .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 347, ../../../hub/static/css/mod/commits.scss */ +#files { + position: relative; +} + +/* line 351, ../../../hub/static/css/mod/commits.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 358, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta, .file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 373, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info, .file-box .meta .info { + float: left; + height: 33px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 380, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 387, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li:first-child, .file-box .meta .actions li:first-child { + background: transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 393, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .actions li, .file-box .meta .actions li { + list-style-type: none; + float: left; + margin: 0 0 0 7px; +} + +/* line 399, ../../../hub/static/css/mod/commits.scss */ +.button-group li { + margin: 0 !important; +} + +/* line 403, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a { + padding: .1em .3em; + margin: .2em; + text-decoration: none; + color: #369; + float: none; +} + +/* line 411, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer a:hover, .pagination a:active { + background-color: transparent; + color: #36f; +} + +/* line 416, ../../../hub/static/css/mod/commits.scss */ +.pagination-older-newer span.disabled { + padding: .1em .3em; + margin: .2em; + color: #bbb; + float: none; +} + +/* line 423, ../../../hub/static/css/mod/commits.scss */ +.commit .sha-block, .commit .sha { + padding-right: 3px; + font-size: 11px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} + +/* line 429, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 6px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} + +/* line 437, ../../../hub/static/css/mod/commits.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 441, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 442, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 443, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 444, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* line 445, ../../../hub/static/css/mod/commits.scss */ +.mini-icon-commit-comment:before { + content: "\f02b"; +} + +/* line 447, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-beer:before { + content: "\f269"; +} + +/* line 448, ../../../hub/static/css/mod/commits.scss */ +.mega-icon-commit-comment:before { + content: "\f22b"; +} + +/* line 450, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 463, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 467, ../../../hub/static/css/mod/commits.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 477, ../../../hub/static/css/mod/commits.scss */ +.commit-meta.comment-row .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + top: 2px; + text-decoration: none; +} + +/* line 478, ../../../hub/static/css/mod/commits.scss */ +#files .file .data.empty, .file-box .data.empty { + padding: 10px 15px; + color: #777; +} + +/* line 482, ../../../hub/static/css/mod/commits.scss */ +.timeout { + width: 873px; + height: 528px; + border: 1px solid #C5D5DD; + background: url("/static/img/timeout.jpg") #E6F1F6 no-repeat; + background-position: 90% 50%; + padding: 0 32px 0 33px; + border-radius: 3px; +} + +/* line 491, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 { + color: white; + font-size: 18px; + font-weight: bold; + text-shadow: darkGray 1px 1px 0; + padding: 15px 0 15px 0; +} + +/* line 498, ../../../hub/static/css/mod/commits.scss */ +.timeout h3 strong { + font-size: 30px; + display: block; +} + +/* line 502, ../../../hub/static/css/mod/commits.scss */ +.timeout p { + color: white; +} + +/* line 506, ../../../hub/static/css/mod/commits.scss */ +.side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 512, ../../../hub/static/css/mod/commits.scss */ +div.generated, div.binary { + text-align: center; + background-color: #ddd; + padding: 30px; +} + +/* line 518, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header { + margin-bottom: 55px; +} +/* line 521, ../../../hub/static/css/mod/commits.scss */ +.commit-history-header #search-commits { + margin: 15px 5px; +} diff --git a/dist/css/mod/common.css b/dist/css/mod/common.css new file mode 100644 index 0000000..836c136 --- /dev/null +++ b/dist/css/mod/common.css @@ -0,0 +1,5376 @@ +/* Styles that are used in ALL pages. */ +/*! + * Bootstrap Responsive v2.3.1 + * + * 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. + */ +/* line 11, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix { + *zoom: 1; +} + +/* line 15, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +/* line 22, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.clearfix:after { + clear: both; +} + +/* line 26, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 34, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.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; +} +/* line 47, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden { + display: none; + visibility: hidden; +} + +/* line 52, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-phone { + display: none !important; +} + +/* line 56, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-tablet { + display: none !important; +} + +/* line 60, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.hidden-desktop { + display: none !important; +} + +/* line 64, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + /* line 69, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 72, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 75, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-tablet { + display: inherit !important; + } + + /* line 78, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + /* line 84, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-desktop { + display: inherit !important; + } + + /* line 87, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-desktop { + display: none !important; + } + + /* line 90, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-phone { + display: inherit !important; + } + + /* line 93, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-phone { + display: none !important; + } +} +/* line 98, ../../../hub/static/css/lib/bootstrap-responsive.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 103, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .visible-print { + display: inherit !important; + } + + /* line 106, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .hidden-print { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 979px) { + /* line 112, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row { + margin-left: -20px; + *zoom: 1; + } + + /* line 116, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 122, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row:after { + clear: both; + } + + /* line 125, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + + /* line 130, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + + /* line 136, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12 { + width: 724px; + } + + /* line 139, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span11 { + width: 662px; + } + + /* line 142, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span10 { + width: 600px; + } + + /* line 145, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span9 { + width: 538px; + } + + /* line 148, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span8 { + width: 476px; + } + + /* line 151, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span7 { + width: 414px; + } + + /* line 154, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span6 { + width: 352px; + } + + /* line 157, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span5 { + width: 290px; + } + + /* line 160, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span4 { + width: 228px; + } + + /* line 163, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span3 { + width: 166px; + } + + /* line 166, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span2 { + width: 104px; + } + + /* line 169, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span1 { + width: 42px; + } + + /* line 172, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset12 { + margin-left: 764px; + } + + /* line 175, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset11 { + margin-left: 702px; + } + + /* line 178, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset10 { + margin-left: 640px; + } + + /* line 181, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset9 { + margin-left: 578px; + } + + /* line 184, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset8 { + margin-left: 516px; + } + + /* line 187, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset7 { + margin-left: 454px; + } + + /* line 190, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset6 { + margin-left: 392px; + } + + /* line 193, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset5 { + margin-left: 330px; + } + + /* line 196, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset4 { + margin-left: 268px; + } + + /* line 199, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset3 { + margin-left: 206px; + } + + /* line 202, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset2 { + margin-left: 144px; + } + + /* line 205, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .offset1 { + margin-left: 82px; + } + + /* line 208, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + *zoom: 1; + } + + /* line 212, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + + /* line 218, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid:after { + clear: both; + } + + /* line 221, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 232, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + + /* line 235, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + + /* line 238, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + + /* line 242, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + + /* line 246, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + + /* line 250, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + + /* line 254, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + + /* line 258, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + + /* line 262, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + + /* line 266, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + + /* line 270, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + + /* line 274, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + + /* line 278, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + + /* line 282, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + + /* line 286, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + + /* line 290, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + + /* line 294, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + + /* line 298, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + + /* line 302, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + + /* line 306, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + + /* line 310, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + + /* line 314, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + + /* line 318, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + + /* line 322, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + + /* line 326, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + + /* line 330, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + + /* line 334, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + + /* line 338, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + + /* line 342, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + + /* line 346, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + + /* line 350, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + + /* line 354, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + + /* line 358, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + + /* line 362, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + + /* line 366, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + + /* line 370, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + + /* line 374, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + + /* line 378, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + + /* line 382, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input, + textarea, + .uneditable-input { + margin-left: 0; + } + + /* line 387, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + + /* line 390, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + + /* line 395, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + + /* line 400, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + + /* line 405, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + + /* line 410, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + + /* line 415, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + + /* line 420, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + + /* line 425, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + + /* line 430, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + + /* line 435, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + + /* line 440, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + + /* line 445, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} +@media (max-width: 767px) { + /* line 453, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-right: 20px; + padding-left: 20px; + } + + /* line 457, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + + /* line 463, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container-fluid { + padding: 0; + } + + /* line 466, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + + /* line 472, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .dl-horizontal dd { + margin-left: 0; + } + + /* line 475, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .container { + width: auto; + } + + /* line 478, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid { + width: 100%; + } + + /* line 481, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row, + .thumbnails { + margin-left: 0; + } + + /* line 485, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .thumbnails > li { + float: none; + margin-left: 0; + } + + /* line 489, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + [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; + } + + /* line 500, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + /* line 507, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + + /* line 510, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 524, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + + /* line 531, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + + /* line 534, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + + /* line 542, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade { + top: -100px; + } + + /* line 545, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + /* line 551, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + + /* line 554, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .page-header h1 small { + display: block; + line-height: 20px; + } + + /* line 558, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + /* line 562, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + + /* line 568, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .controls { + margin-left: 0; + } + + /* line 571, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .control-list { + padding-top: 0; + } + + /* line 574, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + + /* line 578, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + + /* line 584, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .media-object { + margin-right: 0; + margin-left: 0; + } + + /* line 588, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal { + top: 10px; + right: 10px; + left: 10px; + } + + /* line 593, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .modal-header .close { + padding: 10px; + margin: -10px; + } + + /* line 597, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .carousel-caption { + position: static; + } +} +@media (max-width: 979px) { + /* line 603, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + body { + padding-top: 0; + } + + /* line 606, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + + /* line 610, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top { + margin-bottom: 20px; + } + + /* line 613, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-bottom { + margin-top: 20px; + } + + /* line 616, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + + /* line 620, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .container { + width: auto; + padding: 0; + } + + /* line 624, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + + /* line 629, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse { + clear: both; + } + + /* line 632, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + + /* line 636, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li { + float: none; + } + + /* line 639, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + + /* line 642, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > .divider-vertical { + display: none; + } + + /* line 645, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + + /* line 649, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 658, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + /* line 665, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + + /* line 668, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 674, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + + /* line 678, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 684, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + + /* line 688, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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; + } + + /* line 706, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .open > .dropdown-menu { + display: block; + } + + /* line 709, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + + /* line 713, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .dropdown-menu .divider { + display: none; + } + + /* line 716, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + + /* line 720, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .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); + } + + /* line 731, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + + /* line 736, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + + /* line 740, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + + /* line 745, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar .btn-navbar { + display: block; + } + + /* line 748, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} +@media (min-width: 980px) { + /* line 755, ../../../hub/static/css/lib/bootstrap-responsive.scss */ + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} + +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} + +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} + +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} + +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} + +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} + +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} + +/* TODO: to be removed */ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 15, ../../../hub/static/css/mod/common.scss */ +.hidden { + display: none; +} + +/* line 19, ../../../hub/static/css/mod/common.scss */ +h1.pagehead { + font-size: 20px; + font-weight: normal; + color: #495961; +} + +/* line 25, ../../../hub/static/css/mod/common.scss */ +.pagehead { + margin-bottom: 7px; +} + +/* line 27, ../../../hub/static/css/mod/common.scss */ +.raw { + overflow: hidden; + margin-left: -20px; +} diff --git a/dist/css/mod/compare.css b/dist/css/mod/compare.css new file mode 100644 index 0000000..e72b995 --- /dev/null +++ b/dist/css/mod/compare.css @@ -0,0 +1,259 @@ +@charset "UTF-8"; +/* line 2, ../../../hub/static/css/mod/compare.scss */ +.compare-range { + margin-top: -15px; + float: right; +} + +/* line 7, ../../../hub/static/css/mod/compare.scss */ +.compare-range .switch { + display: inline-block; + width: 16px; + height: 16px; + text-indent: -9999px; + background: url("/static/img/switch_icon.png") 0 0 no-repeat; +} + +/* line 15, ../../../hub/static/css/mod/compare.scss */ +.commit-ref { + padding: 2px 5px; + line-height: 19px; + font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; + font-size: 12px; + font-weight: normal; + color: white; + text-shadow: -1px -1px 0 black; + text-decoration: none; + background: #787878; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#787878',endColorstr='#282828')"; + border-radius: 3px; +} + +/* line 29, ../../../hub/static/css/mod/compare.scss */ +#compare p.subtext { + margin: -15px 0 10px 0; + color: #666; +} + +/* line 34, ../../../hub/static/css/mod/compare.scss */ +.rule, hr { + clear: both; + margin: 15px 0; + height: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 1px solid #DDD; +} + +/* line 43, ../../../hub/static/css/mod/compare.scss */ +.commits-condensed { + margin-top: 15px; + border: 1px solid #DDD; + border-width: 1px 1px 0 1px; +} + +/* line 49, ../../../hub/static/css/mod/compare.scss */ +table { + border-collapse: collapse; + border-spacing: 0; + font-size: 100%; + font: inherit; +} + +/* line 56, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + position: absolute; + left: 51px; + top: 15px; +} + +/* line 69, ../../../hub/static/css/mod/compare.scss */ +.bubble { + padding: 3px; + background: #EEE; + border-radius: 3px; +} + +/* line 75, ../../../hub/static/css/mod/compare.scss */ +.new-comments .bubble .comment { + margin: 0; +} + +/* line 78, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment { + margin: 10px 0; + border: 1px solid #CACACA; +} + +/* line 83, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: #F8F8F8; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8',endColorstr='#e1e1e1')"; +} + +/* line 91, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment > .body { + position: relative; + padding: 0; + color: #333; + font-size: 12px; + background: #FBFBFB; +} + +/* line 99, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble { + margin: 20px 0; + padding-left: 60px; + position: relative; +} + +/* line 105, ../../../hub/static/css/mod/compare.scss */ +.avatar-bubble > .avatar { + position: relative; + float: left; + margin-left: -60px; +} + +/* line 111, ../../../hub/static/css/mod/compare.scss */ +.comment .content-body { + padding: 10px; + font-size: 13px; +} + +/* line 116, ../../../hub/static/css/mod/compare.scss */ +.markdown-body { + font-size: 14px; + line-height: 1.6; +} + +/* line 121, ../../../hub/static/css/mod/compare.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body li, .markdown-body table, .markdown-body pre { + margin: 15px 0; +} + +/* line 125, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta p.author { + margin: 0; + float: left; + max-width: 600px; + font-size: 12px; + height: 33px; + line-height: 33px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* line 138, ../../../hub/static/css/mod/compare.scss */ +.new-comments .comment .cmeta p.info { + float: right; + margin: 0; + font-size: 11px; + height: 33px; + line-height: 33px; +} + +/* line 145, ../../../hub/static/css/mod/compare.scss */ +a.commit-ref:hover { + text-shadow: -1px -1px 0 #04284B; + background: #74A4D4; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#74a4d4',endColorstr='#2a5177')"; + text-decoration: none; +} + +/* line 152, ../../../hub/static/css/mod/compare.scss */ +#compare h2 { + font-size: 20px; +} + +/* line 156, ../../../hub/static/css/mod/compare.scss */ +.commit-preview { + margin: 10px 0 0 0; + font-size: 11px; +} + +/* line 161, ../../../hub/static/css/mod/compare.scss */ +form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 166, ../../../hub/static/css/mod/compare.scss */ +.commit-preview > p { + margin: 16px 0; + font-size: 14px; + text-align: center; +} + +/* compare-popup related styles copied from hub.css */ +/* line 173, ../../../hub/static/css/mod/compare.scss */ +.mini-icon-remove-close::before { + content: ""; +} + +/* line 174, ../../../hub/static/css/mod/compare.scss */ +#compare-popup { + position: absolute; + top: 159px; + left: 407px; + z-index: 100; +} + +/* line 180, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .popup { + position: relative; + border-radius: 5px; + box-shadow: 0 0 18px rgba(0, 0, 0, 0.4); +} + +/* line 181, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .content { + width: 425px; + color: #333; + font-size: 12px; + padding: 10px; + border-radius: 4px; + background: white; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='white',endColorstr='#f4f9fb')"; +} + +/* line 182, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .form-actions { + margin: 10px 0 0; + background-color: #fff; + text-align: right; +} + +/* line 183, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .close { + position: absolute; + top: 4px; + right: 5px; + padding: 2px; +} + +/* line 184, ../../../hub/static/css/mod/compare.scss */ +#compare-popup .close .mini-icon-remove-close { + line-height: 16px; + height: 16px; + color: #CCC; +} + +/* line 185, ../../../hub/static/css/mod/compare.scss */ +#compare-popup input[type="text"] { + width: 96%; + padding: 5px 5px; + font-size: 12px; +} diff --git a/dist/css/mod/contribution.css b/dist/css/mod/contribution.css new file mode 100644 index 0000000..aa7cc57 --- /dev/null +++ b/dist/css/mod/contribution.css @@ -0,0 +1,30 @@ +/* line 1, ../../../hub/static/css/mod/contribution.scss */ +h3.conversation-list-heading { + margin: 25px 0 10px 0; + height: 0; + text-align: center; + font-size: 16px; + font-weight: normal; + color: #999999; + border-bottom: 1px solid #ddd; +} + +/* line 2, ../../../hub/static/css/mod/contribution.scss */ +h3.conversation-list-heading .inner { + display: inline-block; + position: relative; + top: -10px; + padding: 0 5px; + background: #fff; +} + +/* line 3, ../../../hub/static/css/mod/contribution.scss */ +h3.conversation-list-heading strong { + font-weight: bold; + color: #333333; +} + +/* line 4, ../../../hub/static/css/mod/contribution.scss */ +.simple-conversation-list > li .title .project-info { + color: #999999; +} diff --git a/dist/css/mod/diff-base.css b/dist/css/mod/diff-base.css new file mode 100644 index 0000000..120dc3d --- /dev/null +++ b/dist/css/mod/diff-base.css @@ -0,0 +1,116 @@ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} diff --git a/dist/css/mod/diff-stat.css b/dist/css/mod/diff-stat.css new file mode 100644 index 0000000..49c3c7e --- /dev/null +++ b/dist/css/mod/diff-stat.css @@ -0,0 +1,84 @@ +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} diff --git a/dist/css/mod/diffs-pane.css b/dist/css/mod/diffs-pane.css new file mode 100644 index 0000000..5300655 --- /dev/null +++ b/dist/css/mod/diffs-pane.css @@ -0,0 +1,119 @@ +/* line 1, ../../../hub/static/css/mod/diff-stat.scss */ +#toc li { + border-bottom: 1px solid #DDD; + list-style-type: none; + padding: 5px; +} + +/* line 7, ../../../hub/static/css/mod/diff-stat.scss */ +#toc { + margin: 15px 0; +} + +/* line 11, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .diffstat { + float: right; +} + +/* line 14, ../../../hub/static/css/mod/diff-stat.scss */ +#toc .mini-icon-modified { + color: #677A85; +} + +/* line 18, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 26, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 30, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 48, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 53, ../../../hub/static/css/mod/diff-stat.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 59, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain { + font-size: 12px; + color: #666; + margin: 1em 0; +} + +/* line 65, ../../../hub/static/css/mod/diff-stat.scss */ +p.explain .minibutton { + float: right; + top: -4px; +} + +/* line 3, ../../../hub/static/css/mod/diffs-pane.scss */ +.diff-cutoff { + margin-bottom: -2px; + height: 35px; + line-height: 37px; + font-size: 12px; + font-weight: bold; + color: #000; + text-align: center; + background: url("/static/img/compare_too_big.gif") 0 0 no-repeat; +} + +/* line 5, ../../../hub/static/css/mod/diffs-pane.scss */ +.fullscreen-mode { + overflow: hidden; +} + +/* line 6, ../../../hub/static/css/mod/diffs-pane.scss */ +#fullscreen-stage { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow-y: auto; + background: #fff; + z-index: 9999; +} + +/* line 7, ../../../hub/static/css/mod/diffs-pane.scss */ +#files #fullscreen-stage .file { + margin: 0; +} diff --git a/dist/css/mod/docs-nav.css b/dist/css/mod/docs-nav.css new file mode 100644 index 0000000..fe1abd7 --- /dev/null +++ b/dist/css/mod/docs-nav.css @@ -0,0 +1,61 @@ +/* line 1, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav { + clear: both; + font-size: 120%; + margin: 15px 0 25px; + color: #34833E; + padding: 4px 0 6px 0; +} + +/* line 2, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav a { + color: #34833E; + text-indent: 5px; +} + +/* line 3, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav table { + width: 100%; +} + +/* line 4, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav table td { + vertical-align: top; +} + +/* line 5, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav .bigger::before { + font-size: 160%; + vertical-align: bottom; + line-height: 16px; +} + +/* line 6, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav .biggest::before { + font-size: 200%; + vertical-align: bottom; + line-height: 10px; +} + +/* line 7, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav .search::before { + font-size: 130%; + vertical-align: bottom; + line-height: 13px; +} + +/* line 9, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav tr.first td { + width: 33%; + padding: 0 6px 0px 6px; +} + +/* line 10, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav tr.second td { + padding-top: 9px; +} + +/* line 12, ../../../hub/static/css/mod/docs-nav.scss */ +.docsnav { + border-bottom: 1px solid #CCC; +} diff --git a/dist/css/mod/docs-page.css b/dist/css/mod/docs-page.css new file mode 100644 index 0000000..5d25d80 --- /dev/null +++ b/dist/css/mod/docs-page.css @@ -0,0 +1,21 @@ +/* line 1, ../../../hub/static/css/mod/docs-page.scss */ +.pages_doc { + border-radius: 5px; + border: 2px solid #394249; + float: right; + padding: 5px; + margin: 5px 0 3px 15px; + font-weight: bold; + color: #fbfbf9; + font-size: 110%; + height: 35px; + width: 280px; + background: #739890 url("/static/img/smokinggal.jpg") no-repeat scroll 25px -175px; +} + +/* line 8, ../../../hub/static/css/mod/docs-page.scss */ +.pages_doc a { + font-weight: bold; + color: #435159; + text-shadow: -1px +0px 7px #f9f0e2; +} diff --git a/dist/css/mod/drop-down-list.css b/dist/css/mod/drop-down-list.css new file mode 100644 index 0000000..035fd88 --- /dev/null +++ b/dist/css/mod/drop-down-list.css @@ -0,0 +1,48 @@ +/* line 1, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu { + display: none; + position: absolute; + top: 35px; + width: 218px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 10, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.intro { + padding: 7px; + color: #666666; +} + +/* line 14, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666666; +} + +/* line 19, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li.active { + background: #4183C4; + color: white; +} + +/* line 23, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 30, ../../../hub/static/css/mod/drop-down-list.scss */ +.add-item-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; + border-radius: 3px; +} diff --git a/dist/css/mod/email.css b/dist/css/mod/email.css new file mode 100644 index 0000000..e7969ba --- /dev/null +++ b/dist/css/mod/email.css @@ -0,0 +1,15 @@ +/* line 1, ../../../hub/static/css/mod/email.scss */ +span.email-actions { + float: right; +} + +/* line 2, ../../../hub/static/css/mod/email.scss */ +.new-email-form input#email { + padding: 6px; + margin: 2px 2px 2px 0px; +} + +/* line 3, ../../../hub/static/css/mod/email.scss */ +.new-email-form dd { + margin-left: 0px; +} diff --git a/dist/css/mod/emoji-hint.css b/dist/css/mod/emoji-hint.css new file mode 100644 index 0000000..87b67b5 --- /dev/null +++ b/dist/css/mod/emoji-hint.css @@ -0,0 +1,23 @@ +/* line 2, ../../../hub/static/css/mod/emoji-hint.scss */ +#show-emoji-hint { + float: right; +} + +/* line 6, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint { + z-inde: 1000; + position: absolute; + top: 180px; + left: 300px; + width: 630px; + height: 550px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +/* line 17, ../../../hub/static/css/mod/emoji-hint.scss */ +.emoji-hint #close { + position: absolute; + top: 10px; + right: 10px; +} diff --git a/dist/css/mod/emoji.css b/dist/css/mod/emoji.css new file mode 100644 index 0000000..94e6a7e --- /dev/null +++ b/dist/css/mod/emoji.css @@ -0,0 +1,3773 @@ +/* line 1, ../../../hub/static/css/mod/emoji.scss */ +.emoji { + background: url("/static/img/iphone_emoji.png") top left no-repeat; + width: 20px; + height: 20px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + zoom: 1; + *display: inline; +} + +/* line 2, ../../../hub/static/css/mod/emoji.scss */ +.emoji2600 { + background-position: 0px -260px; +} + +/* line 3, ../../../hub/static/css/mod/emoji.scss */ +.emoji2601 { + background-position: 0px -20px; +} + +/* line 4, ../../../hub/static/css/mod/emoji.scss */ +.emoji2614 { + background-position: 0px -40px; +} + +/* line 5, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c4 { + background-position: 0px -60px; +} + +/* line 6, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a1 { + background-position: 0px -80px; +} + +/* line 7, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f300 { + background-position: 0px -100px; +} + +/* line 8, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f301 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 9, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f302 { + background-position: 0px -120px; +} + +/* line 10, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f303 { + background-position: 0px -920px; +} + +/* line 11, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f304 { + background-position: 0px -160px; +} + +/* line 12, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f305 { + background-position: 0px -180px; +} + +/* line 13, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f306 { + background-position: 0px -200px; +} + +/* line 14, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f307 { + background-position: 0px -220px; +} + +/* line 15, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f308 { + background-position: 0px -240px; +} + +/* line 16, ../../../hub/static/css/mod/emoji.scss */ +.emoji2744 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 17, ../../../hub/static/css/mod/emoji.scss */ +.emoji26c5 { + background-position: 0px -260px; +} + +/* line 18, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f309 { + background-position: 0px -920px; +} + +/* line 19, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30a { + background-position: 0px -900px; +} + +/* line 20, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 21, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30c { + background-position: 0px -920px; +} + +/* line 22, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f30f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 23, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f311 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 24, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f314 { + background-position: 0px -360px; +} + +/* line 25, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f313 { + background-position: 0px -360px; +} + +/* line 26, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f319 { + background-position: 0px -360px; +} + +/* line 27, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f315 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 28, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31b { + background-position: 0px -360px; +} + +/* line 29, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f31f { + background-position: 0px -10740px; +} + +/* line 30, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f320 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 31, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f550 { + background-position: 0px -380px; +} + +/* line 32, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f551 { + background-position: 0px -400px; +} + +/* line 33, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f552 { + background-position: 0px -420px; +} + +/* line 34, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f553 { + background-position: 0px -440px; +} + +/* line 35, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f554 { + background-position: 0px -460px; +} + +/* line 36, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f555 { + background-position: 0px -480px; +} + +/* line 37, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f556 { + background-position: 0px -500px; +} + +/* line 38, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f557 { + background-position: 0px -520px; +} + +/* line 39, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f558 { + background-position: 0px -540px; +} + +/* line 40, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f559 { + background-position: 0px -620px; +} + +/* line 41, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55a { + background-position: 0px -580px; +} + +/* line 42, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f55b { + background-position: 0px -600px; +} + +/* line 43, ../../../hub/static/css/mod/emoji.scss */ +.emoji231a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 44, ../../../hub/static/css/mod/emoji.scss */ +.emoji231b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 45, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f0 { + background-position: 0px -620px; +} + +/* line 46, ../../../hub/static/css/mod/emoji.scss */ +.emoji23f3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 47, ../../../hub/static/css/mod/emoji.scss */ +.emoji2648 { + background-position: 0px -640px; +} + +/* line 48, ../../../hub/static/css/mod/emoji.scss */ +.emoji2649 { + background-position: 0px -660px; +} + +/* line 49, ../../../hub/static/css/mod/emoji.scss */ +.emoji264a { + background-position: 0px -680px; +} + +/* line 50, ../../../hub/static/css/mod/emoji.scss */ +.emoji264b { + background-position: 0px -700px; +} + +/* line 51, ../../../hub/static/css/mod/emoji.scss */ +.emoji264c { + background-position: 0px -720px; +} + +/* line 52, ../../../hub/static/css/mod/emoji.scss */ +.emoji264d { + background-position: 0px -740px; +} + +/* line 53, ../../../hub/static/css/mod/emoji.scss */ +.emoji264e { + background-position: 0px -760px; +} + +/* line 54, ../../../hub/static/css/mod/emoji.scss */ +.emoji264f { + background-position: 0px -780px; +} + +/* line 55, ../../../hub/static/css/mod/emoji.scss */ +.emoji2650 { + background-position: 0px -800px; +} + +/* line 56, ../../../hub/static/css/mod/emoji.scss */ +.emoji2651 { + background-position: 0px -820px; +} + +/* line 57, ../../../hub/static/css/mod/emoji.scss */ +.emoji2652 { + background-position: 0px -840px; +} + +/* line 58, ../../../hub/static/css/mod/emoji.scss */ +.emoji2653 { + background-position: 0px -860px; +} + +/* line 59, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ce { + background-position: 0px -880px; +} + +/* line 60, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f340 { + background-position: 0px -1220px; +} + +/* line 61, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f337 { + background-position: 0px -960px; +} + +/* line 62, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f331 { + background-position: 0px -1220px; +} + +/* line 63, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f341 { + background-position: 0px -1000px; +} + +/* line 64, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f338 { + background-position: 0px -1020px; +} + +/* line 65, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f339 { + background-position: 0px -1040px; +} + +/* line 66, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f342 { + background-position: 0px -1060px; +} + +/* line 67, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f343 { + background-position: 0px -1080px; +} + +/* line 68, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33a { + background-position: 0px -1100px; +} + +/* line 69, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33b { + background-position: 0px -1200px; +} + +/* line 70, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f334 { + background-position: 0px -1140px; +} + +/* line 71, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f335 { + background-position: 0px -1160px; +} + +/* line 72, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33e { + background-position: 0px -1180px; +} + +/* line 73, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 74, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f344 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 75, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f330 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 76, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33c { + background-position: 0px -1200px; +} + +/* line 77, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f33f { + background-position: 0px -1220px; +} + +/* line 78, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f352 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 79, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 80, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34e { + background-position: 0px -1360px; +} + +/* line 81, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34a { + background-position: 0px -1260px; +} + +/* line 82, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f353 { + background-position: 0px -1280px; +} + +/* line 83, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f349 { + background-position: 0px -1300px; +} + +/* line 84, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f345 { + background-position: 0px -1320px; +} + +/* line 85, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f346 { + background-position: 0px -1340px; +} + +/* line 86, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f348 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 87, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 88, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f347 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 89, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f351 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 90, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f34f { + background-position: 0px -1360px; +} + +/* line 91, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f440 { + background-position: 0px -1380px; +} + +/* line 92, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f442 { + background-position: 0px -1400px; +} + +/* line 93, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f443 { + background-position: 0px -1420px; +} + +/* line 94, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f444 { + background-position: 0px -1440px; +} + +/* line 95, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f445 { + background-position: 0px -3000px; +} + +/* line 96, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f484 { + background-position: 0px -1480px; +} + +/* line 97, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f485 { + background-position: 0px -1500px; +} + +/* line 98, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f486 { + background-position: 0px -1520px; +} + +/* line 99, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f487 { + background-position: 0px -1540px; +} + +/* line 100, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f488 { + background-position: 0px -1560px; +} + +/* line 101, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f464 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 102, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f466 { + background-position: 0px -1580px; +} + +/* line 103, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f467 { + background-position: 0px -1600px; +} + +/* line 104, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f468 { + background-position: 0px -1620px; +} + +/* line 105, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f469 { + background-position: 0px -1640px; +} + +/* line 106, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 107, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46b { + background-position: 0px -1660px; +} + +/* line 108, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46e { + background-position: 0px -1680px; +} + +/* line 109, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f46f { + background-position: 0px -1700px; +} + +/* line 110, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f470 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 111, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f471 { + background-position: 0px -1720px; +} + +/* line 112, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f472 { + background-position: 0px -1740px; +} + +/* line 113, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f473 { + background-position: 0px -1760px; +} + +/* line 114, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f474 { + background-position: 0px -1780px; +} + +/* line 115, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f475 { + background-position: 0px -1800px; +} + +/* line 116, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f476 { + background-position: 0px -1820px; +} + +/* line 117, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f477 { + background-position: 0px -1840px; +} + +/* line 118, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f478 { + background-position: 0px -1860px; +} + +/* line 119, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f479 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 120, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 121, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47b { + background-position: 0px -1880px; +} + +/* line 122, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47c { + background-position: 0px -1900px; +} + +/* line 123, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47d { + background-position: 0px -1920px; +} + +/* line 124, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47e { + background-position: 0px -1940px; +} + +/* line 125, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f47f { + background-position: 0px -1960px; +} + +/* line 126, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f480 { + background-position: 0px -1980px; +} + +/* line 127, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f481 { + background-position: 0px -2000px; +} + +/* line 128, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f482 { + background-position: 0px -2020px; +} + +/* line 129, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f483 { + background-position: 0px -2040px; +} + +/* line 130, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 131, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40d { + background-position: 0px -2620px; +} + +/* line 132, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f40e { + background-position: 0px -6680px; +} + +/* line 133, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f414 { + background-position: 0px -2640px; +} + +/* line 134, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f417 { + background-position: 0px -2660px; +} + +/* line 135, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42b { + background-position: 0px -2680px; +} + +/* line 136, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f418 { + background-position: 0px -2480px; +} + +/* line 137, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f428 { + background-position: 0px -2500px; +} + +/* line 138, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f412 { + background-position: 0px -2520px; +} + +/* line 139, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f411 { + background-position: 0px -2540px; +} + +/* line 140, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f419 { + background-position: 0px -2340px; +} + +/* line 141, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41a { + background-position: 0px -2360px; +} + +/* line 142, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41b { + background-position: 0px -2460px; +} + +/* line 143, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 144, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 145, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 146, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f420 { + background-position: 0px -2420px; +} + +/* line 147, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f421 { + background-position: 0px -7360px; +} + +/* line 148, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f422 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 149, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f424 { + background-position: 0px -2140px; +} + +/* line 150, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f425 { + background-position: 0px -2140px; +} + +/* line 151, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f426 { + background-position: 0px -2400px; +} + +/* line 152, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f423 { + background-position: 0px -2140px; +} + +/* line 153, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f427 { + background-position: 0px -2160px; +} + +/* line 154, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f429 { + background-position: 0px -2720px; +} + +/* line 155, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f41f { + background-position: 0px -7360px; +} + +/* line 156, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42c { + background-position: 0px -2380px; +} + +/* line 157, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42d { + background-position: 0px -2280px; +} + +/* line 158, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42f { + background-position: 0px -2240px; +} + +/* line 159, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f431 { + background-position: 0px -2080px; +} + +/* line 160, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f433 { + background-position: 0px -2300px; +} + +/* line 161, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f434 { + background-position: 0px -2200px; +} + +/* line 162, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f435 { + background-position: 0px -2320px; +} + +/* line 163, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f436 { + background-position: 0px -2720px; +} + +/* line 164, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f437 { + background-position: 0px -2780px; +} + +/* line 165, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43b { + background-position: 0px -2260px; +} + +/* line 166, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f439 { + background-position: 0px -2440px; +} + +/* line 167, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43a { + background-position: 0px -2560px; +} + +/* line 168, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f42e { + background-position: 0px -2580px; +} + +/* line 169, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f430 { + background-position: 0px -2600px; +} + +/* line 170, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f438 { + background-position: 0px -2700px; +} + +/* line 171, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43e { + background-position: 0px -6460px; +} + +/* line 172, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f432 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 173, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 174, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f43d { + background-position: 0px -2780px; +} + +/* line 175, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f620 { + background-position: 0px -2800px; +} + +/* line 176, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f629 { + background-position: 0px -3860px; +} + +/* line 177, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f632 { + background-position: 0px -2840px; +} + +/* line 178, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61e { + background-position: 0px -2860px; +} + +/* line 179, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f635 { + background-position: 0px -3540px; +} + +/* line 180, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f630 { + background-position: 0px -2900px; +} + +/* line 181, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f612 { + background-position: 0px -2920px; +} + +/* line 182, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60d { + background-position: 0px -3660px; +} + +/* line 183, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f624 { + background-position: 0px -3720px; +} + +/* line 184, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61c { + background-position: 0px -2980px; +} + +/* line 185, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61d { + background-position: 0px -3000px; +} + +/* line 186, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60b { + background-position: 0px -3220px; +} + +/* line 187, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f618 { + background-position: 0px -3640px; +} + +/* line 188, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f61a { + background-position: 0px -3060px; +} + +/* line 189, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f637 { + background-position: 0px -3080px; +} + +/* line 190, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f633 { + background-position: 0px -3100px; +} + +/* line 191, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f603 { + background-position: 0px -3580px; +} + +/* line 192, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f605 { + background-position: 0px -3260px; +} + +/* line 193, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f606 { + background-position: 0px -3380px; +} + +/* line 194, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f601 { + background-position: 0px -3720px; +} + +/* line 195, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f602 { + background-position: 0px -3620px; +} + +/* line 196, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60a { + background-position: 0px -3220px; +} + +/* line 197, ../../../hub/static/css/mod/emoji.scss */ +.emoji263a { + background-position: 0px -3240px; +} + +/* line 198, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f604 { + background-position: 0px -3260px; +} + +/* line 199, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f622 { + background-position: 0px -3680px; +} + +/* line 200, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62d { + background-position: 0px -3300px; +} + +/* line 201, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f628 { + background-position: 0px -3320px; +} + +/* line 202, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f623 { + background-position: 0px -3540px; +} + +/* line 203, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f621 { + background-position: 0px -3880px; +} + +/* line 204, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60c { + background-position: 0px -3380px; +} + +/* line 205, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f616 { + background-position: 0px -10520px; +} + +/* line 206, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f614 { + background-position: 0px -3860px; +} + +/* line 207, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f631 { + background-position: 0px -3440px; +} + +/* line 208, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62a { + background-position: 0px -3460px; +} + +/* line 209, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f60f { + background-position: 0px -3480px; +} + +/* line 210, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f613 { + background-position: 0px -3500px; +} + +/* line 211, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f625 { + background-position: 0px -3520px; +} + +/* line 212, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f62b { + background-position: 0px -3540px; +} + +/* line 213, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f609 { + background-position: 0px -3560px; +} + +/* line 214, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63a { + background-position: 0px -3580px; +} + +/* line 215, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f638 { + background-position: 0px -3720px; +} + +/* line 216, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f639 { + background-position: 0px -3620px; +} + +/* line 217, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63d { + background-position: 0px -3640px; +} + +/* line 218, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63b { + background-position: 0px -3660px; +} + +/* line 219, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63f { + background-position: 0px -3680px; +} + +/* line 220, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63e { + background-position: 0px -3880px; +} + +/* line 221, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f63c { + background-position: 0px -3720px; +} + +/* line 222, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f640 { + background-position: 0px -3860px; +} + +/* line 223, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f645 { + background-position: 0px -3760px; +} + +/* line 224, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f646 { + background-position: 0px -3780px; +} + +/* line 225, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f647 { + background-position: 0px -3800px; +} + +/* line 226, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f648 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 227, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 228, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f649 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 229, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64b { + background-position: 0px -11240px; +} + +/* line 230, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64c { + background-position: 0px -3840px; +} + +/* line 231, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64d { + background-position: 0px -3860px; +} + +/* line 232, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64e { + background-position: 0px -3880px; +} + +/* line 233, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f64f { + background-position: 0px -3900px; +} + +/* line 234, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e0 { + background-position: 0px -3940px; +} + +/* line 235, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e1 { + background-position: 0px -3940px; +} + +/* line 236, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e2 { + background-position: 0px -3960px; +} + +/* line 237, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e3 { + background-position: 0px -3980px; +} + +/* line 238, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e5 { + background-position: 0px -4000px; +} + +/* line 239, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e6 { + background-position: 0px -4020px; +} + +/* line 240, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e7 { + background-position: 0px -4040px; +} + +/* line 241, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e8 { + background-position: 0px -4060px; +} + +/* line 242, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3e9 { + background-position: 0px -4080px; +} + +/* line 243, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ea { + background-position: 0px -4100px; +} + +/* line 244, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3eb { + background-position: 0px -4120px; +} + +/* line 245, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ea { + background-position: 0px -4140px; +} + +/* line 246, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f2 { + background-position: 0px -4160px; +} + +/* line 247, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ec { + background-position: 0px -4180px; +} + +/* line 248, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ef { + background-position: 0px -4200px; +} + +/* line 249, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3f0 { + background-position: 0px -4220px; +} + +/* line 250, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ed { + background-position: 0px -4240px; +} + +/* line 251, ../../../hub/static/css/mod/emoji.scss */ +.emoji2693 { + background-position: 0px -6920px; +} + +/* line 252, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ee { + background-position: 0px -8800px; +} + +/* line 253, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fb { + background-position: 0px -4300px; +} + +/* line 254, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fc { + background-position: 0px -4320px; +} + +/* line 255, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fd { + background-position: 0px -4340px; +} + +/* line 256, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5fe { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 257, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f5ff { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 258, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45e { + background-position: 0px -4400px; +} + +/* line 259, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45f { + background-position: 0px -4400px; +} + +/* line 260, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f460 { + background-position: 0px -4420px; +} + +/* line 261, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f461 { + background-position: 0px -4440px; +} + +/* line 262, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f462 { + background-position: 0px -4460px; +} + +/* line 263, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f463 { + background-position: 0px -6460px; +} + +/* line 264, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f453 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 265, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f455 { + background-position: 0px -4620px; +} + +/* line 266, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f456 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 267, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f451 { + background-position: 0px -4500px; +} + +/* line 268, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f454 { + background-position: 0px -4520px; +} + +/* line 269, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f452 { + background-position: 0px -4540px; +} + +/* line 270, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f457 { + background-position: 0px -4560px; +} + +/* line 271, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f458 { + background-position: 0px -4580px; +} + +/* line 272, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f459 { + background-position: 0px -4600px; +} + +/* line 273, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45a { + background-position: 0px -4620px; +} + +/* line 274, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 275, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45c { + background-position: 0px -4960px; +} + +/* line 276, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f45d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 277, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b0 { + background-position: 0px -4720px; +} + +/* line 278, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b1 { + background-position: 0px -4660px; +} + +/* line 279, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b9 { + background-position: 0px -6380px; +} + +/* line 280, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b2 { + background-position: 0px -4720px; +} + +/* line 281, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 282, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 283, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b5 { + background-position: 0px -4720px; +} + +/* line 284, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4b8 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 285, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e81f1f3 { + background-position: 0px -4740px; +} + +/* line 286, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1e91f1ea { + background-position: 0px -4760px; +} + +/* line 287, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ea1f1f8 { + background-position: 0px -4780px; +} + +/* line 288, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1eb1f1f7 { + background-position: 0px -4800px; +} + +/* line 289, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ec1f1e7 { + background-position: 0px -4820px; +} + +/* line 290, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ee1f1f9 { + background-position: 0px -4840px; +} + +/* line 291, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1ef1f1f5 { + background-position: 0px -4860px; +} + +/* line 292, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f01f1f7 { + background-position: 0px -4880px; +} + +/* line 293, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1f71f1fa { + background-position: 0px -4900px; +} + +/* line 294, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f1fa1f1f8 { + background-position: 0px -4920px; +} + +/* line 295, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f525 { + background-position: 0px -5040px; +} + +/* line 296, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f526 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 297, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f527 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 298, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f528 { + background-position: 0px -4360px; +} + +/* line 299, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f529 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 300, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 301, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52b { + background-position: 0px -5020px; +} + +/* line 302, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52e { + background-position: 0px -5080px; +} + +/* line 303, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f52f { + background-position: 0px -5080px; +} + +/* line 304, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f530 { + background-position: 0px -9660px; +} + +/* line 305, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f531 { + background-position: 0px -9680px; +} + +/* line 306, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f489 { + background-position: 0px -5300px; +} + +/* line 307, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48a { + background-position: 0px -5320px; +} + +/* line 308, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f170 { + background-position: 0px -5340px; +} + +/* line 309, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f171 { + background-position: 0px -5360px; +} + +/* line 310, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f18e { + background-position: 0px -5380px; +} + +/* line 311, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17e { + background-position: 0px -5400px; +} + +/* line 312, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f380 { + background-position: 0px -5420px; +} + +/* line 313, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f381 { + background-position: 0px -6080px; +} + +/* line 314, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f382 { + background-position: 0px -5460px; +} + +/* line 315, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f384 { + background-position: 0px -5480px; +} + +/* line 316, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f385 { + background-position: 0px -5500px; +} + +/* line 317, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38c { + background-position: 0px -5520px; +} + +/* line 318, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f386 { + background-position: 0px -5540px; +} + +/* line 319, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f388 { + background-position: 0px -5560px; +} + +/* line 320, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f389 { + background-position: 0px -5580px; +} + +/* line 321, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38d { + background-position: 0px -5600px; +} + +/* line 322, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38e { + background-position: 0px -5620px; +} + +/* line 323, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f393 { + background-position: 0px -5640px; +} + +/* line 324, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f392 { + background-position: 0px -5660px; +} + +/* line 325, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38f { + background-position: 0px -5680px; +} + +/* line 326, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f387 { + background-position: 0px -5700px; +} + +/* line 327, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f390 { + background-position: 0px -5720px; +} + +/* line 328, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f383 { + background-position: 0px -5740px; +} + +/* line 329, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 330, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f38b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 331, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f391 { + background-position: 0px -5760px; +} + +/* line 332, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4df { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 333, ../../../hub/static/css/mod/emoji.scss */ +.emoji260e { + background-position: 0px -5800px; +} + +/* line 334, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4de { + background-position: 0px -5800px; +} + +/* line 335, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f1 { + background-position: 0px -5820px; +} + +/* line 336, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f2 { + background-position: 0px -5840px; +} + +/* line 337, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dd { + background-position: 0px -6440px; +} + +/* line 338, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e0 { + background-position: 0px -5880px; +} + +/* line 339, ../../../hub/static/css/mod/emoji.scss */ +.emoji2709 { + background-position: 0px -11200px; +} + +/* line 340, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e8 { + background-position: 0px -11200px; +} + +/* line 341, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e9 { + background-position: 0px -11200px; +} + +/* line 342, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ea { + background-position: 0px -5980px; +} + +/* line 343, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4eb { + background-position: 0px -5980px; +} + +/* line 344, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ee { + background-position: 0px -6000px; +} + +/* line 345, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 346, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e2 { + background-position: 0px -6020px; +} + +/* line 347, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e3 { + background-position: 0px -6040px; +} + +/* line 348, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e1 { + background-position: 0px -6060px; +} + +/* line 349, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 350, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 351, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e6 { + background-position: 0px -6080px; +} + +/* line 352, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4e7 { + background-position: 0px -11200px; +} + +/* line 353, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f520 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 354, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f521 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 355, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f522 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 356, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f523 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 357, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f524 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 358, ../../../hub/static/css/mod/emoji.scss */ +.emoji2712 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 359, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ba { + background-position: 0px -6100px; +} + +/* line 360, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bb { + background-position: 0px -6120px; +} + +/* line 361, ../../../hub/static/css/mod/emoji.scss */ +.emoji270f { + background-position: 0px -6440px; +} + +/* line 362, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ce { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 363, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bc { + background-position: 0px -6160px; +} + +/* line 364, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bd { + background-position: 0px -6200px; +} + +/* line 365, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4be { + background-position: 0px -6200px; +} + +/* line 366, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4bf { + background-position: 0px -7800px; +} + +/* line 367, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c0 { + background-position: 0px -7820px; +} + +/* line 368, ../../../hub/static/css/mod/emoji.scss */ +.emoji2702 { + background-position: 0px -6220px; +} + +/* line 369, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 370, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c3 { + background-position: 0px -6440px; +} + +/* line 371, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c4 { + background-position: 0px -6440px; +} + +/* line 372, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 373, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c1 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 374, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 375, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d3 { + background-position: 0px -6420px; +} + +/* line 376, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d6 { + background-position: 0px -6420px; +} + +/* line 377, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d4 { + background-position: 0px -6420px; +} + +/* line 378, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d5 { + background-position: 0px -6420px; +} + +/* line 379, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d7 { + background-position: 0px -6420px; +} + +/* line 380, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d8 { + background-position: 0px -6420px; +} + +/* line 381, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d9 { + background-position: 0px -6420px; +} + +/* line 382, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4da { + background-position: 0px -6420px; +} + +/* line 383, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4db { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 384, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4dc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 385, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cb { + background-position: 0px -6440px; +} + +/* line 386, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c6 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 387, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ca { + background-position: 0px -6380px; +} + +/* line 388, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c8 { + background-position: 0px -6380px; +} + +/* line 389, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 390, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4c7 { + background-position: 0px -6420px; +} + +/* line 391, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cc { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 392, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d2 { + background-position: 0px -6420px; +} + +/* line 393, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 394, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 395, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4d1 { + background-position: 0px -6440px; +} + +/* line 396, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bd { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 397, ../../../hub/static/css/mod/emoji.scss */ +.emoji26be { + background-position: 0px -6480px; +} + +/* line 398, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f3 { + background-position: 0px -6500px; +} + +/* line 399, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3be { + background-position: 0px -6520px; +} + +/* line 400, ../../../hub/static/css/mod/emoji.scss */ +.emoji26bd { + background-position: 0px -6540px; +} + +/* line 401, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bf { + background-position: 0px -6560px; +} + +/* line 402, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c0 { + background-position: 0px -6580px; +} + +/* line 403, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c1 { + background-position: 0px -6600px; +} + +/* line 404, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 405, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c3 { + background-position: 0px -6620px; +} + +/* line 406, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c4 { + background-position: 0px -6640px; +} + +/* line 407, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c6 { + background-position: 0px -6660px; +} + +/* line 408, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3c8 { + background-position: 0px -6700px; +} + +/* line 409, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ca { + background-position: 0px -6720px; +} + +/* line 410, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f683 { + background-position: 0px -6740px; +} + +/* line 411, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f687 { + background-position: 0px -6780px; +} + +/* line 412, ../../../hub/static/css/mod/emoji.scss */ +.emoji24c2 { + background-position: 0px -6780px; +} + +/* line 413, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f684 { + background-position: 0px -6800px; +} + +/* line 414, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f685 { + background-position: 0px -6820px; +} + +/* line 415, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f697 { + background-position: 0px -6840px; +} + +/* line 416, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f699 { + background-position: 0px -6860px; +} + +/* line 417, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68c { + background-position: 0px -6880px; +} + +/* line 418, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f68f { + background-position: 0px -6900px; +} + +/* line 419, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a2 { + background-position: 0px -6920px; +} + +/* line 420, ../../../hub/static/css/mod/emoji.scss */ +.emoji2708 { + background-position: 0px -6940px; +} + +/* line 421, ../../../hub/static/css/mod/emoji.scss */ +.emoji26f5 { + background-position: 0px -6960px; +} + +/* line 422, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f689 { + background-position: 0px -7000px; +} + +/* line 423, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f680 { + background-position: 0px -7020px; +} + +/* line 424, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a4 { + background-position: 0px -7040px; +} + +/* line 425, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f695 { + background-position: 0px -7060px; +} + +/* line 426, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f69a { + background-position: 0px -7100px; +} + +/* line 427, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f692 { + background-position: 0px -7120px; +} + +/* line 428, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f691 { + background-position: 0px -7140px; +} + +/* line 429, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f693 { + background-position: 0px -7260px; +} + +/* line 430, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fd { + background-position: 0px -7180px; +} + +/* line 431, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f17f { + background-position: 0px -7200px; +} + +/* line 432, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a5 { + background-position: 0px -7220px; +} + +/* line 433, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a7 { + background-position: 0px -9720px; +} + +/* line 434, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a8 { + background-position: 0px -7260px; +} + +/* line 435, ../../../hub/static/css/mod/emoji.scss */ +.emoji2668 { + background-position: 0px -7280px; +} + +/* line 436, ../../../hub/static/css/mod/emoji.scss */ +.emoji26fa { + background-position: 0px -7300px; +} + +/* line 437, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 438, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a1 { + background-position: 0px -7320px; +} + +/* line 439, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a2 { + background-position: 0px -7340px; +} + +/* line 440, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a3 { + background-position: 0px -7360px; +} + +/* line 441, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a4 { + background-position: 0px -7380px; +} + +/* line 442, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a5 { + background-position: 0px -7400px; +} + +/* line 443, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a6 { + background-position: 0px -7420px; +} + +/* line 444, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a7 { + background-position: 0px -7440px; +} + +/* line 445, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a8 { + background-position: 0px -7460px; +} + +/* line 446, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3a9 { + background-position: 0px -7540px; +} + +/* line 447, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 448, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ab { + background-position: 0px -7500px; +} + +/* line 449, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ac { + background-position: 0px -7520px; +} + +/* line 450, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ad { + background-position: 0px -7540px; +} + +/* line 451, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 452, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f004 { + background-position: 0px -7560px; +} + +/* line 453, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3af { + background-position: 0px -7580px; +} + +/* line 454, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b0 { + background-position: 0px -7600px; +} + +/* line 455, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b1 { + background-position: 0px -7620px; +} + +/* line 456, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b2 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 457, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b3 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 458, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b4 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 459, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f0cf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 460, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b5 { + background-position: 0px -7640px; +} + +/* line 461, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b6 { + background-position: 0px -7740px; +} + +/* line 462, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b7 { + background-position: 0px -7680px; +} + +/* line 463, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b8 { + background-position: 0px -7700px; +} + +/* line 464, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3b9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 465, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3ba { + background-position: 0px -7720px; +} + +/* line 466, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 467, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f3bc { + background-position: 0px -7740px; +} + +/* line 468, ../../../hub/static/css/mod/emoji.scss */ +.emoji303d { + background-position: 0px -7760px; +} + +/* line 469, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f7 { + background-position: 0px -4940px; +} + +/* line 470, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f9 { + background-position: 0px -7400px; +} + +/* line 471, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fa { + background-position: 0px -7780px; +} + +/* line 472, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fb { + background-position: 0px -7840px; +} + +/* line 473, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4fc { + background-position: 0px -7860px; +} + +/* line 474, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48b { + background-position: 0px -7900px; +} + +/* line 475, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48c { + background-position: 0px -11200px; +} + +/* line 476, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48d { + background-position: 0px -7940px; +} + +/* line 477, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48e { + background-position: 0px -7960px; +} + +/* line 478, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f48f { + background-position: 0px -7980px; +} + +/* line 479, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f490 { + background-position: 0px -8000px; +} + +/* line 480, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f491 { + background-position: 0px -8020px; +} + +/* line 481, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f492 { + background-position: 0px -8040px; +} + +/* line 482, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51e { + background-position: 0px -9860px; +} + +/* line 483, ../../../hub/static/css/mod/emoji.scss */ +.emojia9 { + background-position: 0px -9900px; +} + +/* line 484, ../../../hub/static/css/mod/emoji.scss */ +.emojiae { + background-position: 0px -9920px; +} + +/* line 485, ../../../hub/static/css/mod/emoji.scss */ +.emoji2122 { + background-position: 0px -9940px; +} + +/* line 486, ../../../hub/static/css/mod/emoji.scss */ +.emoji2139 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 487, ../../../hub/static/css/mod/emoji.scss */ +.emoji2320e3 { + background-position: 0px -8060px; +} + +/* line 488, ../../../hub/static/css/mod/emoji.scss */ +.emoji3120e3 { + background-position: 0px -8080px; +} + +/* line 489, ../../../hub/static/css/mod/emoji.scss */ +.emoji3220e3 { + background-position: 0px -8100px; +} + +/* line 490, ../../../hub/static/css/mod/emoji.scss */ +.emoji3320e3 { + background-position: 0px -8120px; +} + +/* line 491, ../../../hub/static/css/mod/emoji.scss */ +.emoji3420e3 { + background-position: 0px -8140px; +} + +/* line 492, ../../../hub/static/css/mod/emoji.scss */ +.emoji3520e3 { + background-position: 0px -8160px; +} + +/* line 493, ../../../hub/static/css/mod/emoji.scss */ +.emoji3620e3 { + background-position: 0px -8180px; +} + +/* line 494, ../../../hub/static/css/mod/emoji.scss */ +.emoji3720e3 { + background-position: 0px -8200px; +} + +/* line 495, ../../../hub/static/css/mod/emoji.scss */ +.emoji3820e3 { + background-position: 0px -8220px; +} + +/* line 496, ../../../hub/static/css/mod/emoji.scss */ +.emoji3920e3 { + background-position: 0px -8240px; +} + +/* line 497, ../../../hub/static/css/mod/emoji.scss */ +.emoji3020e3 { + background-position: 0px -8260px; +} + +/* line 498, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 499, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f6 { + background-position: 0px -8280px; +} + +/* line 500, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f3 { + background-position: 0px -8300px; +} + +/* line 501, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4f4 { + background-position: 0px -8320px; +} + +/* line 502, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f354 { + background-position: 0px -8340px; +} + +/* line 503, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f359 { + background-position: 0px -8360px; +} + +/* line 504, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f370 { + background-position: 0px -8380px; +} + +/* line 505, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35c { + background-position: 0px -8400px; +} + +/* line 506, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35e { + background-position: 0px -8420px; +} + +/* line 507, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f373 { + background-position: 0px -8440px; +} + +/* line 508, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f366 { + background-position: 0px -8460px; +} + +/* line 509, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35f { + background-position: 0px -8480px; +} + +/* line 510, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f361 { + background-position: 0px -8500px; +} + +/* line 511, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f358 { + background-position: 0px -8520px; +} + +/* line 512, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35a { + background-position: 0px -8540px; +} + +/* line 513, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35d { + background-position: 0px -8560px; +} + +/* line 514, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f35b { + background-position: 0px -8580px; +} + +/* line 515, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f362 { + background-position: 0px -8600px; +} + +/* line 516, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f363 { + background-position: 0px -8620px; +} + +/* line 517, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f371 { + background-position: 0px -8640px; +} + +/* line 518, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f372 { + background-position: 0px -8660px; +} + +/* line 519, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f367 { + background-position: 0px -8680px; +} + +/* line 520, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f356 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 521, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f365 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 522, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f360 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 523, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f355 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 524, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f357 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 525, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f368 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 526, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f369 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 527, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 528, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 529, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 530, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 531, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36e { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 532, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f36f { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 533, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f364 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 534, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f374 { + background-position: 0px -8700px; +} + +/* line 535, ../../../hub/static/css/mod/emoji.scss */ +.emoji2615 { + background-position: 0px -8720px; +} + +/* line 536, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f378 { + background-position: 0px -8860px; +} + +/* line 537, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37a { + background-position: 0px -8760px; +} + +/* line 538, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f375 { + background-position: 0px -8780px; +} + +/* line 539, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f376 { + background-position: 0px -8800px; +} + +/* line 540, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f377 { + background-position: 0px -8860px; +} + +/* line 541, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f37b { + background-position: 0px -8840px; +} + +/* line 542, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f379 { + background-position: 0px -8860px; +} + +/* line 543, ../../../hub/static/css/mod/emoji.scss */ +.emoji2197 { + background-position: 0px -8960px; +} + +/* line 544, ../../../hub/static/css/mod/emoji.scss */ +.emoji2198 { + background-position: 0px -8980px; +} + +/* line 545, ../../../hub/static/css/mod/emoji.scss */ +.emoji2196 { + background-position: 0px -8920px; +} + +/* line 546, ../../../hub/static/css/mod/emoji.scss */ +.emoji2199 { + background-position: 0px -8940px; +} + +/* line 547, ../../../hub/static/css/mod/emoji.scss */ +.emoji2934 { + background-position: 0px -8960px; +} + +/* line 548, ../../../hub/static/css/mod/emoji.scss */ +.emoji2935 { + background-position: 0px -8980px; +} + +/* line 549, ../../../hub/static/css/mod/emoji.scss */ +.emoji2194 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 550, ../../../hub/static/css/mod/emoji.scss */ +.emoji2195 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 551, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b06 { + background-position: 0px -9000px; +} + +/* line 552, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b07 { + background-position: 0px -9020px; +} + +/* line 553, ../../../hub/static/css/mod/emoji.scss */ +.emoji27a1 { + background-position: 0px -9040px; +} + +/* line 554, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b05 { + background-position: 0px -11180px; +} + +/* line 555, ../../../hub/static/css/mod/emoji.scss */ +.emoji25b6 { + background-position: 0px -9080px; +} + +/* line 556, ../../../hub/static/css/mod/emoji.scss */ +.emoji25c0 { + background-position: 0px -9100px; +} + +/* line 557, ../../../hub/static/css/mod/emoji.scss */ +.emoji23e9 { + background-position: 0px -9120px; +} + +/* line 558, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ea { + background-position: 0px -9140px; +} + +/* line 559, ../../../hub/static/css/mod/emoji.scss */ +.emoji23eb { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 560, ../../../hub/static/css/mod/emoji.scss */ +.emoji23ec { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 561, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 562, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 563, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 564, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f53d { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 565, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b55 { + background-position: 0px -9800px; +} + +/* line 566, ../../../hub/static/css/mod/emoji.scss */ +.emoji274c { + background-position: 0px -10340px; +} + +/* line 567, ../../../hub/static/css/mod/emoji.scss */ +.emoji274e { + background-position: 0px -10340px; +} + +/* line 568, ../../../hub/static/css/mod/emoji.scss */ +.emoji2757 { + background-position: 0px -9160px; +} + +/* line 569, ../../../hub/static/css/mod/emoji.scss */ +.emoji2049 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 570, ../../../hub/static/css/mod/emoji.scss */ +.emoji203c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 571, ../../../hub/static/css/mod/emoji.scss */ +.emoji2753 { + background-position: 0px -9180px; +} + +/* line 572, ../../../hub/static/css/mod/emoji.scss */ +.emoji2754 { + background-position: 0px -9200px; +} + +/* line 573, ../../../hub/static/css/mod/emoji.scss */ +.emoji2755 { + background-position: 0px -9220px; +} + +/* line 574, ../../../hub/static/css/mod/emoji.scss */ +.emoji3030 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 575, ../../../hub/static/css/mod/emoji.scss */ +.emoji27b0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 576, ../../../hub/static/css/mod/emoji.scss */ +.emoji27bf { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 577, ../../../hub/static/css/mod/emoji.scss */ +.emoji2764 { + background-position: 0px -9240px; +} + +/* line 578, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f493 { + background-position: 0px -9480px; +} + +/* line 579, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f494 { + background-position: 0px -9280px; +} + +/* line 580, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f495 { + background-position: 0px -9480px; +} + +/* line 581, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f496 { + background-position: 0px -9480px; +} + +/* line 582, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f497 { + background-position: 0px -9340px; +} + +/* line 583, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f498 { + background-position: 0px -9360px; +} + +/* line 584, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f499 { + background-position: 0px -9380px; +} + +/* line 585, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49a { + background-position: 0px -9400px; +} + +/* line 586, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49b { + background-position: 0px -9420px; +} + +/* line 587, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49c { + background-position: 0px -9440px; +} + +/* line 588, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49d { + background-position: 0px -9460px; +} + +/* line 589, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49e { + background-position: 0px -9480px; +} + +/* line 590, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f49f { + background-position: 0px -9500px; +} + +/* line 591, ../../../hub/static/css/mod/emoji.scss */ +.emoji2665 { + background-position: 0px -9520px; +} + +/* line 592, ../../../hub/static/css/mod/emoji.scss */ +.emoji2660 { + background-position: 0px -9540px; +} + +/* line 593, ../../../hub/static/css/mod/emoji.scss */ +.emoji2666 { + background-position: 0px -9560px; +} + +/* line 594, ../../../hub/static/css/mod/emoji.scss */ +.emoji2663 { + background-position: 0px -9580px; +} + +/* line 595, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ac { + background-position: 0px -9600px; +} + +/* line 596, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ad { + background-position: 0px -9620px; +} + +/* line 597, ../../../hub/static/css/mod/emoji.scss */ +.emoji267f { + background-position: 0px -9640px; +} + +/* line 598, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 599, ../../../hub/static/css/mod/emoji.scss */ +.emoji26a0 { + background-position: 0px -9700px; +} + +/* line 600, ../../../hub/static/css/mod/emoji.scss */ +.emoji26d4 { + background-position: 0px -9720px; +} + +/* line 601, ../../../hub/static/css/mod/emoji.scss */ +.emoji267b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 602, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b2 { + background-position: 0px -6980px; +} + +/* line 603, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b6 { + background-position: 0px -7080px; +} + +/* line 604, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6b9 { + background-position: 0px -9740px; +} + +/* line 605, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ba { + background-position: 0px -9760px; +} + +/* line 606, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6c0 { + background-position: 0px -5220px; +} + +/* line 607, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bb { + background-position: 0px -5240px; +} + +/* line 608, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bd { + background-position: 0px -5260px; +} + +/* line 609, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6be { + background-position: 0px -5280px; +} + +/* line 610, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6bc { + background-position: 0px -9780px; +} + +/* line 611, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 612, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f6ab { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 613, ../../../hub/static/css/mod/emoji.scss */ +.emoji2714 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 614, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f191 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 615, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f192 { + background-position: 0px -10020px; +} + +/* line 616, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f193 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 617, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f194 { + background-position: 0px -11020px; +} + +/* line 618, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f195 { + background-position: 0px -9980px; +} + +/* line 619, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f196 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 620, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f197 { + background-position: 0px -9880px; +} + +/* line 621, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f198 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 622, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f199 { + background-position: 0px -10000px; +} + +/* line 623, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f19a { + background-position: 0px -9960px; +} + +/* line 624, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f201 { + background-position: 0px -10060px; +} + +/* line 625, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f202 { + background-position: 0px -10080px; +} + +/* line 626, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f232 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 627, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f233 { + background-position: 0px -10100px; +} + +/* line 628, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f234 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 629, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f235 { + background-position: 0px -10120px; +} + +/* line 630, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f236 { + background-position: 0px -10140px; +} + +/* line 631, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f21a { + background-position: 0px -10160px; +} + +/* line 632, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f237 { + background-position: 0px -10180px; +} + +/* line 633, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f238 { + background-position: 0px -10200px; +} + +/* line 634, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f239 { + background-position: 0px -10220px; +} + +/* line 635, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f22f { + background-position: 0px -10240px; +} + +/* line 636, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f23a { + background-position: 0px -10260px; +} + +/* line 637, ../../../hub/static/css/mod/emoji.scss */ +.emoji3299 { + background-position: 0px -10280px; +} + +/* line 638, ../../../hub/static/css/mod/emoji.scss */ +.emoji3297 { + background-position: 0px -10300px; +} + +/* line 639, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f250 { + background-position: 0px -10320px; +} + +/* line 640, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f251 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 641, ../../../hub/static/css/mod/emoji.scss */ +.emoji2795 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 642, ../../../hub/static/css/mod/emoji.scss */ +.emoji2796 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 643, ../../../hub/static/css/mod/emoji.scss */ +.emoji2716 { + background-position: 0px -10340px; +} + +/* line 644, ../../../hub/static/css/mod/emoji.scss */ +.emoji2797 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 645, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a0 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 646, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a1 { + background-position: 0px -10360px; +} + +/* line 647, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a2 { + background-position: 0px -10380px; +} + +/* line 648, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a3 { + background-position: 0px -10400px; +} + +/* line 649, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a4 { + background-position: 0px -10420px; +} + +/* line 650, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a5 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 651, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a6 { + background-position: 0px -10460px; +} + +/* line 652, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a7 { + background-position: 0px -10460px; +} + +/* line 653, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a8 { + background-position: 0px -10480px; +} + +/* line 654, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4a9 { + background-position: 0px -5000px; +} + +/* line 655, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4aa { + background-position: 0px -10500px; +} + +/* line 656, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ab { + background-position: 0px -10520px; +} + +/* line 657, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ac { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 658, ../../../hub/static/css/mod/emoji.scss */ +.emoji2728 { + background-position: 0px -11000px; +} + +/* line 659, ../../../hub/static/css/mod/emoji.scss */ +.emoji2734 { + background-position: 0px -10560px; +} + +/* line 660, ../../../hub/static/css/mod/emoji.scss */ +.emoji2733 { + background-position: 0px -10580px; +} + +/* line 661, ../../../hub/static/css/mod/emoji.scss */ +.emoji26aa { + background-position: 0px -10640px; +} + +/* line 662, ../../../hub/static/css/mod/emoji.scss */ +.emoji26ab { + background-position: 0px -10640px; +} + +/* line 663, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f534 { + background-position: 0px -10640px; +} + +/* line 664, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f535 { + background-position: 0px -10900px; +} + +/* line 665, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f532 { + background-position: 0px -10900px; +} + +/* line 666, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f533 { + background-position: 0px -10980px; +} + +/* line 667, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b50 { + background-position: 0px -10720px; +} + +/* line 668, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1c { + background-position: 0px -10980px; +} + +/* line 669, ../../../hub/static/css/mod/emoji.scss */ +.emoji2b1b { + background-position: 0px -10900px; +} + +/* line 670, ../../../hub/static/css/mod/emoji.scss */ +.emoji25ab { + background-position: 0px -10980px; +} + +/* line 671, ../../../hub/static/css/mod/emoji.scss */ +.emoji25aa { + background-position: 0px -10900px; +} + +/* line 672, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fd { + background-position: 0px -10980px; +} + +/* line 673, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fe { + background-position: 0px -10900px; +} + +/* line 674, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fb { + background-position: 0px -10980px; +} + +/* line 675, ../../../hub/static/css/mod/emoji.scss */ +.emoji25fc { + background-position: 0px -10900px; +} + +/* line 676, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f536 { + background-position: 0px -10980px; +} + +/* line 677, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f537 { + background-position: 0px -10980px; +} + +/* line 678, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f538 { + background-position: 0px -10980px; +} + +/* line 679, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f539 { + background-position: 0px -10980px; +} + +/* line 680, ../../../hub/static/css/mod/emoji.scss */ +.emoji2747 { + background-position: 0px -11000px; +} + +/* line 681, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4ae { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 682, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f4af { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 683, ../../../hub/static/css/mod/emoji.scss */ +.emoji21a9 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 684, ../../../hub/static/css/mod/emoji.scss */ +.emoji21aa { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 685, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f503 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 686, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50a { + background-position: 0px -7880px; +} + +/* line 687, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 688, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 689, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50d { + background-position: 0px -11060px; +} + +/* line 690, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50e { + background-position: 0px -11060px; +} + +/* line 691, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f512 { + background-position: 0px -11140px; +} + +/* line 692, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f513 { + background-position: 0px -11100px; +} + +/* line 693, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f50f { + background-position: 0px -11140px; +} + +/* line 694, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f510 { + background-position: 0px -11140px; +} + +/* line 695, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f511 { + background-position: 0px -11160px; +} + +/* line 696, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f514 { + background-position: 0px -4980px; +} + +/* line 697, ../../../hub/static/css/mod/emoji.scss */ +.emoji2611 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 698, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f518 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 699, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f516 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 700, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f517 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 701, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f519 { + background-position: 0px -11180px; +} + +/* line 702, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51a { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 703, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51b { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 704, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51c { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 705, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f51d { + background-position: 0px -10040px; +} + +/* line 706, ../../../hub/static/css/mod/emoji.scss */ +.emoji2003 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 707, ../../../hub/static/css/mod/emoji.scss */ +.emoji2002 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 708, ../../../hub/static/css/mod/emoji.scss */ +.emoji2005 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 709, ../../../hub/static/css/mod/emoji.scss */ +.emoji2705 { + background-position: 0px -9200px; +} + +/* placeholder */ +/* line 710, ../../../hub/static/css/mod/emoji.scss */ +.emoji270a { + background-position: 0px -11220px; +} + +/* line 711, ../../../hub/static/css/mod/emoji.scss */ +.emoji270b { + background-position: 0px -11240px; +} + +/* line 712, ../../../hub/static/css/mod/emoji.scss */ +.emoji270c { + background-position: 0px -11260px; +} + +/* line 713, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44a { + background-position: 0px -11280px; +} + +/* line 714, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44d { + background-position: 0px -11300px; +} + +/* line 715, ../../../hub/static/css/mod/emoji.scss */ +.emoji261d { + background-position: 0px -11320px; +} + +/* line 716, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f446 { + background-position: 0px -11340px; +} + +/* line 717, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f447 { + background-position: 0px -11360px; +} + +/* line 718, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f448 { + background-position: 0px -11380px; +} + +/* line 719, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f449 { + background-position: 0px -11400px; +} + +/* line 720, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44b { + background-position: 0px -11420px; +} + +/* line 721, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44f { + background-position: 0px -11440px; +} + +/* line 722, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44c { + background-position: 0px -11460px; +} + +/* line 723, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f44e { + background-position: 0px -11480px; +} + +/* line 724, ../../../hub/static/css/mod/emoji.scss */ +.emoji1f450 { + background-position: 0px -11500px; +} diff --git a/dist/css/mod/fav-button.css b/dist/css/mod/fav-button.css new file mode 100644 index 0000000..667310f --- /dev/null +++ b/dist/css/mod/fav-button.css @@ -0,0 +1,13 @@ +/* line 1, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button { + height: 25px; + width: 25px; + display: block; + float: right; + background: url("/static/img/fav_star.png") 0 0 no-repeat; +} + +/* line 2, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button.faved { + background: url("/static/img/faved_star.png") 0 0 no-repeat; +} diff --git a/dist/css/mod/file-blame-blob.css b/dist/css/mod/file-blame-blob.css new file mode 100644 index 0000000..82bd0f8 --- /dev/null +++ b/dist/css/mod/file-blame-blob.css @@ -0,0 +1,231 @@ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files { + position: relative; +} + +/* line 6, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file { + margin-top: 0; +} + +/* line 9, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 15, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta, +.file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 30, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info, +.file-box .meta .info { + float: left; + height: 33px; + max-width: 555px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* line 41, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span, +.file-box .meta .info span { + padding-left: 9px; + margin-left: 5px; + border-left: 1px solid #C1C1C1; + box-shadow: inset 1px 0 0 white; +} + +/* line 50, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 63, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 67, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 76, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat .diffstat-bar { + color: #D8D8D8; +} + +/* line 79, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 85, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes { + display: block; + position: relative; + display: block; + float: left; + margin-right: 10px; +} + +/* line 92, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes label { + font-weight: bold; + margin: 5px 0; +} + +/* line 96, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes input { + margin: 0; +} + +/* line 99, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .button-group, +.file-box .meta .actions .button-group { + float: right; + margin-top: 2px; +} + +/* line 104, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions code, +.file-box .meta .actions code { + background: inherit; + border: none; + font-size: 11px; + color: inherit; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + padding: 0; +} + +/* line 114, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file { + margin: 15px 0; +} + +/* line 118, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 120, ../../../hub/static/css/mod/file-blame-blob.scss */ +.change #files .file, .file-box, .change .file { + margin-bottom: 0; +} + +/* line 122, ../../../hub/static/css/mod/file-blame-blob.scss */ +.blame .line-data { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} diff --git a/dist/css/mod/file-blob.css b/dist/css/mod/file-blob.css new file mode 100644 index 0000000..b382db1 --- /dev/null +++ b/dist/css/mod/file-blob.css @@ -0,0 +1,157 @@ +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} diff --git a/dist/css/mod/file-browser.css b/dist/css/mod/file-browser.css new file mode 100644 index 0000000..8c115b0 --- /dev/null +++ b/dist/css/mod/file-browser.css @@ -0,0 +1,64 @@ +/* line 1, ../../../hub/static/css/mod/file-browser.scss */ +#tree, #blob { + margin: 0 0 27px; +} + +/* line 3, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser { + width: 100%; + margin: 0; + border-radius: 3px; + border: 1px solid #CACACA; +} + +/* line 4, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser th { + text-align: left; + font-weight: bold; + padding: 6px 3px; + color: #555; + text-shadow: 0 1px 0 #fff; + border-bottom: 1px solid #d8d8d8; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 5, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser td { + background: #f8f8f8; + border-bottom: 1px solid #eee; + padding: 7px 3px; + color: #484848; + vertical-align: middle; +} + +/* line 6, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser tbody tr:last-child td { + border-bottom: 0; +} + +/* line 7, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser .message { + min-width: 270px; + max-width: 484px; +} + +/* line 8, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser td a.message { + color: #484848; +} + +/* line 10, ../../../hub/static/css/mod/file-browser.scss */ +.tree-browser i, .file i, .commit-group-item i { + filter: alpha(opacity=70); + opacity: .7; +} + +/* line 11, ../../../hub/static/css/mod/file-browser.scss */ +.file .error { + text-align: center; + margin: 30px; + color: #666; +} diff --git a/dist/css/mod/file-diff-blob.css b/dist/css/mod/file-diff-blob.css new file mode 100644 index 0000000..62a6c4a --- /dev/null +++ b/dist/css/mod/file-diff-blob.css @@ -0,0 +1,605 @@ +/* button list */ +/* line 3, ../../../hub/static/css/mod/file-blob.scss */ +.button-group { + display: inline-block; + overflow: hidden; + border: 1px solid #d4d4d4; + border-radius: 3px; + border-bottom-color: #bcbcbc; + background: #f5f5f5; + background: -moz-linear-gradient(#f5f5f5, #e5e5e5); + background: -webkit-linear-gradient(#f5f5f5, #e5e5e5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; +} + +/* line 4, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li { + margin: 0 !important; + float: left; +} + +/* line 5, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:first-child .grouped-button { + border-left: none; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +/* line 6, ../../../hub/static/css/mod/file-blob.scss */ +.button-group li:last-child .grouped-button { + border-right: none; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* line 7, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .grouped-button { + float: left; + background: none; + border-bottom: none; + border-top: none; + border-left: 1px solid rgba(0, 0, 0, 0.1); + border-right: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 0; + cursor: pointer; +} + +/* line 8, ../../../hub/static/css/mod/file-blob.scss */ +.button-group .minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line-no */ +/* line 12, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file { + min-height: 78px; + position: relative; + overflow: auto; +} + +/* line 13, ../../../hub/static/css/mod/file-blob.scss */ +#blob .file .rawfile { + text-align: center; + background-color: #ddd; + padding: 30px; + position: relative; +} + +/* line 14, ../../../hub/static/css/mod/file-blob.scss */ +.file table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +/* line 15, ../../../hub/static/css/mod/file-blob.scss */ +.file table td, .file table th { + vertical-align: top; + padding: 0; +} + +/* line 16, ../../../hub/static/css/mod/file-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/file-blob.scss */ +.code { + width: 100%; +} + +/* line 19, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre { + margin: 0; + padding: 8px; + border: none; + background-color: #FFF; + white-space: pre; +} + +/* line 20, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre a { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre { + background-color: #ECECEC; + padding: 8px; + border: none; + border-right: 1px solid #DDD; + text-align: right; + white-space: pre; +} + +/* line 24, ../../../hub/static/css/mod/file-blob.scss */ +.linenos .linenodiv pre a { + color: #AAA; + text-decoration: none; + white-space: nowrap; + line-height: 18px; +} + +/* line 25, ../../../hub/static/css/mod/file-blob.scss */ +.code .highlight pre, .linenos .linenodiv pre { + margin: 0; + line-height: 18px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +/* line 32, ../../../hub/static/css/mod/file-blob.scss */ +.linenos { + padding: 0; +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} +/* line 3, ../../../hub/static/css/mod/diff-base.scss */ +.code pre, xmp, plaintext, listing { + display: block; + font-size: 13px; + font-family: 'Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; + white-space: pre; + margin: 0; + padding: 0; +} + +/* line 12, ../../../hub/static/css/mod/diff-base.scss */ +.code pre { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/diff-base.scss */ +.font-consolas pre { + font-family: Consolas,'Source Code Pro',Courier,Monaco,Menlo,monospace; +} + +/* line 20, ../../../hub/static/css/mod/diff-base.scss */ +.font-monaco pre { + font-family: Monaco,'Source Code Pro',Courier,Consolas,Menlo,monospace; +} + +/* line 24, ../../../hub/static/css/mod/diff-base.scss */ +.font-courier pre { + font-family: Courier,'Source Code Pro',Monaco,Consolas,Menlo,monospace; +} + +/* line 28, ../../../hub/static/css/mod/diff-base.scss */ +.font-dejavu pre { + font-family: 'DejaVu Sans Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 32, ../../../hub/static/css/mod/diff-base.scss */ +.font-ubuntu pre { + font-family: 'Ubuntu Mono','Source Code Pro',Courier,Monaco,Consolas,Menlo,monospace; +} + +/* line 37, ../../../hub/static/css/mod/diff-base.scss */ +pre, code, tt { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + border: 0; +} + +/* line 43, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .normal { + background-color: #FFF; +} + +/* line 47, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion { + color: black; + background-color: #FDD; +} +/* line 50, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .deletion .x, .highlight .deletion .c { + color: black; + background-color: #ffaaaa; +} + +/* line 56, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion { + color: black; + background-color: #DFD; +} +/* line 59, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .insertion .i, .highlight .insertion .c { + color: black; + background-color: #aaffaa; +} + +/* line 65, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped { + color: #cacaca; + background-color: #f9f9f9; +} +/* line 69, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a { + color: #cacaca; + vertical-align: middle; +} +/* line 73, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a:hover { + text-decoration: none; +} +/* line 77, ../../../hub/static/css/mod/diff-base.scss */ +.highlight .skipped a[data-type="after"], .highlight .skipped a[data-type="before"] { + font-size: 20px; +} + +/* line 1, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube { + position: absolute; + width: 30px; + height: 30px; + border: 1px solid #DDD; +} + +/* line 2, ../../../hub/static/css/mod/colorcube.scss */ +.colorcube::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 5px solid #DDD; + border-width: 5px; + border-color: #DDD transparent transparent transparent; + left: 10px; + top: 30px; + float: left; + position: absolute; +} + +/* line 5, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers, .file-box .data .line_numbers { + background-color: #ECECEC; + color: #AAA; + padding: 0 2px 0 16px; + border-right: 1px solid #DDD; + text-align: right; + cursor: pointer; +} +/* line 12, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.deletion, .file-box .data .line_numbers.deletion { + color: #AAA; + background-color: #f7c8c8; +} +/* line 16, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers.insertion, .file-box .data .line_numbers.insertion { + color: #AAA; + background-color: #ceffce; +} + +/* line 21, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .line_numbers a { + color: #AAA; +} + +/* line 24, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .code { + width: 100%; +} + +/* line 28, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side { + overflow-x: none; + display: none; +} + +/* line 33, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .side .file-col { + width: 50%; + float: left; + overflow-x: auto; +} + +/* line 40, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table { + border-collapse: collapse; +} + +/* line 44, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files.commentable tr td pre:hover { + background-color: #FFC; +} + +/* line 46, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .diff-table pre { + border-radius: 0px; +} + +/* line 48, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data table, .file-box .data table { + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + line-height: 1.4; +} + +/* line 54, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file .data .file-diff-line span.color { + cursor: default; +} + +/* Comment Bubble */ +/* line 58, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line .add-bubble { + position: absolute; + left: 0; + width: 25px; + height: 16px; + margin-top: 0; + cursor: pointer; + opacity: 0; + color: #4183C4; +} + +/* line 69, ../../../hub/static/css/mod/file-diff-blob.scss */ +#files .file-diff-line:hover .add-bubble { + opacity: 1; +} + +/* Comment Bubble icons */ +/* line 72, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 83, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} + +/* line 91, ../../../hub/static/css/mod/file-diff-blob.scss */ +.mini-icon-add-comment::before { + content: "\f06f"; +} + +/* line 93, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:first-child:after { + margin: -18px 0 0; +} + +/* line 97, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container:after { + background: none repeat scroll 0 0 #fff; + content: ""; + display: block; + height: 2px; + margin: -16px 0 0; + position: absolute; + left: 0px; + width: 938px; +} + +/* line 109, ../../../hub/static/css/mod/file-diff-blob.scss */ +.data .line-numbers-skipped { + position: absolute; + width: 79px; + background-color: #f5f5f5; + border-right: 1px solid #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +/* line 119, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .skipped-top, .skipped-container .skipped-bottom { + height: 18px; + background-color: #f5f5f5; +} + +/* line 124, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top::before { + background: #fff; + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + display: block; + height: 4px; + position: relative; + top: -1px; + margin-left: -1px; +} + +/* line 140, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 145, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 20px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 5px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 170, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .ellipsis { + margin-top: -10px; +} + +/* line 174, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before, .skipped-container .ellipsis::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 188, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2026"; + padding: 2px 0 0; + top: -4px; +} + +/* line 197, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .ellipsis::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} + +/* line 206, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace:hover { + background-color: #e6e6e6; + border-color: #999; +} + +/* line 211, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace { + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; + display: block; + float: left; + font-family: Arial, sans-serif; + font-size: 16px; + text-align: center; + color: #707070; + height: 16px; + line-height: 6px; + margin: 0 0 0 44px; + padding: 0; + position: absolute; + width: 30px; + z-index: 10; +} + +/* line 236, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-top .toggle_whitespace { + margin-top: -10px; +} + +/* line 240, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before, .skipped-container .toggle_whitespace::after { + border: 1px solid #ccc; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + content: ""; + height: 9px; + left: -4px; + width: 36px; + position: absolute; +} + +/* line 254, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::before { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + content: "\2423"; + padding: 2px 0 0; + top: -4px; +} + +/* line 263, ../../../hub/static/css/mod/file-diff-blob.scss */ +.skipped-container .toggle_whitespace::after { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + bottom: -4px; + height: 10px; +} diff --git a/dist/css/mod/filter-tabs.css b/dist/css/mod/filter-tabs.css new file mode 100644 index 0000000..d0dd084 --- /dev/null +++ b/dist/css/mod/filter-tabs.css @@ -0,0 +1,33 @@ +/* line 1, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs { + display: block; + float: left; + padding: 5px 5px 0; + overflow: hidden; +} +/* line 6, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .filter-tab { + display: inline-block; + padding: 0 8px; + height: 24px; + line-height: 24px; + font-size: 12px; + font-weight: bold; + color: #888; + -webkit-font-smoothing: antialiased; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + text-decoration: none; + border: 1px solid #CCC; + border-bottom: 0; + border-radius: 3px 3px 0 0; + background: rgba(255, 255, 255, 0.2); + cursor: pointer; +} +/* line 23, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .selected { + color: #333; + background: white; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + border-color: #B4B4B4; + border-bottom: 1px solid white; +} diff --git a/dist/css/mod/flat-hack.css b/dist/css/mod/flat-hack.css new file mode 100644 index 0000000..f387ef8 --- /dev/null +++ b/dist/css/mod/flat-hack.css @@ -0,0 +1,4 @@ +/* line 2, ../../../hub/static/css/mod/flat-hack.scss */ +a.btn i { + padding-right: 5px; +} diff --git a/dist/css/mod/flatui-comment-content.css b/dist/css/mod/flatui-comment-content.css new file mode 100644 index 0000000..b94772c --- /dev/null +++ b/dist/css/mod/flatui-comment-content.css @@ -0,0 +1,729 @@ +@charset "UTF-8"; +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 11, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.side-avatar { + float: left; + padding: 0px 5px 5px; + vertical-align: top; + margin-left: 0; +} + +/* line 18, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload { + position: relative; + top: -50px; + width: 360px; +} + +/* line 28, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload #file { + position: absolute; + width: 240px; + margin-left: -80px; + opacity: 0.0001; + cursor: pointer; +} + +/* line 36, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 43, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content { + display: block; + background: white; + border: 0px solid; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 49, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content textarea#new_comment_content { + width: 100%; + background: white; +} +/* line 54, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .tabnav { + border-bottom: none; + padding: 10px; +} +/* line 59, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .write-content { + position: relative; + padding: 10px 10px 10px; +} + +/* Zen Mode button hacks for FlatUI */ +/* line 67, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.write-content .enable-fullscreen { + top: 15px; +} + +/* line 71, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.tab-content { + overflow: visible; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 79, ../../../hub/static/css/mod/flatui-comment-form.scss */ + .side-avatar { + padding: 0px; + } + + /* line 85, ../../../hub/static/css/mod/flatui-comment-form.scss */ + form#add-comment-form .form-content .tabnav { + max-width: 100%; + } +} +/* hacks for markdown paragraph content for flatui */ +/* line 4, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0px 0px 0px; +} + +/* line 8, ../../../hub/static/css/mod/flatui-comment-content.scss */ +#summary.mod .header { + position: relative; +} + +/* line 12, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 15, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content input.title-field { + font-size: 20px; + font-weight: bold; + margin-bottom: 5px; + width: 99%; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.content .form-content textarea { + min-height: 100px; + max-width: 100%; + width: 99%; + margin: 0; +} + +/* line 29, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.form-actions { + background-color: transparent; + border: none; + text-align: right; + margin: 0px; + padding: 10px 0px 0px; +} + +/* line 37, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right { + float: right; +} +/* line 39, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.change-header-right a.change-header-date { + color: lightgray; +} + +/* line 44, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions { + margin-left: 10px; + display: inline; +} +/* line 47, ../../../hub/static/css/mod/flatui-comment-content.scss */ +ul.comment-header-actions li { + display: inline; +} + +/* line 52, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.comment-body { + padding: 0px; +} + +/* line 56, ../../../hub/static/css/mod/flatui-comment-content.scss */ +.markdown-body { + padding: 0px; +} diff --git a/dist/css/mod/flatui-comment-form.css b/dist/css/mod/flatui-comment-form.css new file mode 100644 index 0000000..163cb37 --- /dev/null +++ b/dist/css/mod/flatui-comment-form.css @@ -0,0 +1,655 @@ +@charset "UTF-8"; +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 11, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.side-avatar { + float: left; + padding: 0px 5px 5px; + vertical-align: top; + margin-left: 0; +} + +/* line 18, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 22, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload { + position: relative; + top: -50px; + width: 360px; +} + +/* line 28, ../../../hub/static/css/mod/flatui-comment-form.scss */ +#form-file-upload #file { + position: absolute; + width: 240px; + margin-left: -80px; + opacity: 0.0001; + cursor: pointer; +} + +/* line 36, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 43, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content { + display: block; + background: white; + border: 0px solid; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 49, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content textarea#new_comment_content { + width: 100%; + background: white; +} +/* line 54, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .tabnav { + border-bottom: none; + padding: 10px; +} +/* line 59, ../../../hub/static/css/mod/flatui-comment-form.scss */ +form#add-comment-form .form-content .write-content { + position: relative; + padding: 10px 10px 10px; +} + +/* Zen Mode button hacks for FlatUI */ +/* line 67, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.write-content .enable-fullscreen { + top: 15px; +} + +/* line 71, ../../../hub/static/css/mod/flatui-comment-form.scss */ +.tab-content { + overflow: visible; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 79, ../../../hub/static/css/mod/flatui-comment-form.scss */ + .side-avatar { + padding: 0px; + } + + /* line 85, ../../../hub/static/css/mod/flatui-comment-form.scss */ + form#add-comment-form .form-content .tabnav { + max-width: 100%; + } +} diff --git a/dist/css/mod/footer.css b/dist/css/mod/footer.css new file mode 100644 index 0000000..8d40e33 --- /dev/null +++ b/dist/css/mod/footer.css @@ -0,0 +1,26 @@ +/* line 1, ../../../hub/static/css/mod/footer.scss */ +#footer { + clear: both; + padding: 10px 0; + color: #999; + border-top: 1px solid #EAEAEA; + background: url("/static/img/pb2.png") no-repeat center center; +} + +/* line 8, ../../../hub/static/css/mod/footer.scss */ +#footer .footer-logo { + float: left; + opacity: 0.6; +} + +/* line 9, ../../../hub/static/css/mod/footer.scss */ +#footer #revision { + color: lightgray; + float: right; + display: inline-table; +} + +/* line 10, ../../../hub/static/css/mod/footer.scss */ +#footer #revision span { + padding: 0 5px; +} diff --git a/dist/css/mod/gist-comment.css b/dist/css/mod/gist-comment.css new file mode 100644 index 0000000..2dfd9b6 --- /dev/null +++ b/dist/css/mod/gist-comment.css @@ -0,0 +1,219 @@ +/* line 1, ../../../hub/static/css/mod/gist-comment.scss */ +.tabnav .tabnav-tabs > li:first-child .tabnav-tab.selected { + padding-left: 12px; +} + +/* line 2, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .tabnav { + margin-bottom: 10px; + margin-top: 10px; + position: relative; +} + +/* line 3, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + display: none; + padding: 0 10px 10px; +} + +/* line 6, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form.write-selected .write-content, .previewable-comment-form.preview-selected .preview-content { + display: block; +} + +/* line 7, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .comment { + border: 1px solid #CACACA; +} + +/* line 8, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background-color: #E1E1E1; + background-image: -moz-linear-gradient(#F8F8F8, #E1E1E1); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + background-repeat: repeat-x; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-gravatar { + display: inline-block; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 10, ../../../hub/static/css/mod/gist-comment.scss */ +.gist-form-actions { + text-align: right; + padding-bottom: 5px; +} + +/* line 11, ../../../hub/static/css/mod/gist-comment.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + display: none; + padding: 0 10px 10px; +} + +/* line 12, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-author { + display: inline-block; + max-width: 600px; + height: 33px; + line-height: 33px; + font-weight: bold; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; +} + +/* line 13, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a { + color: #666; +} + +/* line 14, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a:hover { + text-decoration: underline; +} + +/* line 15, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-right { + float: right; +} + +/* line 16, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .comment-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + line-height: 33px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + line-height: 33px; +} + +/* line 17, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 18, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body { + font-size: 14px; + line-height: 1.6; + overflow: hidden; + background-color: white; +} + +/* line 19, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-content { + color: #333; + font-size: 12px; +} + +/* line 20, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body > :last-child { + margin-bottom: 0 !important; +} + +/* line 21, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 22, ../../../hub/static/css/mod/gist-comment.scss */ +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { + margin: 15px 0; +} + +/* line 23, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-content .comment-body { + font-size: 13px; +} + +/* line 25, ../../../hub/static/css/mod/gist-comment.scss */ +.export-references { + list-style: none; + margin-top: 18px; +} + +/* line 26, ../../../hub/static/css/mod/gist-comment.scss */ +.export-references li, .export-references label { + color: #999; + font-size: 11px; + margin-bottom: 2px; +} + +/* line 27, ../../../hub/static/css/mod/gist-comment.scss */ +.export-references label { + display: block; + padding: 6px 0 1px; + margin-bottom: 0; +} + +/* line 28, ../../../hub/static/css/mod/gist-comment.scss */ +input.url-field { + border-radius: 3px; + border: 1px solid #CCC; + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 11px; + color: #666; + padding: 0 5px 0 5px; + width: 136px; + height: 24px; + margin-bottom: 0; +} + +/* line 29, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header-actions { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +/* line 30, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + position: relative; + top: 1px; +} + +/* line 31, ../../../hub/static/css/mod/gist-comment.scss */ +.comment-header a:hover { + text-decoration: none; + color: #4183C4; +} diff --git a/dist/css/mod/gist-dropzone.css b/dist/css/mod/gist-dropzone.css new file mode 100644 index 0000000..25ae697 --- /dev/null +++ b/dist/css/mod/gist-dropzone.css @@ -0,0 +1,42 @@ +/* line 1, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone { + display: none; + background: rgba(0, 0, 0, 0.25); + height: 100%; + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 100; +} + +/* line 2, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone #dropzone-pill { + background: rgba(0, 0, 0, 0.75); + border-radius: 6px; + color: #fff; + font-weight: bold; + text-align: center; + margin-left: -100px; + margin-top: -60px; + padding: 20px; + width: 160px; + height: 80px; + position: absolute; + top: 50%; + left: 50%; +} + +/* line 3, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone .mega-icon-code-file::before, .mega-icon-download-unknown::before, #dropzone .mega-icon-arr-right::before, #dropzone .mega-icon-gist-add::before { + font-size: 32px; +} + +/* line 4, ../../../hub/static/css/mod/gist-dropzone.scss */ +#dropzone p { + display: block; + -webkit-margin-before: 1em; + -webkit-margin-after: 1em; + -webkit-margin-start: 0px; + -webkit-margin-end: 0px; +} diff --git a/dist/css/mod/gist-form.css b/dist/css/mod/gist-form.css new file mode 100644 index 0000000..3720971 --- /dev/null +++ b/dist/css/mod/gist-form.css @@ -0,0 +1,39 @@ +/* line 1, ../../../hub/static/css/mod/gist-form.scss */ +.bubble { + background: #EEE; + border-radius: 3px; + margin-bottom: 1em; + padding: 3px; +} + +/* line 2, ../../../hub/static/css/mod/gist-form.scss */ +#gist-form .file { + border: 1px solid #D9D9D9; + background: whiteSmoke; +} + +/* line 3, ../../../hub/static/css/mod/gist-form.scss */ +#gist-form .file .meta { + background-color: #EAEAEA; + background-image: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background-image: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + background-image: linear-gradient(#FAFAFA, #EAEAEA); + background-repeat: repeat-x; + display: inline-block; + display: block; + border-bottom: 1px solid #D8D8D8; + color: #555; + font-size: 12px; + height: 26px; + padding: 8px; + position: relative; + text-align: left; + text-shadow: 0 1px 0 white; +} + +/* line 4, ../../../hub/static/css/mod/gist-form.scss */ +#gist-form .editor-options { + position: absolute; + top: 6px; + right: 5px; +} diff --git a/dist/css/mod/gist-item.css b/dist/css/mod/gist-item.css new file mode 100644 index 0000000..3fd21a9 --- /dev/null +++ b/dist/css/mod/gist-item.css @@ -0,0 +1,171 @@ +/* line 1, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item { + display: inline-block; + display: block; + margin-bottom: 2em; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li .mini-icon { + line-height: 0.6; + opacity: 0.5; +} + +/* line 3, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta { + position: absolute; + right: 0; +} + +/* line 4, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li { + font-size: 12px; + font-weight: bold; + list-style-type: none; + display: inline-block; + margin-left: 12px; +} + +/* line 5, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item ul.meta > li > a { + display: block; + text-decoration: none; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .byline { + margin: 3px 0 11px; +} + +/* line 7, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator img { + border-radius: 3px; + width: 28px; + height: 28px; + position: absolute; + top: 0; + left: 0; + margin-left: 3px; +} + +/* line 8, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator { + color: rgba(51, 51, 51, 0.75); + font-size: 13px; + font-weight: 300; + padding-left: 40px; + position: relative; + width: 480px; +} + +/* line 9, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .creator a { + font-weight: bold; +} + +/* line 10, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .metadata { + font-size: 11px; + margin-left: 40px; +} + +/* line 11, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .metadata .datetime { + color: #999; +} + +/* line 12, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .description { + color: rgba(51, 51, 51, 0.75); + display: block; + font-size: 12px; + vertical-align: text-top; + margin-top: 6px; + margin-left: 40px; + width: 480px; +} + +/* line 13, ../../../hub/static/css/mod/gist-item.scss */ +.bubble { + background: #EEE; + border-radius: 3px; + margin-bottom: 1em; + padding: 3px; +} + +/* line 14, ../../../hub/static/css/mod/gist-item.scss */ +table { + font-size: inherit; + font: 100%; +} + +/* line 15, ../../../hub/static/css/mod/gist-item.scss */ +tbody { + display: table-row-group; + vertical-align: middle; + border-color: inherit; +} + +/* line 16, ../../../hub/static/css/mod/gist-item.scss */ +.file-box { + background-color: #DDD; + border: 1px solid #CCC; + margin-bottom: 1em; + position: relative; +} + +/* line 17, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .data { + background-color: ghostWhite; + font-size: 12px; + overflow: auto; +} + +/* line 18, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .highlight { + border: none; + padding: 0; +} + +/* line 19, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .data tr:last-child td.line_numbers, .file-box .data tr:last-child .line_data { + padding-bottom: 12px; +} + +/* line 20, ../../../hub/static/css/mod/gist-item.scss */ +.file-box .data tr:first-child td.line_numbers, .file-box .data tr:first-child .line_data { + padding-top: 12px; +} + +/* line 21, ../../../hub/static/css/mod/gist-item.scss */ +.highlight { + background: white; +} + +/* line 22, ../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box:only-child { + border-bottom: 1px solid #CCC; +} + +/* line 23, ../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box .data { + background: ghostWhite; +} + +/* line 24, ../../../hub/static/css/mod/gist-item.scss */ +.gist-item .file-box { + position: relative; +} + +/* line 25, ../../../hub/static/css/mod/gist-item.scss */ +.bubble .file-box { + background: #ECECEC; + margin-bottom: 0; +} + +/* line 26, ../../../hub/static/css/mod/gist-item.scss */ +.bubble.secret { + background-color: #F8EEC7; +} diff --git a/dist/css/mod/gist-miniicon.css b/dist/css/mod/gist-miniicon.css new file mode 100644 index 0000000..6963dec --- /dev/null +++ b/dist/css/mod/gist-miniicon.css @@ -0,0 +1,134 @@ +/* line 1, ../../../hub/static/css/mod/gist-miniicon.scss */ +.minibutton .mini-icon { + vertical-align: -2px; +} + +/* line 2, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist::before { + content: "\f00e"; +} + +/* line 3, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-gist-secret::before { + content: "\f28c"; + color: #F8EEC7; +} + +/* line 4, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-add::before { + content: "\f07a"; +} + +/* line 5, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-private::before { + content: "\f00f"; +} + +/* line 6, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-forked::before { + content: "\f079"; +} + +/* line 7, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-starred::before { + content: "\f02a"; +} + +/* line 8, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-up::before { + content: "\f03d"; +} + +/* line 9, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-secret::before { + content: "\f08c"; +} + +/* line 10, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-fork::before { + content: "\f020"; +} + +/* line 11, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-gist-star::before { + content: "\f02a"; +} + +/* line 12, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-down::before { + content: "\f03f"; +} + +/* line 13, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-commit-comment::before { + content: "\f02b"; +} + +/* line 14, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-code::before { + content: "\f05f"; +} + +/* line 15, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-link::before { + content: "\f05c"; +} + +/* line 16, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-edit::before { + content: "\f058"; +} + +/* line 17, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::beforeremove-close::before { + content: "\f050"; +} + +/* line 18, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-arr-right::before { + content: "\f03e"; +} + +/* line 19, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-diff::before { + content: "\f04d"; +} + +/* line 20, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-download::before { + content: "\f00b"; +} + +/* line 21, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mini-icon-logout::before { + content: "\f032"; +} + +/* line 22, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-code-file::before, .mega-icon-download-unknown::before { + content: "\f210"; +} + +/* line 23, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-arr-right::before { + content: "\f23e"; +} + +/* line 24, ../../../hub/static/css/mod/gist-miniicon.scss */ +.mega-icon-gist-add::before { + content: "\f27a"; +} + +/* line 25, ../../../hub/static/css/mod/gist-miniicon.scss */ +.discussion-bubble .discussion-bubble-content::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + position: absolute; + left: -10px; + top: 15px; +} diff --git a/dist/css/mod/gist-recent.css b/dist/css/mod/gist-recent.css new file mode 100644 index 0000000..4b85dc2 --- /dev/null +++ b/dist/css/mod/gist-recent.css @@ -0,0 +1,61 @@ +/* line 1, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists { + display: block; +} + +/* line 2, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists::after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* line 3, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists ul { + list-style: none; + margin: 0; + padding: 0; +} + +/* line 4, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists li { + display: list-item; + text-align: -webkit-match-parent; + float: left; + width: 200px; +} + +/* line 5, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .metadata { + color: #999; +} + +/* line 6, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .description .blank { + color: rgba(153, 153, 153, 0.5); +} + +/* line 7, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .your-gists { + float: right; + width: 108px; +} + +/* line 8, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .mega-icon::before, .entry-title .meta-icon::before { + font-size: 32px; +} + +/* line 9, ../../../hub/static/css/mod/gist-recent.scss */ +.recent-gists .mega-icon { + color: #B9B9B9; + float: left; + top: -1px; + left: -4px; + position: relative; + font-size: 32px; + width: 32px; + height: 32px; +} diff --git a/dist/css/mod/gist-render.css b/dist/css/mod/gist-render.css new file mode 100644 index 0000000..f0041ec --- /dev/null +++ b/dist/css/mod/gist-render.css @@ -0,0 +1,27 @@ +/* line 1, ../../../hub/static/css/mod/gist-render.scss */ +.link-overlay { + height: 100%; + width: 100%; + position: absolute; + visibility: hidden; + z-index: 50; +} + +/* line 2, ../../../hub/static/css/mod/gist-render.scss */ +.link-overlay .link { + background-color: rgba(0, 0, 0, 0.75); + color: white; + margin: -14px 0 0 0; + padding: 4px 8px 4px 10px; + height: 20px; + position: absolute; + top: 20px; + right: 6px; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/gist-render.scss */ +.link-overlay .link .mini-icon { + position: relative; + top: 2px; +} diff --git a/dist/css/mod/github.css b/dist/css/mod/github.css new file mode 100644 index 0000000..ce11b6d --- /dev/null +++ b/dist/css/mod/github.css @@ -0,0 +1,15 @@ +/* line 1, ../../../hub/static/css/mod/github.scss */ +span.github-actions { + float: right; +} + +/* line 2, ../../../hub/static/css/mod/github.scss */ +.new-github-form input#github { + padding: 6px; + margin: 2px 2px 2px 0px; +} + +/* line 3, ../../../hub/static/css/mod/github.scss */ +.new-github-form dd { + margin-left: 0px; +} diff --git a/dist/css/mod/inline-comment-form.css b/dist/css/mod/inline-comment-form.css new file mode 100644 index 0000000..cb27ef6 --- /dev/null +++ b/dist/css/mod/inline-comment-form.css @@ -0,0 +1,207 @@ +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment-form.scss */ +.show-inline-comment-form { + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment-form.scss */ +tr.inline-comments.show-inline-comment-form .show-inline-comment-form { + display: none; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .comment-count { + overflow: hidden; + padding: 0 !important; + border: solid #DDD; + border-width: 1px 0; + vertical-align: top; + text-align: center !important; +} + +/* line 8, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .counter { + display: inline-block; + padding: 2px 8px 6px; + font-family: 11px/1.2 bold Helvetica,arial,freesans,clean,sans-serif !important; + color: #333 !important; + border: 1px solid #C0CCD0; + border-top: 0; + border-radius: 0 0 3px 3px; + cursor: default !important; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment-form.scss */ +#files .file.show-inline-notes tr.inline-comments { + display: table-row; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .line-comments { + overflow: auto; + padding: 0; + border-top: 1px solid #CCC; + border-bottom: 1px solid #DDD; + background: #fff; + font-family: Helvetica, arial, freesans, clean, sans-serif !important; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form { + max-width: 870px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form form { + margin: 0; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .form-actions { + padding: 0 10px 10px; + margin: 0; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-content .form-actions { + background-color: transparent; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions { + text-align: right; + padding-bottom: 5px; + background: #fff; + border: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions .optional { + display: block; + padding-top: 8px; + float: left; + margin-right: 15px; + padding-top: 3px; +} diff --git a/dist/css/mod/inline-comment.css b/dist/css/mod/inline-comment.css new file mode 100644 index 0000000..391e8bb --- /dev/null +++ b/dist/css/mod/inline-comment.css @@ -0,0 +1,400 @@ +@charset "UTF-8"; +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment-form.scss */ +.show-inline-comment-form { + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment-form.scss */ +tr.inline-comments.show-inline-comment-form .show-inline-comment-form { + display: none; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .comment-count { + overflow: hidden; + padding: 0 !important; + border: solid #DDD; + border-width: 1px 0; + vertical-align: top; + text-align: center !important; +} + +/* line 8, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .counter { + display: inline-block; + padding: 2px 8px 6px; + font-family: 11px/1.2 bold Helvetica,arial,freesans,clean,sans-serif !important; + color: #333 !important; + border: 1px solid #C0CCD0; + border-top: 0; + border-radius: 0 0 3px 3px; + cursor: default !important; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment-form.scss */ +#files .file.show-inline-notes tr.inline-comments { + display: table-row; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .line-comments { + overflow: auto; + padding: 0; + border-top: 1px solid #CCC; + border-bottom: 1px solid #DDD; + background: #fff; + font-family: Helvetica, arial, freesans, clean, sans-serif !important; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form { + max-width: 870px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comment-form form { + margin: 0; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment-form.scss */ +.inline-comments .form-actions { + padding: 0 10px 10px; + margin: 0; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-content .form-actions { + background-color: transparent; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions { + text-align: right; + padding-bottom: 5px; + background: #fff; + border: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment-form.scss */ +.form-actions .optional { + display: block; + padding-top: 8px; + float: left; + margin-right: 15px; + padding-top: 3px; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 5, ../../../hub/static/css/mod/inline-comment.scss */ +.inline-comments .comment-holder { + max-width: 850px; + margin: 10px; +} + +/* line 6, ../../../hub/static/css/mod/inline-comment.scss */ +.inline-comments .comment { + margin: 5px 0 !important; + border: 1px solid #CACACA; +} + +/* line 7, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header { + height: 33px; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: #F8F8F8; + font-size: 12px; + background-image: -webkit-linear-gradient(top, #F4FAF6, #D8E5DD); +} + +/* line 8, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-gravatar { + display: inline-block; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} + +/* line 9, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-author { + display: inline-block; + max-width: 600px; + height: 33px; + line-height: 33px; + font-weight: bold; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-right { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + ine-height: 33px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + line-height: 33px; +} + +/* line 12, ../../../hub/static/css/mod/inline-comment.scss */ +.mini-icon-delete-note::before, .mini-icon-remove-close::before { + content: ""; +} + +/* line 13, ../../../hub/static/css/mod/inline-comment.scss */ +.mini-icon-edit:before { + content: ""; +} + +/* line 14, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions { + display: inline-block; + vertical-align: middle; + font-size: 13px; + margin-left: 7px; +} + +/* line 15, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .mini-icon { + color: #939AA0; + margin: 0 2px 0 1px; + position: relative; + top: 2px; +} + +/* line 16, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions li .mini-icon { + -moz-transition: all 0.15s ease-in 0; + -webkit-transition: all 0.15s ease-in 0; + text-decoration: none; +} + +/* line 17, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-date { + color: #939AA0; + text-decoration: none; +} + +/* line 18, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-content { + padding: 0; + color: #333; + font-size: 12px; + background: #FBFBFB; +} + +/* line 19, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 20, ../../../hub/static/css/mod/inline-comment.scss */ +.comment-header .comment-header-actions li { + list-style-type: none; + float: left; + margin: 0 0 0 8px; +} diff --git a/dist/css/mod/issue-body.css b/dist/css/mod/issue-body.css new file mode 100644 index 0000000..1655a9b --- /dev/null +++ b/dist/css/mod/issue-body.css @@ -0,0 +1,270 @@ +/* line 5, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content { + word-wrap: break-word; + word-break: normal; +} +/* line 10, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .side-avatar a:hover { + text-decoration: none; +} +/* line 14, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .side-avatar img { + width: 48px; + height: 48px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 20, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + display: block; + margin-left: 65px; + /* Milestone */ +} +/* line 25, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .form-content { + padding: 0px; +} +/* line 29, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .is-comment-editing .content-body { + display: none; +} +/* line 33, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary h2 { + font-size: 24px; +} +/* line 37, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions { + float: right; + text-align: right; +} +/* line 41, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions li { + display: inline; +} +/* line 45, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary ul.actions #upvote i { + position: absolute; +} +/* line 49, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom { + margin-top: 10px; +} +/* line 52, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .assignee { + float: right; + margin-right: 10px; +} +/* line 56, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .state { + float: left; +} +/* line 58, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .summary-bottom .state a#issue-closer { + padding-left: 10px; +} +/* line 64, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body { + display: block; +} +/* line 66, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body .milestone-bar-title { + display: inline; +} +/* line 68, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #summary .milestone-body .milestone-bar-title label { + display: inline; +} +/* line 76, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .participation p { + display: inline-block; + margin-left: 15px; +} +/* line 82, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog { + padding: 0px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 86, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change { + padding: 10px 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 90, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-text { + padding: 10px; +} +/* line 93, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change:hover .change-bottom .comment-header-actions { + display: inline; +} +/* line 96, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom { + position: relative; +} +/* line 98, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .comment-header-actions { + display: none; + position: absolute; + bottom: 10px; + left: 10px; +} +/* line 104, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile { + float: right; +} +/* line 106, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile p { + margin: 5px; + display: inline-block; +} +/* line 110, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile a.change-header-date { + color: lightgray; +} +/* line 113, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar { + float: none; +} +/* line 116, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar a:hover { + text-decoration: none; +} +/* line 120, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog .change .change-bottom .author-profile .side-avatar img { + width: 32px; + height: 32px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 130, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content #changelog > .change:last-child { + border-bottom: none; +} +/* line 134, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .is-comment-editing .change-text { + display: none; +} +/* line 138, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .markdown-body pre { + font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace; + margin: 0; + border: 0; +} +/* line 144, ../../../hub/static/css/mod/issue-body.scss */ +#issue #content .avatar.avatar-tiny { + display: inline-block; + margin: 0 3px 0 0; + vertical-align: baseline; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* modal */ +/* line 155, ../../../hub/static/css/mod/issue-body.scss */ +.modal-header { + background: #63b6ae; + color: white; + text-shadow: none; +} +/* line 160, ../../../hub/static/css/mod/issue-body.scss */ +.modal-header p { + margin: 0; +} + +/* line 165, ../../../hub/static/css/mod/issue-body.scss */ +.modal-body { + text-shadow: none; +} + +/* line 169, ../../../hub/static/css/mod/issue-body.scss */ +.modal-footer { + background: #63b6ae; + color: white; + text-shadow: none; +} + +/* line 175, ../../../hub/static/css/mod/issue-body.scss */ +.quick-emoji .emojis { + height: 120px; +} + +/* Tag */ +/* line 180, ../../../hub/static/css/mod/issue-body.scss */ +ul.tagit li.tagit-choice { + margin-top: 6px; +} + +/* line 183, ../../../hub/static/css/mod/issue-body.scss */ +ul.tagit input[type="text"] { + width: 540px; +} + +/* line 186, ../../../hub/static/css/mod/issue-body.scss */ +.tag-groups p { + margin: 0; +} + +/* line 189, ../../../hub/static/css/mod/issue-body.scss */ +.tag-groups { + margin-bottom: 10px; +} + +/* Milestone */ +/* line 195, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu { + list-style: none; + display: block; + float: none; + position: relative; + margin-bottom: 5px; + border: 1px solid rgba(0, 0, 0, 0.2); + padding: 5px 0; + border-color: rgba(99, 182, 174, 0.8); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +/* line 208, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu > li > a:hover, +#milestone-modal .milestone-menu > li > a:focus, +#milestone-modal .milestone-menu > .active > a, +#milestone-modal .milestone-menu > .active > a:hover, +#milestone-modal .milestone-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background: #63b6ae; +} +/* line 217, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal .milestone-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + white-space: nowrap; +} +/* line 226, ../../../hub/static/css/mod/issue-body.scss */ +#milestone-modal input[type=radio] { + display: none; +} + +/* Issue for Responsive Mobile Hacks */ +@media (max-width: 767px) { + /* line 236, ../../../hub/static/css/mod/issue-body.scss */ + #issue #content .mod { + margin-left: 35px; + } + /* line 239, ../../../hub/static/css/mod/issue-body.scss */ + #issue #content span.side-avatar img.discussion-bubble-avatar { + width: 30px; + height: 30px; + } +} diff --git a/dist/css/mod/issues-list.css b/dist/css/mod/issues-list.css new file mode 100644 index 0000000..b2fda57 --- /dev/null +++ b/dist/css/mod/issues-list.css @@ -0,0 +1,97 @@ +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 3, ../../../hub/static/css/mod/issues-list.scss */ +.new-issue { + float: left; +} + +/* line 7, ../../../hub/static/css/mod/issues-list.scss */ +.sortby-issues { + float: right; +} + +/* line 11, ../../../hub/static/css/mod/issues-list.scss */ +.issues-topbar { + overflow: hidden; + display: block; +} + +/* line 16, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list { + background: white; + margin-bottom: 20px; + border-bottom: 1px solid #eaeaea; +} +/* line 21, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list > :first-child { + margin-top: 0px; +} +/* line 25, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item { + padding: 15px; + border-bottom: 1px solid #eaeaea; +} +/* line 29, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 { + font-size: 16px; + font-weight: 400; + overflow: hidden; + word-break: break-all; + margin: 0; +} +/* line 36, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item h3 a { + color: #273338; +} +/* line 42, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item p a { + color: #999; +} +/* line 51, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .issue-item .meta { + margin-top: 20px; +} +/* line 55, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list a.comment-count, +.issue-list a.comment-count:link, +.issue-list span.issue-info { + color: #bbb; +} +/* line 61, ../../../hub/static/css/mod/issues-list.scss */ +.issue-list .rule { + clear: both; + height: 0px; + padding: 0; + overflow: hidden; + background: transparent; +} diff --git a/dist/css/mod/issues-sidebar.css b/dist/css/mod/issues-sidebar.css new file mode 100644 index 0000000..2b53b87 --- /dev/null +++ b/dist/css/mod/issues-sidebar.css @@ -0,0 +1,82 @@ +/* line 2, ../../../hub/static/css/mod/navbar-search.scss */ +.navbar-search i { + color: #63b6ae; + padding-right: 4px; +} + +/* line 4, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar { + background: #fff; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + margin-bottom: 20px; +} +/* line 9, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .nav { + margin: 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 15, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .issue-tags { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +} +/* line 19, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:first-child { + -moz-border-radius-topleft: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-topright: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} +/* line 24, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar > *:last-child { + -moz-border-radius-bottomleft: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 29, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .rule { + clear: both; + height: 0px; + padding: 0; + margin: 0; + overflow: hidden; + border: none; + background: transparent; + border-bottom: 3px solid rgba(99, 182, 174, 0.2); +} +/* line 40, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label { + margin: 2px 0px; +} +/* line 42, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a { + color: #63b6ae; + text-decoration: none; +} +/* line 45, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .label a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} +/* line 54, ../../../hub/static/css/mod/issues-sidebar.scss */ +.issues-sidebar .well { + margin-bottom: 0; + overflow: hidden; +} diff --git a/dist/css/mod/issues-tab.css b/dist/css/mod/issues-tab.css new file mode 100644 index 0000000..1588307 --- /dev/null +++ b/dist/css/mod/issues-tab.css @@ -0,0 +1,35 @@ +/* line 2, ../../../hub/static/css/mod/issues-tab.scss */ +ul.filter-list .filter-item { + border-radius: 3px 3px 3px 3px; + color: #777777; + display: block; + font-size: 14px; + margin: 0 0 5px; + overflow: hidden; + padding: 8px 10px; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* line 15, ../../../hub/static/css/mod/issues-tab.scss */ +ul.filter-list .filter-item:hover { + background: none repeat scroll 0 0 #EEEEEE; +} + +/* line 19, ../../../hub/static/css/mod/issues-tab.scss */ +ul.filter-list .filter-item.selected { + background: none repeat scroll 0 0 #4183C4; + color: #FFFFFF; +} + +/* line 24, ../../../hub/static/css/mod/issues-tab.scss */ +ul.filter-list .filter-item .count { + float: right; + font-weight: bold; +} + +/* line 29, ../../../hub/static/css/mod/issues-tab.scss */ +.issues-tab { + margin-top: 27px; +} diff --git a/dist/css/mod/issues-topbar.css b/dist/css/mod/issues-topbar.css new file mode 100644 index 0000000..ab34dc2 --- /dev/null +++ b/dist/css/mod/issues-topbar.css @@ -0,0 +1,4 @@ +/* line 1, ../../../hub/static/css/mod/issues-topbar.scss */ +.issues-topbar { + padding-bottom: 10px; +} diff --git a/dist/css/mod/loader.css b/dist/css/mod/loader.css new file mode 100644 index 0000000..89303f1 --- /dev/null +++ b/dist/css/mod/loader.css @@ -0,0 +1,21 @@ +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} diff --git a/dist/css/mod/markdown-content.css b/dist/css/mod/markdown-content.css new file mode 100644 index 0000000..97f2e85 --- /dev/null +++ b/dist/css/mod/markdown-content.css @@ -0,0 +1,162 @@ +/* line 1, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body { + padding: 30px; +} + +/* line 4, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body > :first-child { + margin-top: 0 !important; +} + +/* line 7, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; +} + +/* line 20, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body h2 { + font-size: 24px; + border-bottom: 1px solid #CCC; + color: black; +} + +/* line 25, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body, +.markdown-body p { + font-size: 14px; + line-height: 1.6; +} + +/* line 30, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin: 15px 0; +} + +/* line 39, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul, +.markdown-body ol { + padding-left: 30px; +} + +/* line 43, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul li { + line-height: 1.6; +} + +/* line 46, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ul { + list-style: disc; +} + +/* line 49, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body ol { + list-style: decimal; +} + +/* line 52, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table { + width: 100%; +} + +/* line 55, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table caption + thead tr:first-child th, +.markdown-body table caption + thead tr:first-child td, +.markdown-body table colgroup + thead tr:first-child th, +.markdown-body table colgroup + thead tr:first-child td, +.markdown-body table thead:first-child tr:first-child th, +.markdown-body table thead:first-child tr:first-child td { + border-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table thead th { + vertical-align: bottom; +} + +/* line 66, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th { + font-weight: bold; +} + +/* line 69, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 77, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table th, +.markdown-body table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #ddd; +} + +/* line 85, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body table tbody > tr:nth-child(odd) > td, +.markdown-body table tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 89, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body .progress-percentage { + color: #888; +} + +/* line 93, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page { + padding: 0px; +} + +/* line 96, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page h1, +.markdown-page h2, +.markdown-page h3, +.markdown-page h4, +.markdown-page h5, +.markdown-page h6 { + position: static; +} + +/* line 104, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page pre { + font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 14px; +} + +/* line 108, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page .label { + background-color: transparent; +} + +/* line 111, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-page dd { + margin-left: 1.5em; +} + +/* line 114, ../../../hub/static/css/mod/markdown-content.scss */ +.markdown-body code { + white-space: pre-wrap; +} diff --git a/dist/css/mod/merge-guide.css b/dist/css/mod/merge-guide.css new file mode 100644 index 0000000..15d9a1d --- /dev/null +++ b/dist/css/mod/merge-guide.css @@ -0,0 +1,231 @@ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/merge-guide.scss */ +.pullrequest .merge-guide { + margin: 20px 0; +} + +/* line 4, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview { + margin: 10px 0 0 0; +} +/* line 7, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview .message, .commit-preview .commit-preview p.error { + clear: both; + padding: 5px; + background: #eaf2f5; + border: 1px solid #bedce7; +} +/* line 14, ../../../hub/static/css/mod/merge-guide.scss */ +.commit-preview .message pre { + font-size: 11px; + color: #333; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* line 24, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .mergeable { + padding: 8px 10px; + border: 1px solid #ddd; + border-radius: 2px; +} +/* line 30, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .mergeable.merging { + background-color: #589ab3; + background-image: -moz-linear-gradient(#82bccd, #589ab3); + background-image: -webkit-linear-gradient(#82bccd, #589ab3); + background-image: linear-gradient(#82bccd, #589ab3); + background-repeat: repeat-x; + border-color: #7699ad; + border-bottom-color: #648192; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-repeat: repeat-x; + border-color: #8bc384; +} +/* line 44, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable { + background-color: #6eda62; + background-image: -moz-linear-gradient(#9ee692, #6eda62); + background-image: -webkit-linear-gradient(#9ee692, #6eda62); + background-image: linear-gradient(#9ee692, #6eda62); +} +/* line 50, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable p.message { + color: #0b5f00; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.4); +} +/* line 54, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-clean .mergeable p.message span.blue { + color: blue; +} +/* line 58, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-dirty .mergeable, .merge-branch .dirty-cleanup .mergeable { + position: relative; + background-color: #f6e69f; + background-image: -moz-linear-gradient(#f6e69f, #f6e69f); + background-image: -webkit-linear-gradient(#f6e69f, #f6e69f); + background-image: linear-gradient(#f6e69f, #f6e69f); + background-repeat: repeat-x; + border-color: #888; +} +/* line 68, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch.mergeable-error .mergeable, .merge-branch .dirty-cleanup .mergeable { + position: relative; + background-color: #da4f49; + background-image: -moz-linear-gradient(#da4f49, #da4f49); + background-image: -webkit-linear-gradient(#da4f49, #da4f49); + background-image: linear-gradient(#da4f49, #da4f49); + background-repeat: repeat-x; + border-color: #888; +} +/* line 78, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .minibutton { + float: right; + margin: -3px 0 0 15px; +} +/* line 83, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch p.message { + margin: 0; + font-size: 13px; + font-weight: bold; +} +/* line 89, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .merge-form .merge-error-message { + display: none; + margin: 10px 0 0 0; + padding: 5px 7px; + color: #bd2c00; + font-weight: bold; + font-size: 12px; + line-height: 19px; + background: rgba(255, 255, 255, 0.8); + border-radius: 2px; +} +/* line 101, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview { + position: relative; + display: table-row; + font-size: 12px; +} +/* line 106, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .author { + display: table-cell; + width: 36px; + padding: 8px 10px; + vertical-align: top; + background: #d3e5eb; + border: 1px solid #bedce7; + border-right: none; +} +/* line 116, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .gravatar { + float: left; + margin: 2px 8px 0 0; +} +/* line 121, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message { + display: table-cell; + width: 805px; + padding: 8px 10px; + vertical-align: top; + background-color: #e7f0f3; + background-image: -moz-linear-gradient(#f6f9fa, #e7f0f3); + background-image: -webkit-linear-gradient(#f6f9fa, #e7f0f3); + background-image: linear-gradient(#f6f9fa, #e7f0f3); + background-repeat: repeat-x; + border: 1px solid #bedce7; +} +/* line 133, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message pre { + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 12px; + color: #5b6f74; +} +/* line 139, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-branch .commit-preview .message textarea { + margin-top: 5px; + box-sizing: border-box; + width: 100%; + height: 50px; + padding: 4px; + font-family: Monaco, "Liberation Mono", Courier, monospace; + font-size: 12px; + color: #666; + background-color: #fafafa; +} + +/* line 154, ../../../hub/static/css/mod/merge-guide.scss */ +.merge-form { + display: none; +} diff --git a/dist/css/mod/meta-nav.css b/dist/css/mod/meta-nav.css new file mode 100644 index 0000000..ec722eb --- /dev/null +++ b/dist/css/mod/meta-nav.css @@ -0,0 +1,38 @@ +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} diff --git a/dist/css/mod/mini-icons.css b/dist/css/mod/mini-icons.css new file mode 100644 index 0000000..bf99b66 --- /dev/null +++ b/dist/css/mod/mini-icons.css @@ -0,0 +1,29 @@ +/* mini-icons - from Github */ +/* TODO: Completely remove this component from anywhere in Code */ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.eot") format("eot"), url("/static/octicons/octicons-regular-webfont.eot#iefix") format("embedded-opentype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"), url("/static/octicons/octicons-regular-webfont.ttf") format("truetype"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 15, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon, +.mega-icon { + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + line-height: 1; + text-decoration: none; +} + +/* line 26, ../../../hub/static/css/mod/mini-icons.scss */ +.mini-icon::before, +.mega-icon::before { + -moz-transition: color .15s ease-in 0; + -webkit-transition: color .15s ease-in 0; + font-size: 16px; + text-decoration: none; +} diff --git a/dist/css/mod/minibutton.css b/dist/css/mod/minibutton.css new file mode 100644 index 0000000..7a0724b --- /dev/null +++ b/dist/css/mod/minibutton.css @@ -0,0 +1,70 @@ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} diff --git a/dist/css/mod/mobile_timeline.css b/dist/css/mod/mobile_timeline.css new file mode 100644 index 0000000..b22351a --- /dev/null +++ b/dist/css/mod/mobile_timeline.css @@ -0,0 +1,38 @@ +/* Timeline on mobile */ +/* line 2, ../../../hub/static/css/mod/mobile_timeline.scss */ +body { + margin: 0; + padding: 0; +} + +/* line 4, ../../../hub/static/css/mod/mobile_timeline.scss */ +.ui-footer ul li { + line-height: 32px; +} + +/* line 5, ../../../hub/static/css/mod/mobile_timeline.scss */ +.scrollable .wrap { + background: #fff; +} + +/* line 7, ../../../hub/static/css/mod/mobile_timeline.scss */ +.timeline { + width: 100%; + height: 100%; + position: fixed; + margin-top: 0; +} + +/* line 8, ../../../hub/static/css/mod/mobile_timeline.scss */ +.timeline .action, .timeline .pulls { + margin-bottom: 0.5em; + padding: 0 12px 0 32px; + border-bottom: 1px solid #f1f1f1; +} + +/* line 9, ../../../hub/static/css/mod/mobile_timeline.scss */ +.timeline .desc { + border: none; + margin-bottom: 0.5em; + padding-bottom: 5px; +} diff --git a/dist/css/mod/my-projects.css b/dist/css/mod/my-projects.css new file mode 100644 index 0000000..3f9f569 --- /dev/null +++ b/dist/css/mod/my-projects.css @@ -0,0 +1,43 @@ +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 3, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects { + margin-top: 5px; +} +/* line 4, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects a.right { + float: right; +} +/* line 8, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li .delete-btn { + display: none; +} +/* line 16, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects li.hover .delete-btn { + display: block; +} + +/* line 23, ../../../hub/static/css/mod/my-projects.scss */ +.my_projects .delete-btn { + padding: 0 6px 0 6px; +} diff --git a/dist/css/mod/my-pull-requests-tab.css b/dist/css/mod/my-pull-requests-tab.css new file mode 100644 index 0000000..12fbb01 --- /dev/null +++ b/dist/css/mod/my-pull-requests-tab.css @@ -0,0 +1,32 @@ +/* line 1, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item { + border-radius: 3px 3px 3px 3px; + color: #777777; + display: block; + font-size: 14px; + margin: 0 0 5px; + overflow: hidden; + padding: 8px 10px; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; +} +/* line 12, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item:hover { + background: none repeat scroll 0 0 #EEEEEE; +} +/* line 15, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item.selected { + background: none repeat scroll 0 0 #4183C4; + color: #FFFFFF; +} +/* line 19, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +ul.filter-list .filter-item .count { + float: right; + font-weight: bold; +} + +/* line 25, ../../../hub/static/css/mod/my-pull-requests-tab.scss */ +.my-pull-requests-tab { + margin-top: 27px; +} diff --git a/dist/css/mod/nav-search-dropdown-codeui.css b/dist/css/mod/nav-search-dropdown-codeui.css new file mode 100644 index 0000000..eb03224 --- /dev/null +++ b/dist/css/mod/nav-search-dropdown-codeui.css @@ -0,0 +1,52 @@ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 370px; + background-color: white; + border: 1px solid rgba(99, 182, 174, 0.4); + z-index: 100; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu ul li.active { + background: #63b6ae; + color: #fff; +} + +/* line 12, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 13, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 14, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 15, ../../../hub/static/css/mod/nav-search-dropdown-codeui.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} diff --git a/dist/css/mod/nav-search-dropdown.css b/dist/css/mod/nav-search-dropdown.css new file mode 100644 index 0000000..2c7f5f8 --- /dev/null +++ b/dist/css/mod/nav-search-dropdown.css @@ -0,0 +1,52 @@ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} diff --git a/dist/css/mod/nav.css b/dist/css/mod/nav.css new file mode 100644 index 0000000..d6429f1 --- /dev/null +++ b/dist/css/mod/nav.css @@ -0,0 +1,108 @@ +/* TODO: still has Github UI in this mod */ +/* line 2, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu { + display: none; + position: absolute; + top: 30px; + width: 228px; + background-color: white; + border: 1px solid #EEE; + z-index: 100; +} + +/* line 3, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li { + min-height: 25px; + padding: 3px; + color: #666; + cursor: pointer; + word-wrap: break-word; +} + +/* line 4, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.active { + background: #4183C4; + color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro { + padding: 7px; + color: #666; +} + +/* line 6, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu ul li.intro.active { + background: #fff; + padding: 7px; + color: #666; +} + +/* line 7, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .repo-name { + padding: 3px; +} + +/* line 8, ../../../hub/static/css/mod/nav-search-dropdown.scss */ +#search-repos-menu .avatar img { + float: left; + border: none; + width: 24px; + height: 24px; + margin-right: 5px; +} + +/* line 4, ../../../hub/static/css/mod/nav.scss */ +.navbar .container { + width: 100%; +} + +/* line 5, ../../../hub/static/css/mod/nav.scss */ +div.navbar .nav-logo { + float: left; + margin: 2px 2px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/nav.scss */ +.span4 .items { + max-width: 300px; +} + +/* line 7, ../../../hub/static/css/mod/nav.scss */ +body div.container { + max-width: 940px; +} + +/* line 9, ../../../hub/static/css/mod/nav.scss */ +.btn-back { + float: left; + margin-right: 5px; +} + +/* other responsive styles */ +@media (max-width: 767px) { + /* line 17, ../../../hub/static/css/mod/nav.scss */ + body { + padding: 50px 0px 0px; + } + + /* line 20, ../../../hub/static/css/mod/nav.scss */ + body div.container { + max-width: 950px; + padding: 5px 5px; + } + + /* line 24, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin: 0px 0px; + } +} +@media (max-width: 979px) { + /* line 32, ../../../hub/static/css/mod/nav.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + position: fixed; + } +} diff --git a/dist/css/mod/navbar-search.css b/dist/css/mod/navbar-search.css new file mode 100644 index 0000000..646fd5f --- /dev/null +++ b/dist/css/mod/navbar-search.css @@ -0,0 +1,5 @@ +/* line 2, ../../../hub/static/css/mod/navbar-search.scss */ +.navbar-search i { + color: #63b6ae; + padding-right: 4px; +} diff --git a/dist/css/mod/notification.css b/dist/css/mod/notification.css new file mode 100644 index 0000000..b32c0b3 --- /dev/null +++ b/dist/css/mod/notification.css @@ -0,0 +1,31 @@ +/* line 1, ../../../hub/static/css/mod/notification.scss */ +#settings-notifications h4 { + margin: 15px 0 5px 0; + font-size: 14px; + color: black; +} + +/* line 2, ../../../hub/static/css/mod/notification.scss */ +.user-mention { + font-weight: bold; + color: #333; +} + +/* line 3, ../../../hub/static/css/mod/notification.scss */ +#settings-notifications ul.compact-options { + margin: -6px 0 13px 0; +} + +/* line 4, ../../../hub/static/css/mod/notification.scss */ +#settings-notifications ul.compact-options li { + margin: 0 15px 0 0; + list-style-type: none; + font-weight: bold; +} + +/* line 5, ../../../hub/static/css/mod/notification.scss */ +.horizontal_line { + margin: 10px 0 10px -10px; + padding: 0 10px; + width: 100%; +} diff --git a/dist/css/mod/pagination.css b/dist/css/mod/pagination.css new file mode 100644 index 0000000..72fbd27 --- /dev/null +++ b/dist/css/mod/pagination.css @@ -0,0 +1,31 @@ +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} diff --git a/dist/css/mod/praise.css b/dist/css/mod/praise.css new file mode 100644 index 0000000..6af0e00 --- /dev/null +++ b/dist/css/mod/praise.css @@ -0,0 +1,126 @@ +/* line 1, ../../../hub/static/css/mod/praise.scss */ +.recs, .rec-paginator { + margin: 35px 87px; +} + +/* line 2, ../../../hub/static/css/mod/praise.scss */ +.recs .rec { + margin-bottom: 36px; + width: 100%; +} + +/* line 3, ../../../hub/static/css/mod/praise.scss */ +.rec blockquote { + padding-left: 1.5em; + color: #404040; + background: url(/static/img/big_quotel.png) no-repeat 0 0 transparent; + margin: 0 15px; + border: none; + font-size: 15px; +} + +/* line 4, ../../../hub/static/css/mod/praise.scss */ +.rec .to-user-info { + margin-bottom: 15px; +} + +/* line 5, ../../../hub/static/css/mod/praise.scss */ +.rec .to-user-info img { + margin: 0 7px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/praise.scss */ +.rec .from-user-info { + float: right; + display: inline-block; + font-style: italic; +} + +/* line 7, ../../../hub/static/css/mod/praise.scss */ +.rec img { + width: 32px; + height: 32px; + margin-left: 7px; +} + +/* line 8, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons { + float: left; + text-align: center; +} + +/* line 9, ../../../hub/static/css/mod/praise.scss */ +.rec a.rec-vote { + display: block; + position: relative; + width: 24px; + height: 24px; + opacity: 0.5; +} + +/* line 10, ../../../hub/static/css/mod/praise.scss */ +.rec a.rec-vote:hover { + opacity: 0.8; +} + +/* line 11, ../../../hub/static/css/mod/praise.scss */ +.rec a.rec-vote { + background: url("/static/img/arrow-up.png") no-repeat scroll center center transparent; +} + +/* line 12, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons.likes a.rec-vote, .rec .vote-buttons.voted a.rec-vote { + background: url("/static/img/arrow-up-orange.png") no-repeat scroll center center transparent; +} + +/* line 13, ../../../hub/static/css/mod/praise.scss */ +.rec .rec-score { + font-weight: bold; + font-size: 20px; + margin-top: 3px; +} + +/* line 14, ../../../hub/static/css/mod/praise.scss */ +.rec .rec-score.current { + color: #C6C6C6; + display: block; +} + +/* line 15, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons.likes .rec-score.current { + display: none; +} + +/* line 16, ../../../hub/static/css/mod/praise.scss */ +.rec .rec-score.likes { + display: none; + color: #FF8B60; +} + +/* line 17, ../../../hub/static/css/mod/praise.scss */ +.rec .vote-buttons.likes .rec-score.likes { + display: block; +} + +/* line 19, ../../../hub/static/css/mod/praise.scss */ +.rec .item-right { + margin-left: 32px; + padding: 12px 5px; + border-bottom: 1px solid #DDD; +} + +/* line 20, ../../../hub/static/css/mod/praise.scss */ +.rec .item-right:hover { + background: #FFF6ED; + border-bottom: 1px solid #FFF6ED; +} + +/* line 22, ../../../hub/static/css/mod/praise.scss */ +.rec-paginator { + font-size: 14px; +} + +/* line 23, ../../../hub/static/css/mod/praise.scss */ +.rec-paginator .next { + float: right; +} diff --git a/dist/css/mod/project-info.css b/dist/css/mod/project-info.css new file mode 100644 index 0000000..38db4b2 --- /dev/null +++ b/dist/css/mod/project-info.css @@ -0,0 +1,289 @@ +@charset "UTF-8"; +/* line 1, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav { + margin-top: 6px; +} + +/* line 3, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label { + position: relative; + display: inline-block; + margin-left: 3px; + padding: 3px 7px; + border: 1px solid #ccc; + border-radius: 3px; + color: #333; + background-color: #fafafa; + vertical-align: middle; +} + +/* line 15, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::before, .metanav .counts-label::after { + content: ""; + position: absolute; + top: 50%; + right: 100%; + display: block; + margin-right: 0px; + margin-top: -6px; + width: 0; + height: 0; + border: 6px solid transparent; + border-right-color: #ccc; +} + +/* line 29, ../../../hub/static/css/mod/meta-nav.scss */ +.metanav .counts-label::after { + margin-right: -1px; + border-right-color: #fafafa; +} + +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} + +/* fix project title for newer version of bootstrap*/ +/* line 6, ../../../hub/static/css/mod/project-info.scss */ +.pagehead .pull-left { + margin: 0; + font-size: 30px; + line-height: 36px; +} + +/* Hotfix for FlatUI */ +/* line 13, ../../../hub/static/css/mod/project-info.scss */ +.pagehead h2.pull-left { + margin: 0; +} + +/* line 17, ../../../hub/static/css/mod/project-info.scss */ +#project-info { + border: 1px solid #c5d5dd; + border-radius: 3px; + width: 100%; +} + +/* line 22, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div { + padding: 10px; +} + +/* line 25, ../../../hub/static/css/mod/project-info.scss */ +#project-info p { + margin: 0px; +} + +/* line 28, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.team-label { + border-top: 1px solid #ccc; +} + +/* line 32, ../../../hub/static/css/mod/project-info.scss */ +#project-info > div.git-url { + border-top: 1px solid #ccc; +} + +/* line 36, ../../../hub/static/css/mod/project-info.scss */ +#project-info input.git-url { + width: 480px; + margin: 0px; + cursor: auto; +} + +/* line 43, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.ssh-url { + display: inline; +} +/* line 46, ../../../hub/static/css/mod/project-info.scss */ +#project-info .ssh div.http-url { + display: none; +} + +/* line 52, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.ssh-url { + display: none; +} +/* line 55, ../../../hub/static/css/mod/project-info.scss */ +#project-info .http div.http-url { + display: inline; +} + +/* line 60, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar { + margin-top: 12px; + border-bottom: 1px solid #DDD; +} + +/* line 61, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar #back-old-browser { + padding-top: 8px; + float: right; +} + +/* line 62, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab { + padding-left: 20px; +} + +/* line 63, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li { + display: inline-block; + vertical-align: top; + cursor: pointer; +} + +/* line 64, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a { + color: #666; + text-decoration: none; + padding: 8px 12px; + display: inline-block; + border-left: 1px solid transparent; + border-top: 1px solid transparent; + border-right: 1px solid transparent; + margin-bottom: -1px; +} + +/* line 65, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar ul.tab li a.active { + color: #333; + font-weight: bold; + border-left: 1px solid #DDD; + border-top: 1px solid #DDD; + border-right: 1px solid #DDD; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + background-color: white; +} + +/* line 67, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope { + float: left; + margin-right: 10px; +} + +/* line 71, ../../../hub/static/css/mod/project-info.scss */ +.sourcenav-bar .scope i { + font-style: normal; +} + +/* line 75, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb { + margin: 10px 0; + font-size: 18px; + font-weight: bold; + color: #999; +} + +/* line 76, ../../../hub/static/css/mod/project-info.scss */ +#breadcrumb .final-path { + color: #000; +} diff --git a/dist/css/mod/project-item.css b/dist/css/mod/project-item.css new file mode 100644 index 0000000..2919353 --- /dev/null +++ b/dist/css/mod/project-item.css @@ -0,0 +1,68 @@ +/* Echo out a label for the example */ +/* line 2, ../../../hub/static/css/mod/project-item.scss */ +.bs-docs-project:after { + content: "Proj"; +} + +/* line 6, ../../../hub/static/css/mod/project-item.scss */ +.bs-docs-fork:after { + content: "Fork"; +} + +/* line 10, ../../../hub/static/css/mod/project-item.scss */ +.project-item { + overflow: hidden; + word-wrap: break-word; + word-break: normal; + min-height: 80px; + position: relative; + margin: 15px 0; + padding: 14px 19px 14px 49px; + *padding-top: 14px; + background-color: transparent; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +/* line 25, ../../../hub/static/css/mod/project-item.scss */ +.project-item:after { + position: absolute; + top: -1px; + left: -1px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #ddd; + color: #9da0a4; + -webkit-border-radius: 4px 0 4px 0; + -moz-border-radius: 4px 0 4px 0; + border-radius: 4px 0 4px 0; +} +/* line 40, ../../../hub/static/css/mod/project-item.scss */ +.project-item h4.project-title { + margin: 0; +} +/* line 42, ../../../hub/static/css/mod/project-item.scss */ +.project-item h4.project-title i { + margin-top: 5px; +} +/* line 47, ../../../hub/static/css/mod/project-item.scss */ +.project-item ul.project-stats li { + float: left; + margin-left: 10px; +} +/* line 52, ../../../hub/static/css/mod/project-item.scss */ +.project-item .summary { + margin-top: 10px; +} +/* line 55, ../../../hub/static/css/mod/project-item.scss */ +.project-item .commit-graph { + position: absolute; + left: 10px; + bottom: 0; + z-index: -9999; + height: 80px; + width: 440px; +} diff --git a/dist/css/mod/pull-codereview.css b/dist/css/mod/pull-codereview.css new file mode 100644 index 0000000..f2ddad7 --- /dev/null +++ b/dist/css/mod/pull-codereview.css @@ -0,0 +1,46 @@ +/* codereview style */ +/* comments style is also used in pull-new page's description input box */ +/* line 5, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comments { + padding: 5px; +} + +/* line 8, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment { + margin: 5px 0; + border: 1px solid #CACACA; +} + +/* line 12, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-meta { + padding: 5px 10px; + border-bottom: 1px solid #CCC; + background-image: linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -o-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -moz-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -webkit-linear-gradient(top, #F4F8F9, #DCE8EC); + background-image: -ms-linear-gradient(top, #F4F8F9, #DCE8EC); +} + +/* line 22, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment .body { + color: #333; + font-size: 13px; + padding: 10px; + background: #FBFBFB; +} + +/* line 29, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-form .help { + margin: 3px 0 0 0; + float: right; + font-size: 11px; + color: #666; +} + +/* line 35, ../../../hub/static/css/mod/pull-codereview.scss */ +.comments-row .comment-form textarea { + width: 100%; + height: 100px; + font-size: 12px; +} diff --git a/dist/css/mod/pull-comment.css b/dist/css/mod/pull-comment.css new file mode 100644 index 0000000..1ab841d --- /dev/null +++ b/dist/css/mod/pull-comment.css @@ -0,0 +1,173 @@ +/* line 1, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content { + padding: 0; + width: 100%; +} + +/* line 2, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content { + padding: 10px; + display: none; + opacity: 1.0; +} + +/* line 3, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content.is-comment-editing .comment-body { + display: none; +} + +/* line 4, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content.is-comment-editing .form-content { + display: block; + background-color: #fff; +} + +/* line 5, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content form { + margin: 0; +} + +/* line 6, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content input.title-field { + font-size: 20px; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content input[type="text"] { + margin-bottom: 5px; + width: 99%; +} + +/* line 8, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content textarea { + margin: 0; + width: 99%; + max-width: 100%; + height: 100px; + min-height: 100px; +} + +/* line 9, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .form-content .form-actions { + padding: 0; + margin: 10px 0 0 0; +} + +/* line 10, ../../../hub/static/css/mod/pull-comment.scss */ +.comment-content .comment-cancel-button { + float: left; +} + +/* line 12, ../../../hub/static/css/mod/pull-comment.scss */ +.pullrequest #attachments, .pullrequest .foldable, .pullrequest .threading { + display: none; +} + +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* Button style from hub.css */ +/* line 17, ../../../hub/static/css/mod/pull-comment.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} diff --git a/dist/css/mod/pull-github.css b/dist/css/mod/pull-github.css new file mode 100644 index 0000000..be43203 --- /dev/null +++ b/dist/css/mod/pull-github.css @@ -0,0 +1,304 @@ +/*========= Github Style ========*/ +/* line 4, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat { + white-space: nowrap; + text-align: right; + font-family: Helvetica,arial,freesans,clean,sans-serif; + color: #666; + font-weight: bold; + font-size: 11px; +} + +/* line 12, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat a { + text-decoration: none; + color: #666; +} + +/* line 16, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar { + position: relative; + left: -3px; + display: inline-block; + height: 12px; + text-decoration: none; + text-align: left; + color: #EEE; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + font-size: 16px; + letter-spacing: -7px; +} + +/* line 34, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.plus { + color: #61C423; + font-style: normal; +} + +/* line 39, ../../../hub/static/css/mod/pull-github.scss */ +span.diffstat .diffstat-bar.diff-added, +span.diffstat .diffstat-bar i.minus { + color: #C52323; + font-style: normal; +} + +/* line 45, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-added:before { + content: "\f06b"; +} + +/* line 46, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-removed:before { + content: "\f06c"; +} + +/* line 47, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-modified:before { + content: "\f06d"; +} + +/* line 48, ../../../hub/static/css/mod/pull-github.scss */ +.mini-icon-moved:before, .mini-icon-renamed:before { + content: "\f06e"; +} + +/* TODO remove the following line */ +/* file-blame-blob should only be import at blame page */ +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 3, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files { + position: relative; +} + +/* line 6, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file { + margin-top: 0; +} + +/* line 9, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file, .file-box { + border: 1px solid #CCC; + margin-bottom: 13px; + position: relative; + background-color: #DDD; +} + +/* line 15, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta, +.file-box .meta { + overflow: hidden; + padding: 5px 10px; + font-size: 12px; + height: 33px; + text-align: left; + color: #555; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #D8D8D8; + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #EAEAEA); + background: -webkit-linear-gradient(#FAFAFA, #EAEAEA); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; +} + +/* line 30, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info, +.file-box .meta .info { + float: left; + height: 33px; + max-width: 555px; + line-height: 33px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +/* line 41, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span, +.file-box .meta .info span { + padding-left: 9px; + margin-left: 5px; + border-left: 1px solid #C1C1C1; + box-shadow: inset 1px 0 0 white; +} + +/* line 50, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.icon, +#files .file .meta .info span.diffstat, +.file-box .meta .info span.icon { + line-height: 0; + float: left; + margin: 5px 5px 0 0; + padding: 3px; + background: #F7F7F7; + border: 1px solid #CCC; + border-right-color: #E5E5E5; + border-bottom-color: #E5E5E5; + border-radius: 3px; +} + +/* line 63, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat { + height: 16px; + padding: 3px 6px; +} + +/* line 67, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span:first-child, +#files .file .meta .info .icon + span, +.file-box .meta .info span:first-child, +.file-box .meta .info .icon + span { + border-left: 0 none; + box-shadow: inset 0 0 0 transparent; + margin-left: 0; + padding-left: 0; +} + +/* line 76, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .info span.diffstat .diffstat-bar { + color: #D8D8D8; +} + +/* line 79, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions, .file-box .meta .actions { + float: right; + height: 33px; + line-height: 33px; + margin-top: 1px; +} + +/* line 85, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes { + display: block; + position: relative; + display: block; + float: left; + margin-right: 10px; +} + +/* line 92, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes label { + font-weight: bold; + margin: 5px 0; +} + +/* line 96, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .show-inline-notes input { + margin: 0; +} + +/* line 99, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions .button-group, +.file-box .meta .actions .button-group { + float: right; + margin-top: 2px; +} + +/* line 104, ../../../hub/static/css/mod/file-blame-blob.scss */ +#files .file .meta .actions code, +.file-box .meta .actions code { + background: inherit; + border: none; + font-size: 11px; + color: inherit; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + padding: 0; +} + +/* line 114, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file { + margin: 15px 0; +} + +/* line 118, ../../../hub/static/css/mod/file-blame-blob.scss */ +.file .data { + overflow: auto; +} + +/* line 120, ../../../hub/static/css/mod/file-blame-blob.scss */ +.change #files .file, .file-box, .change .file { + margin-bottom: 0; +} + +/* line 122, ../../../hub/static/css/mod/file-blame-blob.scss */ +.blame .line-data { + font-size: 12px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; +} diff --git a/dist/css/mod/pull-highlight.css b/dist/css/mod/pull-highlight.css new file mode 100644 index 0000000..c980f2d --- /dev/null +++ b/dist/css/mod/pull-highlight.css @@ -0,0 +1,403 @@ +/* highlight style */ +/* line 2, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .hll { + background-color: #ffffcc; +} + +/* line 3, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight { + background: #ffffff; +} + +/* line 4, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c { + color: #808080; +} + +/* Comment */ +/* line 5, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .err { + color: #F00000; + background-color: #F0A0A0; +} + +/* Error */ +/* line 6, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .k { + color: #008000; + font-weight: bold; +} + +/* Keyword */ +/* line 7, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .o { + color: #303030; +} + +/* Operator */ +/* line 8, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cm { + color: #808080; +} + +/* Comment.Multiline */ +/* line 9, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cp { + color: #507090; +} + +/* Comment.Preproc */ +/* line 10, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .c1 { + color: #808080; +} + +/* Comment.Single */ +/* line 11, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .cs { + color: #cc0000; + font-weight: bold; +} + +/* Comment.Special */ +/* line 12, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gd { + color: #A00000; +} + +/* Generic.Deleted */ +/* line 13, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ge { + font-style: italic; +} + +/* Generic.Emph */ +/* line 14, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gr { + color: #FF0000; +} + +/* Generic.Error */ +/* line 15, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gh { + color: #000080; + font-weight: bold; +} + +/* Generic.Heading */ +/* line 16, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +/* line 17, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .go { + color: #808080; +} + +/* Generic.Output */ +/* line 18, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gp { + color: #c65d09; + font-weight: bold; +} + +/* Generic.Prompt */ +/* line 19, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gs { + font-weight: bold; +} + +/* Generic.Strong */ +/* line 20, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gu { + color: #800080; + font-weight: bold; +} + +/* Generic.Subheading */ +/* line 21, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .gt { + color: #0040D0; +} + +/* Generic.Traceback */ +/* line 22, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kc { + color: #008000; + font-weight: bold; +} + +/* Keyword.Constant */ +/* line 23, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kd { + color: #008000; + font-weight: bold; +} + +/* Keyword.Declaration */ +/* line 24, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kn { + color: #008000; + font-weight: bold; +} + +/* Keyword.Namespace */ +/* line 25, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kp { + color: #003080; + font-weight: bold; +} + +/* Keyword.Pseudo */ +/* line 26, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kr { + color: #008000; + font-weight: bold; +} + +/* Keyword.Reserved */ +/* line 27, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .kt { + color: #303090; + font-weight: bold; +} + +/* Keyword.Type */ +/* line 28, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .m { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number */ +/* line 29, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s { + background-color: #fff0f0; +} + +/* Literal.String */ +/* line 30, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .na { + color: #0000C0; +} + +/* Name.Attribute */ +/* line 31, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nb { + color: #007020; +} + +/* Name.Builtin */ +/* line 32, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nc { + color: #B00060; + font-weight: bold; +} + +/* Name.Class */ +/* line 33, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .no { + color: #003060; + font-weight: bold; +} + +/* Name.Constant */ +/* line 34, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nd { + color: #505050; + font-weight: bold; +} + +/* Name.Decorator */ +/* line 35, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ni { + color: #800000; + font-weight: bold; +} + +/* Name.Entity */ +/* line 36, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ne { + color: #F00000; + font-weight: bold; +} + +/* Name.Exception */ +/* line 37, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nf { + color: #0060B0; + font-weight: bold; +} + +/* Name.Function */ +/* line 38, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nl { + color: #907000; + font-weight: bold; +} + +/* Name.Label */ +/* line 39, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nn { + color: #0e84b5; + font-weight: bold; +} + +/* Name.Namespace */ +/* line 40, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nt { + color: #007000; +} + +/* Name.Tag */ +/* line 41, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .nv { + color: #906030; +} + +/* Name.Variable */ +/* line 42, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ow { + color: #000000; + font-weight: bold; +} + +/* Operator.Word */ +/* line 43, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .w { + color: #bbbbbb; +} + +/* Text.Whitespace */ +/* line 44, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mf { + color: #6000E0; + font-weight: bold; +} + +/* Literal.Number.Float */ +/* line 45, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mh { + color: #005080; + font-weight: bold; +} + +/* Literal.Number.Hex */ +/* line 46, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mi { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer */ +/* line 47, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .mo { + color: #4000E0; + font-weight: bold; +} + +/* Literal.Number.Oct */ +/* line 48, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sb { + background-color: #fff0f0; +} + +/* Literal.String.Backtick */ +/* line 49, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sc { + color: #0040D0; +} + +/* Literal.String.Char */ +/* line 50, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sd { + color: #D04020; +} + +/* Literal.String.Doc */ +/* line 51, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s2 { + background-color: #fff0f0; +} + +/* Literal.String.Double */ +/* line 52, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .se { + color: #606060; + font-weight: bold; + background-color: #fff0f0; +} + +/* Literal.String.Escape */ +/* line 53, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sh { + background-color: #fff0f0; +} + +/* Literal.String.Heredoc */ +/* line 54, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .si { + background-color: #e0e0e0; +} + +/* Literal.String.Interpol */ +/* line 55, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sx { + color: #D02000; + background-color: #fff0f0; +} + +/* Literal.String.Other */ +/* line 56, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .sr { + color: #000000; + background-color: #fff0ff; +} + +/* Literal.String.Regex */ +/* line 57, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .s1 { + background-color: #fff0f0; +} + +/* Literal.String.Single */ +/* line 58, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .ss { + color: #A06000; +} + +/* Literal.String.Symbol */ +/* line 59, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .bp { + color: #007020; +} + +/* Name.Builtin.Pseudo */ +/* line 60, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vc { + color: #306090; +} + +/* Name.Variable.Class */ +/* line 61, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vg { + color: #d07000; + font-weight: bold; +} + +/* Name.Variable.Global */ +/* line 62, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .vi { + color: #3030B0; +} + +/* Name.Variable.Instance */ +/* line 63, ../../../hub/static/css/mod/pull-highlight.scss */ +.highlight .il { + color: #0000D0; + font-weight: bold; +} + +/* Literal.Number.Integer.Long */ diff --git a/dist/css/mod/pull-new.css b/dist/css/mod/pull-new.css new file mode 100644 index 0000000..aed6ad7 --- /dev/null +++ b/dist/css/mod/pull-new.css @@ -0,0 +1,298 @@ +/* line 1, ../../../hub/static/css/mod/pull-new.scss */ +.pull-heading .btn-change { + float: right; + margin: 9px 10px 0 0; +} + +/* line 6, ../../../hub/static/css/mod/pull-new.scss */ +.editor-expander { + cursor: pointer; +} + +/* line 10, ../../../hub/static/css/mod/pull-new.scss */ +.pull-head { + padding: 10px; + border: 1px solid whiteSmoke; + border-top: none; + border-bottom: 2px solid #EEE; + border-radius: 5px; +} + +/* line 18, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description { + font-size: 14px; + margin: 0; + color: #333; + font-weight: 300; +} + +/* line 24, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description a { + font-weight: bold; + color: black; +} + +/* line 28, ../../../hub/static/css/mod/pull-new.scss */ +.pull-description .commit-ref { + margin: 0 3px; +} + +/* line 32, ../../../hub/static/css/mod/pull-new.scss */ +.commit-ref { + padding: 2px 5px; + line-height: 19px; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 12px; + font-weight: normal; + color: white; + text-shadow: -1px -1px 0 black; + text-decoration: none; + background: #787878; + background: -moz-linear-gradient(#787878, #282828); + background: -webkit-linear-gradient(#787878, #282828); + border-radius: 3px; +} + +/* line 46, ../../../hub/static/css/mod/pull-new.scss */ +.commit-ref .project { + font-weight: normal; + color: #CCC; +} + +/* line 51, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor { + margin: 15px 0 20px; + background: url("http://t.douban.com/img/files/file-1363274223.gif") 50% 80px no-repeat; +} + +/* line 55, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .chooser-box { + float: left; + width: 420px; +} + +/* line 59, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .chooser-box.head { + float: right; +} + +/* line 62, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor table.reposha { + margin: 15px 0 0 0; + width: 100%; +} + +/* line 66, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .commit-preview .message, +.range-editor .commit-preview p.error { + margin: 10px 0 0 0; + background: #F7F8F9; + border: 1px solid #DDD; + border-bottom: none; + border-radius: 3px; +} + +/* line 74, ../../../hub/static/css/mod/pull-new.scss */ +.range-editor .form-actions { + margin: 10px 0 0; + text-align: right; + padding-bottom: 5px; + padding: 0; + background-color: inherit; + border-top: none; +} + +/* line 83, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box { + padding: 0 10px 10px; + background: white; + background: -moz-linear-gradient(white, #F1F1F1); + background: -webkit-linear-gradient(white, #F1F1F1); + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 91, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box h3 { + margin: 0 0 0 -10px; + width: 100%; + padding: 13px 10px 10px; + font-size: 16px; + line-height: 1.2; + color: #222; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: #FBFBFB; + background: -moz-linear-gradient(#FBFBFB, #F2F2F2); + background: -webkit-linear-gradient(#FBFBFB, #F2F2F2); + border-top-left-radius: 5px; + border-bottom: 1px solid white; +} + +/* line 105, ../../../hub/static/css/mod/pull-new.scss */ +.chooser-box .fakerule { + margin: 0 0 0 -10px; + width: 100%; + height: 1px; + padding: 0 10px; + font-size: 1px; + line-height: 1px; + background: #DDD; +} + +/* line 115, ../../../hub/static/css/mod/pull-new.scss */ +.reposha td.repo { + width: 1%; + white-space: nowrap; +} + +/* line 119, ../../../hub/static/css/mod/pull-new.scss */ +.reposha .repo .at { + padding-right: 5px; + color: #666; +} + +/* line 123, ../../../hub/static/css/mod/pull-new.scss */ +.reposha .sha { + text-align: left; +} + +/* line 126, ../../../hub/static/css/mod/pull-new.scss */ +.reposha input[type="text"] { + width: 98%; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + line-height: 20px; + color: #444; +} + +/* following commit-preview styles are also used in commits.html */ +/* line 136, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview { + margin: 10px 0 0 0; + font-size: 11px; +} + +/* line 140, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name { + margin: 0; + height: 20px; + line-height: 20px; + font-size: 12px; + color: #5B6375; +} + +/* line 147, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name .avatar { + float: left; + margin-right: 5px; + width: 16px; + height: 16px; + padding: 1px; + background: white; + border: 1px solid #CEDADF; +} + +/* line 156, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name a { + font-weight: bold; + color: black; +} + +/* line 160, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview p.name .date { + color: #5B6375; +} + +/* line 163, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message, +.commit-preview p.error { + clear: both; + padding: 5px; + background: #EAF2F5; + border: 1px solid #BEDCE7; +} + +/* line 170, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message pre { + font-size: 11px; + color: #333; + white-space: pre-wrap; + word-wrap: break-word; + border: none; +} + +/* line 177, ../../../hub/static/css/mod/pull-new.scss */ +.commit-preview .message p.commit-id { + margin: 5px 0 0 0; + padding: 0; + font-family: Consolas,Menlo,"Liberation Mono",Courier,monospace; + font-size: 11px; +} + +/* line 184, ../../../hub/static/css/mod/pull-new.scss */ +.new-pull-request .pull-tabs { + clear: both; +} + +/* line 188, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-commit::before { + content: "\f01f"; +} + +/* line 191, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-discussion::before { + content: "\f04f"; +} + +/* line 194, ../../../hub/static/css/mod/pull-new.scss */ +.mini-icon-diff::before { + content: "\f04d"; +} + +/* line 198, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form { + margin: 0; +} + +/* line 201, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form input[type="text"] { + font-size: 14px; + padding: 5px 5px; + margin: 0 0 5px 0; + width: 98%; + color: #444; +} + +/* line 208, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form textarea { + height: 200px; +} + +/* line 211, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form .preview-content { + background: white; +} + +/* line 215, ../../../hub/static/css/mod/pull-new.scss */ +.pull-form-main .form-actions { + padding: 0; + margin-top: 10px; + text-align: right; + padding-bottom: 5px; + background-color: inherit; + border-top: none; +} + +/* line 224, ../../../hub/static/css/mod/pull-new.scss */ +.pull-dest-repo a { + font-size: 12px; + font-weight: bold; + padding: 5px 0; +} + +/* line 229, ../../../hub/static/css/mod/pull-new.scss */ +.pull-dest-repo p { + font-size: 11px; + color: #999; + margin: 5px 0 15px 0; +} diff --git a/dist/css/mod/pull-request.css b/dist/css/mod/pull-request.css new file mode 100644 index 0000000..a871e1f --- /dev/null +++ b/dist/css/mod/pull-request.css @@ -0,0 +1,1345 @@ +@charset "UTF-8"; +/* preview comment form style */ +/* line 2, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav { + margin: 10px 0; + border-bottom: 1px solid #DDD; + height: 35px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs { + display: inline-block; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav .tabnav-tabs > li { + display: inline-block; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab { + display: inline-block; + margin-bottom: -1px; + padding: 8px 12px 9px; + border: 1px solid transparent; + border-bottom: 0; + font-size: 14px; + color: #666; + text-decoration: none; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab.selected { + border-color: #DDD; + border-radius: 3px 3px 0 0; + background-color: white; + color: #333; + font-weight: bold; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-preview.scss */ +.tabnav-tab:hover { + text-decoration: none; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav { + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .tabnav ul.tabnav-tabs { + padding-left: 10px; +} + +/* line 10, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 0 10px 10px; +} + +/* line 11, ../../../hub/static/css/mod/comment-form-preview.scss */ +.previewable-comment-form #preview_bucket .content-body { + padding: 10px; + min-height: 132px; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form.tab-content { + overflow: initial; + position: relative; +} + +/* line 2, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form .write-content, .previewable-comment-form .preview-content { + padding: 10px; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-content.scss */ +.previewable-comment-form textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-actions { + padding: 0; +} + +/* line 6, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + position: relative; + border: 3px solid #EEE; +} + +/* line 7, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content { + padding: 0; + background: #EEE; +} + +/* line 8, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content .write-content { + padding: 0 10px 10px; +} + +/* line 9, ../../../hub/static/css/mod/comment-form-content.scss */ +#add-comment-form .form-content textarea { + display: block; + width: 100%; + max-width: 100%; + min-height: 100px; + padding: 10px; + background: #FAFAFA; + border: 1px solid #DDD; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 3px; + margin: 0; +} + +/* line 1, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton { + position: relative; + display: inline-block; + padding: 0 10px 0 10px; + color: #333; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 13px; + font-weight: bold; + line-height: 24px; + text-shadow: 0 1px 0 #fff; + white-space: nowrap; + border: 1px solid #d4d4d4; + border-bottom-color: #bcbcbc; + border-radius: 3px; + background: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* line 2, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton.green { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background: #36b825; + background: -moz-linear-gradient(#36b825, #28881b); + background: -webkit-linear-gradient(#36b825, #28881b); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#36b825',endColorstr='#28881b')"; + border-color: #4a993e; +} + +/* line 3, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover.btn-windows:before, .button-group .btn-windows.grouped-button:before:hover { + background-position: -17px 3px; +} + +/* line 4, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:disabled, .minibutton.disabled { + opacity: .5; + cursor: default; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +button.minibutton::-moz-focus-inner { + margin: -1px -3px; +} + +/* line 5, ../../../hub/static/css/mod/minibutton.scss */ +input[type=text] + .minibutton { + margin-left: 5px; +} + +/* line 7, ../../../hub/static/css/mod/minibutton.scss */ +.minibutton:hover, .button-group .grouped-button:hover { + color: white; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + border-color: #518CC6; + border-bottom-color: #2A65A0; + background: #599BDC; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#599bdc',endColorstr='#3072b3')"; +} + +/* line 1, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary, button.primary.classy:disabled, button.primary.classy.disabled, button.primary.classy:disabled:hover, button.primary.classy.disabled:disabled:hover, button.classy:disabled:hover.primary, button.classy.disabled:disabled:hover.primary { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); + border-color: #74BB5A; + border-bottom-color: #509338; + background: #8ADD6D; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8add6d', endColorstr='#60b044')"; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + background-image: -webkit-linear-gradient(top, #8ADD6D, #60B044); +} + +/* line 2, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy.primary.disabled { + opacity: 0.5; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-button.scss */ +button.classy, +button.classy:disabled, +button.classy.disabled, +a.button.classy:disabled, +a.button.classy.disabled, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover:disabled, +a.button.classy.disabled:hover, +a.button.classy, +button.classy:disabled:hover, +button.classy.disabled:disabled:hover, +a.button.classy:disabled:hover, +a.button.classy.disabled:disabled:hover, +a.button.classy.disabled:hover { + display: inline-block; + padding: 8px 15px; + line-height: normal; + position: relative; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 12px; + font-weight: bold; + color: #666; + text-shadow: 0 1px rgba(255, 255, 255, 0.9); + background: whiteSmoke; + background: -moz-linear-gradient(whiteSmoke, #E5E5E5); + background: -webkit-linear-gradient(whiteSmoke, #E5E5E5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#e5e5e5')"; + border-radius: 3px; + border: 1px solid #DDD; + border-bottom-color: #BBB; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} + +/* line 3, ../../../hub/static/css/mod/comment-form-zen.scss */ +.previewable-comment-form .zen-enabled textarea { + padding: 10px 18px 10px 10px; +} + +/* line 4, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled { + position: relative; +} + +/* line 5, ../../../hub/static/css/mod/comment-form-zen.scss */ +.write-content.zen-enabled .go-zen { + position: absolute; + right: 15px; + top: 5px; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view { + position: absolute; + top: 0; + left: 0; + display: none; + margin-top: 18px; + background: white; + border: 1px solid #DDD; + border-radius: 3px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + min-width: 120px; + z-index: 10; +} + +/* line 15, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur { + background: #3366FF; + color: white; +} + +/* line 19, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur small { + color: white; +} + +/* line 22, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view strong { + color: #3366FF; +} + +/* line 25, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view .cur strong { + color: white; + font: bold; +} + +/* line 29, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul { + /* width: 100px; */ + list-style: none; + padding: 0; + margin: auto; +} + +/* line 35, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view ul li { + display: block; + padding: 5px 10px; + border-bottom: 1px solid #DDD; + cursor: pointer; + /* border-top: 1px solid #C8C8C8; */ +} + +/* line 42, ../../../hub/static/css/lib/jquery.atwho.scss */ +#at-view small { + font-size: smaller; + color: #777; + font-weight: normal; +} + +/* line 9, ../../../hub/static/css/mod/comment-form.scss */ +.side-avatar { + margin-left: 0; +} + +/* fix li header for newer version of bootstrap */ +/* line 12, ../../../hub/static/css/mod/comment-form.scss */ +.comment-form-head li { + line-height: 18px; +} + +/* line 16, ../../../hub/static/css/mod/comment-form.scss */ +#new_comment .form-content { + width: 880px; + margin-left: 60px; +} + +/* line 18, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 19, ../../../hub/static/css/mod/comment-form.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 1, ../../../hub/static/css/mod/loader.scss */ +.loader { + display: none; + position: absolute; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + background-color: #eee; +} + +/* line 2, ../../../hub/static/css/mod/loader.scss */ +.loader .spinner { + display: block; + width: 32px; + height: 32px; + margin: 0 auto; + top: 121px; + position: relative; + background: url(/static/img/spinner.gif) no-repeat; +} + +/* line 1, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .css-truncate-target + .css-truncate-target { + max-width: 125px; +} + +/* line 2, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .commit-ref .user { + color: #CCC; +} + +/* line 3, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head { + margin: 20px 0; + background-color: #FAFAFA; + border: 1px solid #EEE; + border-bottom-width: 2px; + border-radius: 3px; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .attention-icon { + position: relative; + float: left; + margin: 4px 10px 0 0; +} + +/* line 5, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 10px; + position: relative; + float: left; + margin: 0; + line-height: 36px; + font-size: 13px; + max-width: 690px; + white-space: nowrap; +} + +/* line 6, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .user { + font-weight: bold; + color: #333; +} + +/* line 8, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 0; +} + +/* line 12, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .pull-state { + float: left; + padding: 8px; + margin-right: 8px; + border-right: 1px solid #EEE; + line-height: 20px; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .state-indicator { + font-size: 13px; + display: inline-block; + height: 20px; + line-height: 20px; + padding: 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +.commit-ref { + position: relative; + height: 20px; + display: inline-block; + padding: 0 5px; + border: 1px solid black; + border-radius: 3px; + font: 10px/20px Monaco,"Liberation Mono",Courier,monospace; + color: white; + white-space: nowrap; + vertical-align: middle; + background-color: #222; + background-image: -moz-linear-gradient(#444, #222); + background-image: -webkit-linear-gradient(#444, #222); + background-image: linear-gradient(#444, #222); + background-repeat: repeat-x; +} + +/* line 1, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button { + height: 25px; + width: 25px; + display: block; + float: right; + background: url("/static/img/fav_star.png") 0 0 no-repeat; +} + +/* line 2, ../../../hub/static/css/mod/fav-button.scss */ +a#fav-button.faved { + background: url("/static/img/faved_star.png") 0 0 no-repeat; +} + +/* line 6, ../../../hub/static/css/mod/pull-request.scss */ +#project-info { + margin-bottom: 15px; +} + +/* line 8, ../../../hub/static/css/mod/pull-request.scss */ +.tab-content { + overflow: initial; + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest.tab-content { + min-height: 280px; + overflow: visible; +} + +/* line 11, ../../../hub/static/css/mod/pull-request.scss */ +.commit-preview .date { + color: #5B6375; +} + +/* line 13, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav { + margin: 0 0 10px; + border-bottom: none; + height: 35px; +} + +/* line 14, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active { + font-weight: bold; +} + +/* line 15, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li a:hover { + background-color: transparent; + border: 1px solid transparent; +} + +/* line 16, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active a { + background-color: #fff; + border-bottom: 1px solid #fff; +} + +/* line 17, ../../../hub/static/css/mod/pull-request.scss */ +.pull-nav.tabnav .nav li.active a:hover { + background-color: #fff; + border: 1px solid #DDD; + border-bottom: 1px solid #fff; +} + +/* line 19, ../../../hub/static/css/mod/pull-request.scss */ +.tabnav .counter { + position: relative; + top: -1px; + margin: 0 0 0 5px; + padding: 1px 5px 2px 5px; + font-size: 10px; + font-weight: bold; + color: #666; + background: #E5E5E5; + border-radius: 10px; +} + +/* line 21, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .explain { + margin: 15px 0; +} + +/* line 23, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header { + position: relative; + margin: 10px; +} + +/* line 24, ../../../hub/static/css/mod/pull-request.scss */ +.discusion-topic-infobar { + border-bottom: 1px solid #e5e5e5; +} + +/* line 25, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header .comment-topic-actions { + position: absolute; + top: 10px; + right: 10px; + list-style-type: none; +} + +/* line 26, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-topic-header .comment-topic-actions li { + float: left; + margin-left: 12px; +} + +/* line 28, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest blockquote.citation { + border: none; +} + +/* line 29, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #trac-ticket-title { + display: none; +} + +/* line 30, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket { + margin-top: 23px; +} + +/* line 31, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .trac-topnav { + margin-top: 0; + top: -20px; + position: absolute; + right: 0; +} + +/* line 33, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket, .pullrequest div.change { + margin-bottom: 20px; + background: #fff; + border-radius: 3px; + border: 3px solid #eee; +} + +/* line 34, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket::before, .pullrequest div.change::before, .pullrequest #propertyform fieldset.iefix::before, .pullrequest #add-comment-form .form-content::before { + content: ""; + display: block; + height: 0; + width: 0; + border: 10px solid #EEE; + border-width: 10px 10px 10px 0; + border-color: transparent #EEE transparent transparent; + left: -12px; + top: 15px; + float: left; + position: absolute; +} + +/* line 35, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket::before { + position: absolute; +} + +/* line 36, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change::before, .pullrequest #propertyform fieldset.iefix::before { + position: relative; +} + +/* line 37, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket { + padding: 5px; +} + +/* line 39, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date { + float: none; + clear: both; + color: #666; + font-size: 12px; +} + +/* line 40, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date::after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* line 41, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .date p { + float: left; +} + +/* line 42, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .summary { + font-size: 20px; + font-weight: bold; + margin: 0; +} + +/* line 43, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .properties { + display: none; + border: none; +} + +/* line 44, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description { + margin-top: 10px; +} + +/* line 45, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description div { + padding: 0; +} + +/* line 46, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description h3 { + display: none; +} + +/* line 47, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket .description #addreply { + float: right; +} + +/* line 51, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .commits-condensed tr td.message { + word-break: break-all; +} +/* line 55, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog { + border: none; + padding: 0; +} +/* line 60, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.author { + width: 80px; +} +/* line 63, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.date { + width: 100px; +} +/* line 66, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td.status { + width: 20px; +} +/* line 71, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.commit-status { + width: 100px; + display: inline-block; + border-radius: 100px; + width: 15px; + height: 15px; + vertical-align: middle; +} +/* line 79, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.dirty { + background-color: #f6e69f; +} +/* line 82, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.error { + background-color: #da4f49; +} +/* line 85, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change table.commits tr td span.success { + background-color: #6eda62; +} + +/* line 93, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog h3 { + border: none; +} + +/* line 94, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_mark { + background-color: #DDD; + height: 31px; + text-align: center; + color: #777; + line-height: 31px; +} + +/* line 95, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_commits { + display: none; +} + +/* line 96, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change div.outdated_codereview { + display: none; +} + +/* line 97, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change { + padding: 0; + background: #FBFBFB; +} + +/* line 98, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change h3.change { + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#F8FBFC, #DDE8EB); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fbfc', endColorstr='#dde8eb')"; +} + +/* line 99, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change form[id^=reply-to-comment-] { + right: 7px; +} + +/* line 100, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change table.commits .commit code { + background-color: transparent; +} + +/* line 101, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment { + margin: 0; + top: -1px; + position: relative; +} + +/* line 102, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment #files { + margin-top: -24px; +} + +/* line 103, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment #files .file { + width: 100%; + margin: 0 0 0 -1px; +} + +/* line 104, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment p br { + height: 0; +} + +/* line 105, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .comment p { + padding: 5px; + margin: 0; + color: #333; +} + +/* line 107, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest div.change form#trac-comment-editor { + position: relative; + right: 0; + margin: 12px; +} + +/* line 108, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest h2#trac-add-comment, .pullrequest .trac-nav { + display: none; +} + +/* line 109, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest fieldset.iefix { + padding: 6px; + background: #EEE; + border-radius: 3px; +} + +/* line 110, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest fieldset.iefix h3 { + font-size: 13px; + line-height: 1.4; + color: #333; + margin: 0 5px; +} + +/* line 112, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #propertyform .btn[type=submit] { + padding: 8px 15px; +} + +/* line 113, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #modify { + background-color: #EEE; + padding: 12px; +} + +/* line 114, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft { + padding: 1em; + background: none; + background-color: #FBFBFB; +} + +/* line 115, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment { + margin: 1em; +} + +/* line 116, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment blockquote.citation { + margin: 12px 0; +} + +/* line 117, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #ticketchange.ticketdraft .comment blockquote.citation p { + font-size: 13px; +} + +/* line 119, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket .side-avatar { + position: absolute; + float: left; + margin-left: -60px; +} + +/* line 121, ../../../hub/static/css/mod/pull-request.scss */ +table.commits { + margin: 0; + font-size: 12px; +} + +/* line 123, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation { + margin: -10px 0 15px; + font-size: 13px; + font-weight: 300; + color: #666; +} + +/* line 124, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation p.quickstat { + display: inline-block; + margin: 0 5px 0 0; +} + +/* line 125, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation a { + color: #666; +} + +/* line 126, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation .avatar { + position: relative; + display: inline-block; + height: 24px; + top: -2px; + margin-right: 3px; + margin-bottom: 3px; +} + +/* line 127, ../../../hub/static/css/mod/pull-request.scss */ +.pull-participation .avatar img { + vertical-align: middle; +} + +/* action-bubble part is also used in commits.html */ +/* line 131, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble { + margin: 20px 0; +} + +/* line 132, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .action { + float: left; + line-height: 29px; +} + +/* line 133, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state-indicator { + display: inline-block; + margin-right: 8px; + font-size: 12px; + padding: 0 5px; + line-height: 24px; +} + +/* line 134, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator.closed { + background: #BD2C00; +} + +/* line 135, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator { + display: block; + font-size: 14px; + font-weight: bold; + color: white; + text-align: center; + border-radius: 3px; + background: #999; +} + +/* line 136, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble { + font-size: 13px; + font-weight: 300; + background-color: transparent; +} + +/* line 137, ../../../hub/static/css/mod/pull-request.scss */ +.bubble { + padding: 3px; + background: #EEE; + border-radius: 3px; +} + +/* line 138, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble p { + margin: 0; + line-height: 26px; +} + +/* line 139, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .bubble strong { + font-weight: bold; +} + +/* line 140, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .avatar { + position: relative; + top: -2px; + display: inline-block; + height: 24px; + margin-right: 3px; + line-height: 1px; +} + +/* line 141, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .avatar img { + vertical-align: middle; +} + +/* line 142, ../../../hub/static/css/mod/pull-request.scss */ +.state-indicator.open, .state-indicator.reopened, .state-indicator.merged { + background: #6CC644; +} + +/* the following action-bubble style seems only used in commits.html */ +/* line 146, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state-renamed { + color: black; + background-color: #FFFA5D; + text-shadow: none; +} + +/* line 151, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state { + display: inline-block; + padding: 0 5px; + height: 24px; + line-height: 25px; + text-shadow: 0 -1px -1px rgba(0, 0, 0, 0.25); +} + +/* line 158, ../../../hub/static/css/mod/pull-request.scss */ +.action-bubble .state { + float: none; + padding: 3px 5px; + font-size: 11px; +} + +/* line 165, ../../../hub/static/css/mod/pull-request.scss */ +.closed-banner { + margin: 15px 0; + height: 7px; + overflow: hidden; + background: url("/static/img/closed_pattern.gif"); + border-radius: 5px; +} + +/* line 167, ../../../hub/static/css/mod/pull-request.scss */ +.change-header .change-header-right { + float: right; + height: 15px; +} + +/* line 168, ../../../hub/static/css/mod/pull-request.scss */ +.change-header .change-header-date { + display: inline-block; + margin: 0; + height: 33px; + font-size: 11px; + font-style: normal; + color: #777; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); +} + +/* line 170, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest .ticket #ticket { + padding: 0; +} + +/* line 171, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-bubble-avatar { + position: relative; + float: left; + border-radius: 3px; +} + +/* line 172, ../../../hub/static/css/mod/pull-request.scss */ +.discussion-bubble-inner { + min-height: 60px; + border: 1px solid #CACACA; + background-color: white; +} + +/* line 174, ../../../hub/static/css/mod/pull-request.scss */ +.pullrequest #changelog .change .change-header { + height: 23px; + color: #333; + margin: 0; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7); + white-space: nowrap; + text-overflow: ellipsis; + padding: 3px 10px 0 6px; + border-bottom: 1px solid #CCC; + background: -webkit-linear-gradient(#F8FBFC, #DDE8EB); + background-image: -webkit-linear-gradient(#F8F8F8, #E1E1E1); + background-image: linear-gradient(#F8F8F8, #E1E1E1); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fbfc', endColorstr='#dde8eb')"; +} + +/* line 176, ../../../hub/static/css/mod/pull-request.scss */ +.comment-content .comment-body, .pullrequest .ticket #ticket .comment-content .comment-body { + padding: 10px; + font-size: 13px; + overflow: auto; + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 177, ../../../hub/static/css/mod/pull-request.scss */ +.comment-content .comment-body, .pullrequest #changelog .comment p { + font-size: 13px; +} + +/* line 179, ../../../hub/static/css/mod/pull-request.scss */ +.user-mention, .team-mention { + font-weight: bold; + color: #333; +} + +/* line 181, ../../../hub/static/css/mod/pull-request.scss */ +.change #files .file { + border: none; +} diff --git a/dist/css/mod/pull-tabs.css b/dist/css/mod/pull-tabs.css new file mode 100644 index 0000000..7c4f835 --- /dev/null +++ b/dist/css/mod/pull-tabs.css @@ -0,0 +1,77 @@ +/* tabs */ +/* line 3, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs { + margin: 15px 0 15px 0; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #555; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: #E8E8E8; + background: -moz-linear-gradient(#E8E8E8, #D2D2D2); + background: -webkit-linear-gradient(#E8E8E8, #D2D2D2); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8e8e8',endColorstr='#d2d2d2')"; + border: 1px solid #D1D1D1; + border-bottom-color: #BBB; + border-radius: 3px; +} + +/* line 18, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li { + list-style-type: none; + display: inline; + line-height: 24px; +} + +/* line 23, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li:first-child a.selected { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +/* line 27, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li:first-child a { + border-left: none; +} + +/* line 30, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs li.active a { + color: #333; + background: white; + background: -moz-linear-gradient(white, #F2F2F2); + background: -webkit-linear-gradient(white, #F2F2F2); +} + +/* line 36, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs a { + float: left; + height: 24px; + padding: 0 7px; + color: #666; + font-weight: bold; + text-decoration: none; + border-right: 1px solid #ABABAB; + border-left: 1px solid #F6F6F6; +} + +/* line 46, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs .mini-icon { + vertical-align: middle; + color: #888; +} + +/* line 50, ../../../hub/static/css/mod/pull-tabs.scss */ +ul.smalltabs .counter { + display: inline-block; + position: relative; + top: -1px; + margin-left: 2px; + line-height: 12px; + padding: 1px 3px 0 3px; + font-size: 9px; + background: #ECECEC; + border: 1px solid #AFAFAF; + border-right-color: #ECECEC; + border-bottom-color: #ECECEC; + border-radius: 2px; +} diff --git a/dist/css/mod/pull-ticket.css b/dist/css/mod/pull-ticket.css new file mode 100644 index 0000000..d84e066 --- /dev/null +++ b/dist/css/mod/pull-ticket.css @@ -0,0 +1,327 @@ +/* ticket style */ +/* line 2, ../../../hub/static/css/mod/pull-ticket.scss */ +#content.ticket { + width: 63em; + max-width: 100%; + margin-left: auto; +} + +/* line 8, ../../../hub/static/css/mod/pull-ticket.scss */ +#field-description-help { + float: right; +} + +/* line 9, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties div.trac-resizable, #field-description { + width: 100%; +} + +/* line 11, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket { + background: #ffd; + border: 1px outset #996; + margin-top: 1em; + padding: .5em 1em; + position: relative; +} + +/* line 19, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket.ticketdraft { + background: #f8f8f8 url(../draft.png); +} + +/* line 22, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticketchange.ticketdraft { + padding: 0 1em; + margin: 1em 0; +} + +/* line 26, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticketchange.ticketdraft h3 { + margin-top: .5em; +} + +/* line 29, ../../../hub/static/css/mod/pull-ticket.scss */ +.preview-notice { + font-weight: bold; +} + +/* line 31, ../../../hub/static/css/mod/pull-ticket.scss */ +.ticketdraft { + background: #f8f8f8 url(../draft.png); + border: 1px outset #996; + padding: 0 .2em; +} + +/* line 37, ../../../hub/static/css/mod/pull-ticket.scss */ +h1 .status { + color: #444; +} + +/* line 38, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket h2.summary { + margin: 0 0 0.8em 0; +} + +/* line 39, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .date { + color: #996; + float: right; + font-size: 85%; + position: relative; +} + +/* line 40, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .date p { + margin: 0.3em; +} + +/* line 42, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties { + clear: both; + border-top: 1px solid #dd9; + border-collapse: collapse; + table-layout: fixed; + width: 100%; +} + +/* line 49, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties tr { + border-bottom: 1px dotted #eed; +} + +/* line 50, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td, #ticket table.properties th { + font-size: 80%; + padding: .5em 1em; + vertical-align: top; +} + +/* line 55, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties th { + color: #663; + font-weight: normal; + text-align: left; + width: 20%; +} + +/* line 61, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td { + width: 30%; +} + +/* line 62, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td p:first-child { + margin-top: 0; +} + +/* line 63, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties td p:last-child { + margin-bottom: 0; +} + +/* line 64, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket table.properties .description { + border-top: 1px solid #dd9; +} + +/* line 66, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .description h3 { + border-bottom: 1px solid #dd9; + color: #663; + font-size: 100%; + font-weight: normal; +} + +/* line 72, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .description h3 .lastmod { + font-size: 90%; +} + +/* line 75, ../../../hub/static/css/mod/pull-ticket.scss */ +#ticket .inlinebuttons { + float: right; + position: relative; + bottom: 0.3em; + margin-left: 0.2em; +} + +/* line 82, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog { + border: 1px outset #996; + padding: 1em; +} + +/* line 83, ../../../hub/static/css/mod/pull-ticket.scss */ +.trac-shade { + background-color: #eee; +} + +/* line 84, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor { + margin-left: 2em; + margin-bottom: 1em; +} + +/* line 85, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor div.trac-resizable { + width: 100%; +} + +/* line 86, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor textarea { + background: #ffffe0; + margin-left: -1px; + margin-right: -1px; + width: 100%; +} + +/* line 92, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-comment-editor .wikitoolbar { + margin-left: -1px; +} + +/* line 93, ../../../hub/static/css/mod/pull-ticket.scss */ +#trac-add-comment :link, #trac-add-comment :visited { + color: #b00; +} + +/* line 94, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog h3, #ticketchange h3 { + border-bottom: 1px solid #d7d7d7; + color: #999; + font-size: 100%; + font-weight: normal; +} + +/* line 100, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading, #changelog .inlinebuttons { + float: right; + margin-left: 0.2em; +} + +/* line 101, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading { + font-size: 85%; +} + +/* line 102, ../../../hub/static/css/mod/pull-ticket.scss */ +.threading :link, .threading :visited { + border-bottom: 0; +} + +/* line 103, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .trac-lastedit { + padding-left: 2.5em; + color: #999; + font-size: 80%; +} + +/* line 108, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .trac-lastedit :link, #changelog .trac-lastedit :visited { + color: inherit; +} + +/* line 110, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .changes, #ticketchange .changes { + list-style: square; + margin-left: 2em; + padding: 0; +} + +/* line 111, ../../../hub/static/css/mod/pull-ticket.scss */ +#changelog .comment, #ticketchange .comment { + margin-left: 2em; +} + +/* line 113, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field { + margin-top: .75em; + width: 100%; +} + +/* line 114, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field fieldset.iefix { + margin-left: 1px; + margin-right: 1px; +} + +/* line 115, ../../../hub/static/css/mod/pull-ticket.scss */ +label[for=comment] { + float: right; +} + +/* line 116, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field .wikitoolbar { + margin-left: -1px; +} + +/* line 117, ../../../hub/static/css/mod/pull-ticket.scss */ +form .field div.trac-resizable { + width: 100%; +} + +/* line 119, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties { + white-space: nowrap; + line-height: 160%; + padding: 0.5em; +} + +/* line 120, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table { + border-spacing: 0; + width: 100%; + padding: 0 0.5em; +} + +/* line 121, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table th { + padding: .4em; + text-align: right; + width: 20%; + vertical-align: top; +} + +/* line 127, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table th.col2 { + border-left: 1px dotted #d7d7d7; +} + +/* line 128, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table td { + vertical-align: middle; + width: 30%; +} + +/* line 129, ../../../hub/static/css/mod/pull-ticket.scss */ +#properties table td.fullrow { + vertical-align: middle; + width: 80%; +} + +/* line 131, ../../../hub/static/css/mod/pull-ticket.scss */ +#action { + line-height: 2em; +} + +/* line 133, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio { + border: none; + margin: 0; + padding: 0; +} + +/* line 134, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio legend { + color: #000; + float: left; + font-size: 100%; + font-weight: normal; + padding: 0 1em 0 0; +} + +/* line 141, ../../../hub/static/css/mod/pull-ticket.scss */ +fieldset.radio label { + padding-right: 1em; +} diff --git a/dist/css/mod/pullrequest-list.css b/dist/css/mod/pullrequest-list.css new file mode 100644 index 0000000..f02ea96 --- /dev/null +++ b/dist/css/mod/pullrequest-list.css @@ -0,0 +1,218 @@ +/* line 1, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs { + display: block; + float: left; + padding: 5px 5px 0; + overflow: hidden; +} +/* line 6, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .filter-tab { + display: inline-block; + padding: 0 8px; + height: 24px; + line-height: 24px; + font-size: 12px; + font-weight: bold; + color: #888; + -webkit-font-smoothing: antialiased; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + text-decoration: none; + border: 1px solid #CCC; + border-bottom: 0; + border-radius: 3px 3px 0 0; + background: rgba(255, 255, 255, 0.2); + cursor: pointer; +} +/* line 23, ../../../hub/static/css/mod/filter-tabs.scss */ +.list-browser-filter-tabs .selected { + color: #333; + background: white; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); + border-color: #B4B4B4; + border-bottom: 1px solid white; +} + +/* line 1, ../../../hub/static/css/mod/pagination.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; +} +/* line 5, ../../../hub/static/css/mod/pagination.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} +/* line 11, ../../../hub/static/css/mod/pagination.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} +/* line 23, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul li a { + width: 20px; +} +/* line 29, ../../../hub/static/css/mod/pagination.scss */ +.pagination ul .disabled a { + background-color: #fff; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls { + margin: 20px 0; +} +/* line 6, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls h2 { + font-size: 16px; + font-weight: bold; + margin: 0; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-list.scss */ +.row.pulls .mod p { + word-wrap: break-word; +} + +/* line 17, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list { + word-break: break-all; +} +/* line 19, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 { + margin: 0; + font-size: 14px; + line-height: 1.3; +} +/* line 23, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list h3 a { + color: #333; +} +/* line 27, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .list-browser-item { + position: relative; + padding: 10px; + border-bottom: 1px solid #EAEAEA; +} +/* line 32, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list .meta { + float: left; + margin-top: 4px; + margin-bottom: -2px; + height: 16px; + padding: 4px 6px; + font-size: 11px; + color: rgba(0, 0, 0, 0.55); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + background: rgba(0, 0, 0, 0.07); + border-radius: 3px; +} +/* line 44, ../../../hub/static/css/mod/pullrequest-list.scss */ +.pulls-list p a { + color: #555; + text-decoration: none; +} + +/* line 50, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser { + border-color: #D5D5D5; + position: relative; + border: 1px solid #DDD; + border-radius: 5px; +} +/* line 55, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination { + float: right; + margin: 7px; + font-weight: bold; + height: 26px; +} +/* line 60, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination a { + padding: 4px; + font-size: 11px; + color: #4183C4; + width: auto; +} +/* line 66, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .pagination span { + padding: 4px; + font-size: 11px; + color: #4183C4; +} +/* line 72, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none, .chromed-list-browser .error { + padding: 10px; + border-bottom: 1px solid #DDD; +} +/* line 75, ../../../hub/static/css/mod/pullrequest-list.scss */ +.chromed-list-browser .none p, .chromed-list-browser .error p { + margin: 0; + padding: 20px; + border-radius: 3px; + text-align: center; + font-weight: bold; + font-size: 14px; + color: #999; + background: #F3F3F3; + -webkit-font-smoothing: antialiased; +} + +/* line 91, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-info { + position: absolute; + bottom: 3px; + right: 5px; +} +/* line 96, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item { + padding-left: 18px; + font-size: 11px; + font-weight: bold; + color: #999; +} +/* line 101, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-item .list-browser-bottom-right-item a { + color: #666; +} + +/* line 107, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar { + font-family: "Helvetica Neue", Helvetica, Arial, freesans; + border-radius: 5px 5px 0 0; + height: 31px; + background-color: #CACACA; + background-image: -moz-linear-gradient(#EFEFEF, #CACACA); + background-image: -webkit-linear-gradient(#EFEFEF, #CACACA); + background-image: linear-gradient(#EFEFEF, #CACACA); + background-repeat: repeat-x; + border-bottom: 1px solid #B4B4B4; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/* line 117, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-filterbar li { + list-style-type: none; + display: inline; +} + +/* line 123, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer { + font-size: 11px; + font-weight: bold; + color: #777; + overflow: hidden; + min-height: 15px; + background: #F6F6F6; + border-radius: 0 0 5px 5px; +} +/* line 131, ../../../hub/static/css/mod/pullrequest-list.scss */ +.list-browser-footer .pagination { + margin: 5px; +} diff --git a/dist/css/mod/pullrequest-pull-head-responsive.css b/dist/css/mod/pullrequest-pull-head-responsive.css new file mode 100644 index 0000000..6e8cd8a --- /dev/null +++ b/dist/css/mod/pullrequest-pull-head-responsive.css @@ -0,0 +1,6 @@ +@media (max-width: 767px) { + /* line 2, ../../../hub/static/css/mod/pullrequest-pull-head-responsive.scss */ + div.pull-head .pull-description p { + white-space: normal; + } +} diff --git a/dist/css/mod/pullrequest-pull-head.css b/dist/css/mod/pullrequest-pull-head.css new file mode 100644 index 0000000..78e0b50 --- /dev/null +++ b/dist/css/mod/pullrequest-pull-head.css @@ -0,0 +1,85 @@ +/* line 1, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .css-truncate-target + .css-truncate-target { + max-width: 125px; +} + +/* line 2, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .commit-ref .user { + color: #CCC; +} + +/* line 3, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head { + margin: 20px 0; + background-color: #FAFAFA; + border: 1px solid #EEE; + border-bottom-width: 2px; + border-radius: 3px; +} + +/* line 4, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .attention-icon { + position: relative; + float: left; + margin: 4px 10px 0 0; +} + +/* line 5, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 10px; + position: relative; + float: left; + margin: 0; + line-height: 36px; + font-size: 13px; + max-width: 690px; + white-space: nowrap; +} + +/* line 6, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p .user { + font-weight: bold; + color: #333; +} + +/* line 8, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description p { + padding-left: 0; +} + +/* line 12, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .pull-state { + float: left; + padding: 8px; + margin-right: 8px; + border-right: 1px solid #EEE; + line-height: 20px; +} + +/* line 13, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +div.pull-head .pull-description .state-indicator { + font-size: 13px; + display: inline-block; + height: 20px; + line-height: 20px; + padding: 0 5px; +} + +/* line 15, ../../../hub/static/css/mod/pullrequest-pull-head.scss */ +.commit-ref { + position: relative; + height: 20px; + display: inline-block; + padding: 0 5px; + border: 1px solid black; + border-radius: 3px; + font: 10px/20px Monaco,"Liberation Mono",Courier,monospace; + color: white; + white-space: nowrap; + vertical-align: middle; + background-color: #222; + background-image: -moz-linear-gradient(#444, #222); + background-image: -webkit-linear-gradient(#444, #222); + background-image: linear-gradient(#444, #222); + background-repeat: repeat-x; +} diff --git a/dist/css/mod/quick-emoji.css b/dist/css/mod/quick-emoji.css new file mode 100644 index 0000000..e53c330 --- /dev/null +++ b/dist/css/mod/quick-emoji.css @@ -0,0 +1,32 @@ +/* line 1, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji { + margin-right: 10px; +} +/* line 4, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .description { + text-align: center; + color: #999; +} +/* line 9, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis { + overflow-x: hidden; + overflow-y: scroll; + word-wrap: break-word; + word-break: break-all; + width: 290px; + height: 260px; +} +/* line 17, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a { + display: block; + float: left; + width: 25px; + height: 25px; + padding: 2px; + border: 1px solid white; +} +/* line 24, ../../../hub/static/css/mod/quick-emoji.scss */ +.quick-emoji .emojis a:hover { + background: #eef; + border: 1px solid #aad; +} diff --git a/dist/css/mod/repository-lang-stats.css b/dist/css/mod/repository-lang-stats.css new file mode 100644 index 0000000..b1f9e13 --- /dev/null +++ b/dist/css/mod/repository-lang-stats.css @@ -0,0 +1,112 @@ +@charset "UTF-8"; +/* line 2, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.metabox { + display: inline-block; + height: 8px; + background: #ccc; + text-indent: -9999px; + font-size: 12px; +} + +/* line 9, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats { + font: 13px Helvetica, arial, freesans, clean, sans-serif; + line-height: 1.4; + margin: 0; + padding: 0; + border: 0; + position: relative; + float: right; + width: 135px; + opacity: 0.5; + padding-bottom: 10px; +} + +/* line 21, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover { + opacity: 1; +} + +/* line 24, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats:hover .list-tip { + display: block; +} + +/* line 27, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats a { + color: #4183c4; + text-decoration: none; +} + +/* line 31, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph { + height: 10px; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/repository-lang-stats.scss */ +.repository-lang-stats-graph span { + display: inline-block; + height: 6px; + background: #ccc; + text-indent: -9999px; + float: left; +} + +/* line 42, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip, ul.list-tip { + border-radius: 3px; + box-shadow: 0 0 5px #ccc; + border: 1px solid #ddd; + background: #fff; + position: absolute; + padding-left: 0px; + top: 20px; + left: -20px; + width: 175px; + z-index: 100; + display: none; + margin-top: 0px; +} + +/* line 56, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip:before, ul.list-tip:before { + content: "▲"; + font-size: 14px; + margin: 0 auto; + width: 14px; + display: block; + margin-top: -13px; + color: #fff; + text-shadow: -1px -1px 2px #ccc; +} + +/* line 66, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li, ul.list-tip li { + margin: 0; + line-height: 100%; + list-style: none; + border-bottom: 1px solid #eee; + font-weight: bold; +} + +/* line 73, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li a, ol.list-tip li .other, ul.list-tip li a, ul.list-tip li .other { + color: #333; + padding: 8px 10px; + display: block; +} + +/* line 78, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.color-block, ul.list-tip li span.color-block { + display: inline-block; + width: 8px; + height: 10px; + margin-right: 5px; +} + +/* line 84, ../../../hub/static/css/mod/repository-lang-stats.scss */ +ol.list-tip li span.percent, ul.list-tip li span.percent { + float: right; + color: #999; +} diff --git a/dist/css/mod/reset.css b/dist/css/mod/reset.css new file mode 100644 index 0000000..fbeaeb3 --- /dev/null +++ b/dist/css/mod/reset.css @@ -0,0 +1,35 @@ +/* line 1, ../../../hub/static/css/mod/reset.scss */ +ul, ol { + list-style-type: none; + display: block; + margin: 0; +} + +/* line 7, ../../../hub/static/css/mod/reset.scss */ +.clear { + clear: both; +} + +/* line 9, ../../../hub/static/css/mod/reset.scss */ +.clearfix { + display: block; +} +/* line 11, ../../../hub/static/css/mod/reset.scss */ +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* hacks for adopting new version of bootstrap */ +/* line 21, ../../../hub/static/css/mod/reset.scss */ +h3 { + line-height: 27px; +} + +/* line 25, ../../../hub/static/css/mod/reset.scss */ +input[type="checkbox"] { + margin: 0; +} diff --git a/dist/css/mod/rightside.css b/dist/css/mod/rightside.css new file mode 100644 index 0000000..6d3529a --- /dev/null +++ b/dist/css/mod/rightside.css @@ -0,0 +1,83 @@ +/* Timeline */ +@media (max-width: 767px) { + /* line 4, ../../../hub/static/css/mod/rightside.scss */ + .rightside { + padding: 10px; + } +} +/* line 7, ../../../hub/static/css/mod/rightside.scss */ +.rightside { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; + margin-bottom: 20px; +} +/* line 12, ../../../hub/static/css/mod/rightside.scss */ +.rightside li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 1px 15px 10px 10px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 21, ../../../hub/static/css/mod/rightside.scss */ +.rightside li .title { + margin-bottom: 0.5em; +} +/* line 23, ../../../hub/static/css/mod/rightside.scss */ +.rightside li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 33, ../../../hub/static/css/mod/rightside.scss */ +.rightside .time { + float: right; + color: #ccc; + font-size: 12px; +} + +/* line 40, ../../../hub/static/css/mod/rightside.scss */ +.rightside .padding { + height: 2em; + font-weight: bold; +} + +/* line 45, ../../../hub/static/css/mod/rightside.scss */ +.rightside .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/rightside.scss */ +.rightside .time { + color: #bbb; +} + +/* line 52, ../../../hub/static/css/mod/rightside.scss */ +.rightside .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 58, ../../../hub/static/css/mod/rightside.scss */ +.rightside .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 63, ../../../hub/static/css/mod/rightside.scss */ +div.right-tittle { + color: gray; + background: rgba(99, 182, 174, 0.2); + text-align: center; + padding-top: 6px; + padding-bottom: 6px; + font-size: 14px; + font-weight: bold; +} diff --git a/dist/css/mod/setting-box.css b/dist/css/mod/setting-box.css new file mode 100644 index 0000000..7aa9b3c --- /dev/null +++ b/dist/css/mod/setting-box.css @@ -0,0 +1,64 @@ +/* line 1, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group { + position: relative; + background: #EFEFEF; + padding: 3px; + border-radius: 3px; + margin: 0 0 15px 0; +} + +/* line 8, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group > h3 { + background: #FAFAFA; + background: -moz-linear-gradient(#FAFAFA, #E0E0E0); + background: -webkit-linear-gradient(#FAFAFA, #E0E0E0); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#e0e0e0')"; + margin: 0; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + border: 1px solid #D8D8D8; + border-bottom: 1px solid #CCC; + padding: 10px 10px 11px 10px; + font-size: 14px; + text-shadow: 0 1px 0 white; +} + +/* line 22, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group .boxed-group-inner { + padding: 1px 10px; + background: white; + border: 1px solid #D8D8D8; + border-top: none; + border-bottom-left-radius: 1px; + border-bottom-right-radius: 1px; + color: #666; + font-size: 13px; +} + +/* line 32, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed > h3 { + padding: 6px 6px 7px; + font-size: 12px; +} + +/* line 36, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed > h3 i { + position: relative; + padding: 0 6px 0 2px; +} + +/* line 40, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group.condensed .boxed-group-inner { + font-size: 12px; + padding: 0; +} + +/* line 45, ../../../hub/static/css/mod/setting-box.scss */ +.boxed-group-list > li { + display: block; + margin-left: -10px; + width: 100%; + padding: 5px 10px; + line-height: 23px; + border-bottom: 1px solid #E5E5E5; +} diff --git a/dist/css/mod/side-item.css b/dist/css/mod/side-item.css new file mode 100644 index 0000000..a267542 --- /dev/null +++ b/dist/css/mod/side-item.css @@ -0,0 +1,124 @@ +/* Item Listing */ +/* line 2, ../../../hub/static/css/mod/side-item.scss */ +.items { + margin-top: 27px; + border: 1px solid #DDD; + border-radius: 5px; +} + +/* line 7, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar { + position: relative; + height: 44px; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom: 1px solid #e1e1e2; +} + +/* line 23, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar h2 { + margin: 0; + height: 44px; + line-height: 44px; + padding: 0 10px; + font-size: 16px; + color: #52595d; + border-bottom: 1px solid #D7D7D7; + background-color: #fafafa; + background: -moz-linear-gradient(#fafafa, #eaeaea); + background: -ms-linear-gradient(#fafafa, #eaeaea); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #eaeaea)); + background: -webkit-linear-gradient(#fafafa, #eaeaea); + background: -o-linear-gradient(#fafafa, #eaeaea); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')"; + background: linear-gradient(#fafafa, #eaeaea); +} + +/* line 41, ../../../hub/static/css/mod/side-item.scss */ +.items .top-bar .actions { + float: right; + margin-top: 10px; + margin-right: 5px; +} + +/* line 47, ../../../hub/static/css/mod/side-item.scss */ +.items h2 em { + color: #99A4AA; + font-style: normal; +} + +/* line 51, ../../../hub/static/css/mod/side-item.scss */ +.items input { + margin-bottom: 0; +} + +/* line 54, ../../../hub/static/css/mod/side-item.scss */ +.items ul.item_list { + margin: 0; +} + +/* line 57, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li { + border: none; + color: #666; + border-bottom: 1px solid #E5E5E5; + padding: 6px 10px 5px 12px; +} + +/* line 64, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.action { + float: right; +} + +/* line 67, ../../../hub/static/css/mod/side-item.scss */ +.items .item_list li a.item { + font-weight: bold; +} + +/* line 70, ../../../hub/static/css/mod/side-item.scss */ +.items .bottom-bar { + min-height: 13px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #FAFAFB; +} + +/* Item Listing using flatui*/ +/* line 78, ../../../hub/static/css/mod/side-item.scss */ +ul .inline-left { + float: right; + padding: 0 5px 0 5px; +} + +/* line 83, ../../../hub/static/css/mod/side-item.scss */ +.dull-comment { + font-size: 11px; + color: #999; + margin: 0; + line-height: 20px; +} + +/* line 90, ../../../hub/static/css/mod/side-item.scss */ +.nav .top-bar { + margin: 15px 0 0 15px; + font-size: 15px; + position: relative; +} + +/* line 96, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li { + line-height: 27px; +} + +/* line 100, ../../../hub/static/css/mod/side-item.scss */ +.nav-list li a.item { + display: inline; +} diff --git a/dist/css/mod/source-code-pro.css b/dist/css/mod/source-code-pro.css new file mode 100644 index 0000000..0a30686 --- /dev/null +++ b/dist/css/mod/source-code-pro.css @@ -0,0 +1,24 @@ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), local("SourceCodePro-Regular"), url("/static/css/fonts/SourceCodePro-Regular.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: local("Source Code Pro Medium"), local("SourceCodePro-Medium"), url("/static/css/fonts/SourceCodePro-Medium.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local("Source Code Pro Semibold"), local("SourceCodePro-Semibold"), url("/static/css/fonts/SourceCodePro-Semibold.woff") format("woff"); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), local("SourceCodePro-Bold"), url("/static/css/fonts/SourceCodePro-Bold.woff") format("woff"); +} diff --git a/dist/css/mod/source-edit.css b/dist/css/mod/source-edit.css new file mode 100644 index 0000000..f044134 --- /dev/null +++ b/dist/css/mod/source-edit.css @@ -0,0 +1,35 @@ +/* line 1, ../../../hub/static/css/mod/source-edit.scss */ +.raw { + overflow: visible; +} + +/* line 2, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop { + float: right; + width: 137px; + height: 140px; + margin-top: -140px; + margin-right: 20px; + overflow: hidden; + position: relative; +} + +/* line 9, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop .popic { + display: block; + position: absolute; + bottom: -115px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; +} + +/* line 19, ../../../hub/static/css/mod/source-edit.scss */ +div.helpop:hover .popic { + bottom: -10px; + -webkit-transition: all 300ms ease-out; + -moz-transition: all 300ms ease-out; + -o-transition: all 300ms ease-out; + -ms-transition: all 300ms ease-out; +} diff --git a/dist/css/mod/source.css b/dist/css/mod/source.css new file mode 100644 index 0000000..4d5c64b --- /dev/null +++ b/dist/css/mod/source.css @@ -0,0 +1,187 @@ +@font-face { + font-family: 'Octicons Regular'; + src: url("/static/octicons/octicons-regular-webfont.svg") format("svg"), url("/static/octicons/octicons-regular-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +/* line 8, ../../../hub/static/css/mod/source.scss */ +.last-bar { + margin-top: 5px; +} + +/* line 11, ../../../hub/static/css/mod/source.scss */ +p.last-commit { + margin: 10px 0 -5px 0; + font-size: 11px; + color: #888; +} +/* line 16, ../../../hub/static/css/mod/source.scss */ +p.last-commit .mini-icon { + color: #BBB; + position: relative; + top: 1px; +} + +/* line 22, ../../../hub/static/css/mod/source.scss */ +.pr-latest-branch { + color: #888; + margin-top: 10px; + line-height: 27px; + border-bottom: 1px solid #DDD; + padding-bottom: 10px; +} + +/* line 29, ../../../hub/static/css/mod/source.scss */ +.pr-latest-branch #pullrequest-btn { + margin-right: 5px; +} + +/* line 32, ../../../hub/static/css/mod/source.scss */ +.mini-icon, .mega-icon { + line-height: 1; + font-family: 'Octicons Regular'; + font-weight: normal; + font-style: normal; + display: inline-block; + text-decoration: inherit; + line-height: 1; + -webkit-font-smoothing: antialiased; + text-decoration: none; +} + +/* line 43, ../../../hub/static/css/mod/source.scss */ +.commit-tease { + margin: 10px 0; + padding: 8px 8px 0; + background: #EEE; + border: 1px solid #C5D5DD; + border-radius: 4px; +} + +/* line 50, ../../../hub/static/css/mod/source.scss */ +.commit-tease p.commit-title { + margin: 0 0 6px 0; +} + +/* line 53, ../../../hub/static/css/mod/source.scss */ +.commit .commit-title, .commit .commit-title a { + color: #4E575B; +} + +/* line 56, ../../../hub/static/css/mod/source.scss */ +.commit-tease .commit-meta { + margin-left: -8px; + width: 100%; + padding: 8px; + background: white; + border-top: 1px solid #D8E6EC; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* line 65, ../../../hub/static/css/mod/source.scss */ +.commit-tease .sha-block { + float: right; + color: #888; +} + +/* line 69, ../../../hub/static/css/mod/source.scss */ +.commit .sha-block, .commit .sha { + font-size: 11px; + font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; +} + +/* line 73, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship { + font-size: 12px; + color: #999; + margin-left: -4px; + margin-bottom: -4px; + margin-top: -2px; +} +/* line 79, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship .gravatar { + margin-top: -2px; + margin-right: 3px; + vertical-align: middle; + border-radius: 3px; +} +/* line 85, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship a, .commit-tease .authorship span { + color: #444; + text-decoration: none; + font-weight: bold; +} +/* line 89, ../../../hub/static/css/mod/source.scss */ +.commit-tease .authorship a:hover, .commit-tease .authorship span:hover { + text-decoration: underline; +} + +/* line 95, ../../../hub/static/css/mod/source.scss */ +.commit-tease .mini-icon-clippy { + margin-right: 5px; + float: right; +} + +/* line 99, ../../../hub/static/css/mod/source.scss */ +.mini-icon-clippy { + display: inline-block; + height: 16px; + width: 16px; + background-color: transparent; + background-position: 0 0; + background-repeat: no-repeat; + vertical-align: text-bottom; + background-image: url("/static/img/clippy.png"); +} + +/* line 109, ../../../hub/static/css/mod/source.scss */ +.mini-icon-u-list:before { + content: "\f061"; +} + +/* line 110, ../../../hub/static/css/mod/source.scss */ +.mini-icon-text-file:before { + content: "\f211"; +} + +/* line 111, ../../../hub/static/css/mod/source.scss */ +.mini-icon-code-file:before { + content: "\f210"; +} + +/* line 112, ../../../hub/static/css/mod/source.scss */ +.mini-icon-directory:before { + content: "\f016"; +} + +/* line 113, ../../../hub/static/css/mod/source.scss */ +.mini-icon-submodule:before { + content: "\f017"; +} + +/* line 115, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li { + padding: 3px 0 2px 0; + border-top: 1px solid #eee; +} + +/* line 116, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles a.mode-040000 { + color: #333; +} + +/* line 117, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li a { + display: block; +} + +/* line 118, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li:hover { + background: #eee; +} + +/* line 119, ../../../hub/static/css/mod/source.scss */ +ul.browsefiles li a.warn-bad { + color: red; +} diff --git a/dist/css/mod/subnav.css b/dist/css/mod/subnav.css new file mode 100644 index 0000000..c0d0970 --- /dev/null +++ b/dist/css/mod/subnav.css @@ -0,0 +1,125 @@ +/* Subnav */ +/* line 2, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li { + list-style-display: none; + float: none; + width: 1%; + display: table-cell; + text-align: center; +} + +/* line 3, ../../../hub/static/css/mod/subnav.scss */ +.nav-pills li a .counter { + position: relative; + top: -1px; + display: inline-block; + height: 14px; + margin: 0 0 0 5px; + padding: 0 8px 0px 8px; + height: auto; + font-family: Helvetica,arial,freesans,clean,sans-serif; + font-size: 10px; + line-height: 12px; + text-align: center; + color: #777; + background: white; + border-top: 1px solid #CCC; + border-radius: 8px; +} + +/* line 5, ../../../hub/static/css/mod/subnav.scss */ +.subnav { + width: 100%; + height: 36px; + background-color: #eeeeee; + /* Old browsers */ + background-repeat: repeat-x; + /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #eeeeee)); + /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); + /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); + /* W3C */ + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* line 22, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav { + margin-bottom: 0; + font-weight: bold; +} + +/* line 26, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li > a { + display: block; + margin: 0; + padding-top: 11px; + padding-bottom: 10px; + border-left: 1px solid #f5f5f5; + border-right: 1px solid #e5e5e5; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #777; + font-size: 12px; + text-shadow: 0 1px 0 white; + text-decoration: none; + padding-left: 5px; + padding-right: 5px; +} + +/* line 43, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a { + border-bottom: 2px solid #D26911; +} + +/* line 46, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active a.tab_docs { + border-bottom-color: #34833E; +} + +/* line 49, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a, +.subnav .nav > .active > a:hover { + padding-left: 13px; + color: black; + background-color: #e9e9e9; + border-right-color: #ddd; + border-left: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.05); +} + +/* line 60, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > .active > a .caret, +.subnav .nav > .active > a:hover .caret { + border-top-color: #777; +} + +/* line 64, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:first-child > a, +.subnav .nav > li:first-child > a:hover { + border-left: 0; + padding-left: 12px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +/* line 72, ../../../hub/static/css/mod/subnav.scss */ +.subnav .nav > li:last-child > a { + border-right: 0; +} diff --git a/dist/css/mod/tag-list.css b/dist/css/mod/tag-list.css new file mode 100644 index 0000000..aef3154 --- /dev/null +++ b/dist/css/mod/tag-list.css @@ -0,0 +1,168 @@ +/* line 1, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li .tag-filter, .issue-tags ul li .tag-remove, .issue-tags ul li .icon-remove, .issue-tags ul li .icon-white, .issue-tags ul .tag-filter, .issue-tags ul .tag-remove, .issue-tags ul .icon-remove, .issue-tags ul .icon-white { + background: #63b6ae; + background-image: none; + cursor: pointer; +} + +/* line 6, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li a:hover, .issue-tags ul a:hover { + background: #63b6ae; + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + border-radius: 4px; +} + +/* line 12, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags { + padding: 8px 0; +} +/* line 15, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li { + line-height: 20px; +} +/* line 23, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li .tag-remove, .issue-tags ul li .icon-remove, .issue-tags ul li .icon-white { + float: right; +} +/* line 31, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul .tag-remove, .issue-tags ul .icon-remove, .issue-tags ul .icon-white { + float: right; +} +/* line 40, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags ul li.active a { + border-radius: 4px; +} +/* line 44, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .nav-header { + margin-bottom: 8px; +} +/* line 47, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin { + float: right; + cursor: pointer; + font-weight: 400; +} +/* line 52, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin-unuse { + color: #63b6ae; +} +/* line 55, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .tag-admin-using { + color: #999; +} +/* line 58, ../../../hub/static/css/mod/tag-list.scss */ +.issue-tags .nav-list-edit .tag-item { + display: block; + padding: 3px 1px; + color: #08c; +} + +/* edit tag */ +/* line 66, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser .color-cooser-color { + display: block; + text-align: center; + height: 25px; + cursor: pointer; + box-sizing: border-box; + border: solid 2px transparent; +} + +/* line 74, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form.open .color-chooser, .edit-color-label-form.open .color-editor { + display: block; +} + +/* line 77, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser { + height: 25px; + list-style-type: none; + display: table-row; +} + +/* line 82, ../../../hub/static/css/mod/tag-list.scss */ +ul.color-chooser li { + display: table-cell; + width: 1%; + vertical-align: top; +} + +/* line 87, ../../../hub/static/css/mod/tag-list.scss */ +.fieldWithErrors { + display: inline; +} + +/* line 90, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor-bg { + position: absolute; + left: 0; + height: 25px; + width: 130px; + opacity: 0.12; + border-radius: 3px; +} + +/* line 98, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .color-editor-input { + position: absolute; + left: 0; + background-color: transparent; + min-height: 25px; + border-left-width: 26px; + padding-top: 3px; + padding-bottom: 3px; + width: 130px; +} + +/* line 108, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .invalid-color-indicator { + display: none; + position: absolute; + top: 5px; + left: 9px; + color: #c00; + z-index: 10; + font-weight: bold; +} + +/* line 117, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor { + margin-top: 5px; + position: relative; + height: 25px; + margin-bottom: 10px; +} + +/* line 123, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form .color-editor .invalid-color-indicator { + display: none; + position: absolute; + top: 5px; + left: 9px; + color: #c00; + z-index: 10; + font-weight: bold; +} + +/* line 132, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form input[type="text"] { + min-height: 34px; + padding: 7px 8px; + outline: none; + color: #333; + background-color: #fff; + background-repeat: no-repeat; + background-position: right center; + border: 1px solid #ccc; + border-radius: 3px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + -moz-box-sizing: border-box; + box-sizing: border-box; + vertical-align: middle; +} + +/* line 147, ../../../hub/static/css/mod/tag-list.scss */ +.edit-color-label-form.is-not-valid .color-editor .invalid-color-indicator { + display: block; +} diff --git a/dist/css/mod/team-card.css b/dist/css/mod/team-card.css new file mode 100644 index 0000000..a53b058 --- /dev/null +++ b/dist/css/mod/team-card.css @@ -0,0 +1,98 @@ +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} diff --git a/dist/css/mod/team-header.css b/dist/css/mod/team-header.css new file mode 100644 index 0000000..4574625 --- /dev/null +++ b/dist/css/mod/team-header.css @@ -0,0 +1,29 @@ +/* line 2, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-left { + margin: 0; + font-size: 30px; + line-height: 36px; + float: left; +} +/* line 8, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc { + margin-top: 12px; + margin-left: 5px; + margin-bottom: 0; + width: 60%; + float: left; +} +/* line 9, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p { + margin: 0; +} +/* line 10, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-desc p small { + padding: 0 6px; + background: rgba(99, 182, 174, 0.2); + color: #63b6ae; +} +/* line 23, ../../../hub/static/css/mod/team-header.scss */ +.pagehead .team-right { + float: right; +} diff --git a/dist/css/mod/team-item.css b/dist/css/mod/team-item.css new file mode 100644 index 0000000..35b2e12 --- /dev/null +++ b/dist/css/mod/team-item.css @@ -0,0 +1,84 @@ +/* line 1, ../../../hub/static/css/mod/team-item.scss */ +.bs-docs-team:after { + content: "Team"; +} + +/* line 4, ../../../hub/static/css/mod/team-item.scss */ +.team-item { + position: relative; + margin: 15px 0; + padding: 14px 19px 14px 49px; + *padding-top: 14px; + background-color: transparent; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +/* line 14, ../../../hub/static/css/mod/team-item.scss */ +.team-item:after { + position: absolute; + top: -1px; + left: -1px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #ddd; + color: #9da0a4; + -webkit-border-radius: 4px 0 4px 0; + -moz-border-radius: 4px 0 4px 0; + border-radius: 4px 0 4px 0; +} +/* line 28, ../../../hub/static/css/mod/team-item.scss */ +.team-item h4.team-title { + margin: 0; +} +/* line 30, ../../../hub/static/css/mod/team-item.scss */ +.team-item h4.team-title i { + margin-top: 5px; +} +/* line 34, ../../../hub/static/css/mod/team-item.scss */ +.team-item ul.team-stats li { + float: left; + margin-left: 10px; +} +/* line 38, ../../../hub/static/css/mod/team-item.scss */ +.team-item .team-item .summary { + margin-top: 10px; +} + +/* line 43, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list { + height: 26px; + margin-bottom: 1px; + list-style: none; + display: block; +} +/* line 48, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list ul { + float: right; + margin-right: 10px; + margin-top: 0px; +} +/* line 53, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list li { + float: left; + margin-left: 10px; + line-height: 20px; +} +/* line 57, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + border-radius: 4px; + text-decoration: none; +} +/* line 65, ../../../hub/static/css/mod/team-item.scss */ +.team-user-list li a img { + width: 26px; + height: 26px; +} diff --git a/dist/css/mod/text-truncate.css b/dist/css/mod/text-truncate.css new file mode 100644 index 0000000..9317d53 --- /dev/null +++ b/dist/css/mod/text-truncate.css @@ -0,0 +1,14 @@ +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} diff --git a/dist/css/mod/timeline.css b/dist/css/mod/timeline.css new file mode 100644 index 0000000..8d44b12 --- /dev/null +++ b/dist/css/mod/timeline.css @@ -0,0 +1,291 @@ +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 1, ../../../hub/static/css/mod/team-card.scss */ +.team-card { + position: absolute; + padding: 6px 10px; + min-height: 68px; + width: 236px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + overflow: hidden; +} +/* line 10, ../../../hub/static/css/mod/team-card.scss */ +.team-card .pic { + float: right; + max-height: 50px; + margin: 6px 0 0 10px; +} +/* line 15, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content { + word-wrap: break-word; +} +/* line 17, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .title { + margin: 6px 0; + font-size: 15px; + overflow: hidden; + white-space: nowrap; +} +/* line 23, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info { + position: relative; + margin-top: 10px; + font-size: 13px; +} +/* line 27, ../../../hub/static/css/mod/team-card.scss */ +.team-card .content .info .desc { + white-space: nowrap; + overflow: hidden; +} + +/* line 35, ../../../hub/static/css/mod/team-card.scss */ +.member { + border-top: solid 1px #eaeaea; + padding-top: 8px; + height: 26px; +} +/* line 39, ../../../hub/static/css/mod/team-card.scss */ +.member .more-members { + float: right; + width: 24px; + height: 24px; + line-height: 26px; + text-align: center; + border: 1px solid #eaeaea; + background: #eaeaea; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 53, ../../../hub/static/css/mod/team-card.scss */ +.member .members li { + float: left; +} +/* line 55, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a { + display: block; + width: 26px; + height: 26px; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +/* line 65, ../../../hub/static/css/mod/team-card.scss */ +.member .members li a img { + width: 26px; + height: 26px; +} + +/* line 73, ../../../hub/static/css/mod/team-card.scss */ +.cf { + zoom: 1; +} +/* line 75, ../../../hub/static/css/mod/team-card.scss */ +.cf:before { + content: ""; + display: table; +} +/* line 79, ../../../hub/static/css/mod/team-card.scss */ +.cf .cf:after { + clear: both; + content: ""; + display: table; +} + +/* Timeline */ +@media (max-width: 767px) { + /* line 6, ../../../hub/static/css/mod/timeline.scss */ + .timeline { + padding: 10px; + } +} +/* line 9, ../../../hub/static/css/mod/timeline.scss */ +.timeline { + margin-top: 0px; + word-wrap: break-word; + word-break: normal; +} +/* line 14, ../../../hub/static/css/mod/timeline.scss */ +.timeline li { + position: relative; + list-style: none; + clear: both; + background: white; + padding: 10px 20px 10px 32px; + margin: 0 0 0px; + border-bottom: 1px solid #eaeaea; +} +/* line 23, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title { + margin-bottom: 0.5em; +} +/* line 25, ../../../hub/static/css/mod/timeline.scss */ +.timeline li .title i { + position: absolute; + left: 5px; + padding: 2px 5px 0; + color: #999; + font-size: 10px; +} +/* line 35, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + float: right; + color: #ccc; + font-size: 12px; +} +/* line 41, ../../../hub/static/css/mod/timeline.scss */ +.timeline code { + white-space: normal; +} + +/* line 46, ../../../hub/static/css/mod/timeline.scss */ +.timeline .padding { + height: 2em; + font-weight: bold; +} + +/* line 50, ../../../hub/static/css/mod/timeline.scss */ +.timeline .more_items { + margin-left: 10px; + font-weight: bold; +} + +/* line 54, ../../../hub/static/css/mod/timeline.scss */ +.timeline .time { + color: #bbb; +} + +/* line 57, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc { + padding: 0 0 1em 0; + color: #666; + word-wrap: break-word; +} + +/* line 62, ../../../hub/static/css/mod/timeline.scss */ +.timeline .desc .right_side { + float: right; + margin-right: 30px; +} + +/* line 67, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination { + display: none; + background: #63b6ae; +} + +/* line 71, ../../../hub/static/css/mod/timeline.scss */ +.pagination { + display: block; + margin: 7px 0; + overflow: hidden; + border: 1px solid #EAEAEA; + border-bottom-color: #CACACA; + border-top: none; + border-bottom: none; + border-radius: 3px; + background-image: -webkit-linear-gradient(top, white, #EFEFEF); +} + +/* line 82, ../../../hub/static/css/mod/timeline.scss */ +.timeline .pagination a { + color: white; +} + +/* line 85, ../../../hub/static/css/mod/timeline.scss */ +.pagination a { + padding: 8px; + width: 100%; + text-align: center; + line-height: 1.4; +} + +/* line 91, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:last-child, .pagination span:last-child { + border-right: none; + border-bottom-right-radius: 3px; +} + +/* line 95, ../../../hub/static/css/mod/timeline.scss */ +.pagination a:first-child, .pagination span:first-child { + border-left: none; + border-bottom-left-radius: 3px; +} + +/* line 99, ../../../hub/static/css/mod/timeline.scss */ +.pagination a, .pagination span { + float: left; + margin: 0; + color: #777; + font-size: 13px; + text-decoration: none; + text-shadow: 0 1px 0 white; + border-bottom: 1px solid #DADADA; +} + +/* line 108, ../../../hub/static/css/mod/timeline.scss */ +.timeline .loader img { + display: block; + width: 16px; + height: 16px; + margin: 0 auto; + position: relative; +} diff --git a/dist/css/mod/upload-widget.css b/dist/css/mod/upload-widget.css new file mode 100644 index 0000000..023521b --- /dev/null +++ b/dist/css/mod/upload-widget.css @@ -0,0 +1,19 @@ +/* line 1, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget { + position: relative; + top: -50px; + width: 360px; +} +/* line 7, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget input { + position: absolute; + width: 120px; + opacity: 0.0001; + cursor: pointer; + margin: 0; +} +/* line 15, ../../../hub/static/css/mod/upload-widget.scss */ +.upload-widget form { + width: 120px; + float: left; +} diff --git a/dist/css/mod/user-avatar.css b/dist/css/mod/user-avatar.css new file mode 100644 index 0000000..a60dcba --- /dev/null +++ b/dist/css/mod/user-avatar.css @@ -0,0 +1,34 @@ +/* line 1, ../../../hub/static/css/mod/user-avatar.scss */ +.user-avatar-mini { + width: 12px; + height: 12px; +} + +/* line 6, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar { + margin-right: 5px; + vertical-align: middle; +} + +/* line 10, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.tiny { + width: 16px; + height: 16px; +} + +/* line 14, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.small { + width: 20px; + height: 20px; +} + +/* line 18, ../../../hub/static/css/mod/user-avatar.scss */ +img.avatar.medium { + width: 40px; + height: 40px; +} + +/* line 23, ../../../hub/static/css/mod/user-avatar.scss */ +.avatar img { + border-radius: 3px; +} diff --git a/dist/css/mod/user-card.css b/dist/css/mod/user-card.css new file mode 100644 index 0000000..10ed544 --- /dev/null +++ b/dist/css/mod/user-card.css @@ -0,0 +1,52 @@ +/* line 1, ../../../hub/static/css/mod/user-card.scss */ +.user-card { + position: absolute; + padding: 3px 5px 5px; + min-height: 68px; + width: 210px; + background-color: #fff; + border: 1px solid #BEBEBE; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +/* line 2, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc { + margin-left: 3px; +} + +/* line 3, ../../../hub/static/css/mod/user-card.scss */ +.user-card .avatar-wrap { + width: 46px; + height: 36px; + float: left; + margin-right: 6px; + border-right: 1px solid #BEBEBE; +} + +/* line 4, ../../../hub/static/css/mod/user-card.scss */ +.user-card .badge-item { + float: left; + width: 30px; + height: 30px; + border: none; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} + +/* line 5, ../../../hub/static/css/mod/user-card.scss */ +.user-card .title { + padding: 0 0 0.25em 0; +} + +/* line 6, ../../../hub/static/css/mod/user-card.scss */ +.user-card .desc .avatar { + float: left; + width: 30px; + height: 30px; + padding: 2px; + background-color: white; + line-height: 0; + margin-right: 0.7em; +} diff --git a/dist/css/mod/user-list.css b/dist/css/mod/user-list.css new file mode 100644 index 0000000..5754b89 --- /dev/null +++ b/dist/css/mod/user-list.css @@ -0,0 +1,45 @@ +/* line 1, ../../../hub/static/css/mod/user-list.scss */ +.user-list { + border-top: 1px solid rgba(0, 0, 0, 0.05); + list-style: none; +} + +/* line 2, ../../../hub/static/css/mod/user-list.scss */ +.user-list li { + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + line-height: 26px; + padding: 6px 0 6px 30px; + position: relative; +} + +/* line 3, ../../../hub/static/css/mod/user-list.scss */ +.user-list li a { + font-weight: bold; + color: #4183C4; +} + +/* line 4, ../../../hub/static/css/mod/user-list.scss */ +.user-list li img { + border-radius: 3px; + margin-top: 1px; + position: absolute; + left: 0; + border: 0; +} + +/* line 5, ../../../hub/static/css/mod/user-list.scss */ +.user-list li .actions { + position: absolute; + top: 6px; + right: 0; +} + +/* line 6, ../../../hub/static/css/mod/user-list.scss */ +.user-list li .actions a { + color: #333; +} + +/* line 7, ../../../hub/static/css/mod/user-list.scss */ +.user-list li .actions a:hover { + color: #FFF; +} diff --git a/dist/css/mod/watched-projects.css b/dist/css/mod/watched-projects.css new file mode 100644 index 0000000..23082ae --- /dev/null +++ b/dist/css/mod/watched-projects.css @@ -0,0 +1,22 @@ +/* line 8, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.css-truncate-target, .css-truncate .css-truncate-target { + max-width: 125px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; + display: inline-block; +} + +/* line 14, ../../../hub/static/css/mod/text-truncate.scss */ +.css-truncate.expandable:hover .css-truncate-target { + max-width: 10000px !important; +} + +/* line 4, ../../../hub/static/css/mod/watched-projects.scss */ +.watched-projects li { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/dist/css/mod/zen-forms.css b/dist/css/mod/zen-forms.css new file mode 100644 index 0000000..1d4d1b7 --- /dev/null +++ b/dist/css/mod/zen-forms.css @@ -0,0 +1,191 @@ +@charset "UTF-8"; +/* ================================== *\ + * Zen Form + * ================================== */ +/* line 6, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 24px 30px 24px 24px; +} + +/* line 16, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-input-wrap { + max-width: 640px; + position: relative; + margin: 0 auto; +} + +/** + * Buttons style + */ +/* line 25, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button, +.zen-forms-theme-switch { + position: absolute; + width: 18px; + height: 18px; + text-align: center; + top: 10px; + right: 10px; + font-size: 24px; + color: #516066; + cursor: pointer; + line-height: 1; +} + +/* line 39, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-theme-switch { + top: 28px; + font-size: 34px; +} + +/* line 44, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms-close-button:hover, +.zen-forms-theme-switch:hover { + color: #667981; +} + +/** + * Inputs basic style + */ +/* line 52, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + padding: 8px 0; + width: 100%; + background: none; + border: none; + margin-bottom: 24px; + cursor: pointer; +} + +/* line 62, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus, +.zen-forms textarea:focus { + cursor: text; +} + +/* line 67, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms textarea { + resize: none; +} + +/* line 71, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + cursor: pointer; + display: none; + padding: 8px 3; + position: absolute; + top: 0; + width: 100%; +} + +/* line 80, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms .empty + label { + display: block; +} + +/* line 84, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input:focus + label, +.zen-forms textarea:focus + label { + display: none; +} + +/* line 89, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms :focus { + outline-color: transparent; + outline-style: none; +} + +/** + * Dark theme + */ +/* line 97, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms { + background: #151a1c; +} + +/* line 101, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms label { + color: #516066; +} + +/* line 105, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms input, +.zen-forms textarea { + color: #667981; +} + +/** + * Light theme + */ +/* line 113, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme { + background: #fefefe; +} + +/* line 117, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme label { + color: #959697; +} + +/* line 121, ../../../hub/static/css/lib/zen-form.scss */ +.zen-forms.light-theme input, +.zen-forms.light-theme textarea { + color: #707071; +} + +/* line 4, ../../../hub/static/css/mod/zen-forms.scss */ +.write-content .enable-fullscreen { + position: absolute; + top: 5px; + right: 16px; + color: #333333; + opacity: .5; + line-height: 1em; +} + +/* line 5, ../../../hub/static/css/mod/zen-forms.scss */ +.mini-icon-fullscreen::before { + content: ""; +} + +/* line 6, ../../../hub/static/css/mod/zen-forms.scss */ +.fullscreen-overlay textarea, .zen-forms textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 20px; + border: 0; + font-size: 21px; + line-height: 1.6em; + resize: none; + -moz-transition: color 0.15s ease-in 0; + -webkit-transition: color 0.15s ease-in 0; + transition: color 0.15s ease-in 0; + box-shadow: none; +} + +/* line 7, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms.light-theme textarea { + background: #fff; + color: #999999; +} + +/* line 8, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms .zen-forms-input-wrap { + width: 100%; + height: 100%; +} + +/* line 9, ../../../hub/static/css/mod/zen-forms.scss */ +.zen-forms label[for^=zen-forms-input] { + display: none; +} diff --git a/dist/js/app/badge/main.js b/dist/js/app/badge/main.js new file mode 100644 index 0000000..736b4ae --- /dev/null +++ b/dist/js/app/badge/main.js @@ -0,0 +1,75 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +require(['jquery-tmpl'], function(){ + + var increment = 10; //badge_item per page / Additional badges displayed per click + var index = 0; //Number of times more badge info has been requested + var badge_list; + var item_count; + var last_day = null; + + $(function get_badges() { + $.getJSON("/badge/badges", function(badges) { + badge_list = badges; + get_item_count(); + }); + }); + + var get_item_count = function() { + $.getJSON("/badge/count", {}, function(count) { + item_count = count[0]; + populate_list(); + if (increment < item_count) { + $(".timeline .more").append("See more"); + $("a.more_items").click(populate_list); + } + }); + }; + + var populate_list = function() { + index++; + var data_vars = { + ind: index - 1, + inc: increment + }; + $.getJSON("/badge/items", data_vars, function(items) { + $.each(items, function(i, day) { + var badge_date = new Date(day[0][3]); + var text = ""; + if (last_day == null || last_day.toDateString() != badge_date.toDateString()) { + var date_string = badge_date.getFullYear() + "-" + (badge_date.getMonth()+1) + "-" + badge_date.getDate(); + text += "

" + date_string + "

"; + } + last_day = badge_date; + text += "
"; + $(".timeline>dl").append(text); + var data = []; + $.each(day, function(j, item) { + var id = item[0]; + var item_date = new Date(item[3]); + item_date.setHours(item_date.getHours() + item_date.getTimezoneOffset()/60); + var time_string = item_date.toLocaleTimeString(); + var item_data = { + badge_id: id, + recipient: item[1], + avatar: item[4], + reason: item[2] == null ? "" : item[2], + item_time: time_string.substring(0, time_string.length - 3), + badge_name: badge_list[id-1][1], + summary: badge_list[id-1][2] + }; + data.push(item_data); + }); + $("#timeline_template").tmpl(data).appendTo(".action:last"); + }); + if (index * increment > item_count) { + $(".more_items").remove(); + } + }); + }; + +}); diff --git a/dist/js/app/center/main.js b/dist/js/app/center/main.js new file mode 100644 index 0000000..135dea1 --- /dev/null +++ b/dist/js/app/center/main.js @@ -0,0 +1,1641 @@ + +require.config({ enable_ozma: true }); + + +/* @source lib/zen-form.js */; + +/** Zen Forms 1.0.0 | MIT License | git.io/zen-form */ + +(function($) { + + $.fn.zenForm = function(settings) { + + settings = $.extend({ + trigger: '.go-zen', + theme: 'dark' + }, settings); + + /** + * Helper functions + */ + var Utils = { + + watchEmpty: function($form) { + + $form.find('input, textarea').each(function() { + $(this).on('change', function() { + $(this)[ $(this).val() ? 'removeClass' : 'addClass' ]('empty'); + }).trigger('change'); + }); + + } + + }, // Utils + + /** + * Core functionality + */ + App = { + + /** + * Wrapper element + */ + Environment: null, + + /** + * Functions to create and manipulate environment + */ + env: { + + create: function() { + + var theme = settings.theme == 'dark' ? '' : ' light-theme'; + + return $('
', {class: 'zen-forms' + theme}).hide().appendTo('body').fadeIn(200); + + }, // create + + /** + * Update orginal inputs with new values and destroy Environment + */ + destroy: function($elements) { + + // Update orginal inputs with new values + $elements.each(function(i) { + + var $el = $('#zen-forms-input' + i); + + if ( $el.length ) + $(this).val($el.val()); + + }).filter('input:text,textarea').eq(0).focus(); + + $('.zen-forms').fadeOut(200, function() { + $(this).remove(); + }); + + }, // destroy + + /** + * Append inputs, textareas to Environment + */ + add: function($elements) { + + $elements.each(function(i) { + + var $this = $(this), + $wrapper = App.env.addObject(App.Environment, 'div', {class: 'zen-forms-input-wrap'}), + + value = $this.val(), + id = $this.attr('id'), + ID = 'zen-forms-input' + i, + label = $("label[for=" + id + "]").text() || $this.attr('placeholder') || ''; + + // Exclude specified elements + if ( $.inArray( $this.attr('type'), ['checkbox', 'radio', 'submit']) == -1) { + + if ( $this.is('input') ) + App.env.addObject($wrapper, 'input', { + id: ID, + value: value, + type: $this.attr('type') + }); + else + App.env.addObject($wrapper, 'textarea', { + id: ID, + text: value + }); + + App.env.addObject($wrapper, 'label', { + for: ID, + text: label + }); + + } + + }); + + }, // add + + /** + * Wrapper for creating jQuery objects + */ + addObject: function($wrapper, type, params, fn, fnMethod) { + + return $('<'+type+'>', params).on(fnMethod || 'click', fn).appendTo($wrapper); + + }, // addObject + + switchTheme: function() { + + App.Environment.toggleClass('light-theme'); + + } // switchTheme + + }, // env + + zen: function($elements) { + + // Create environment + App.Environment = App.env.create(); + + // Add close button + App.env.addObject(App.Environment, 'a', { + class: 'zen-forms-close-button', + html: '×' + }, function() { + App.env.destroy($elements); + }); + + // Add theme switch button + App.env.addObject(App.Environment, 'a', { + class: 'zen-forms-theme-switch', + html: '•' + }, function() { + App.env.switchTheme(); + }); + + // Add inputs and textareas from form + App.env.add($elements); + + App.Environment.keydown(function(e) { + // Esc close + if (e.which == 27) { + App.env.destroy($elements); + } + }).find('input:text, textarea').eq(0).focus(); + + // Watch inputs and add "empty" class if needed + Utils.watchEmpty(App.Environment); + + }, // zen + + }; // App + + return this.each(function() { + + var $this = $(this); + + function zen() { + App.zen( $this.is('form') ? $this.find('input, textarea') : $this ); + } + + if (!settings.trigger) return zen(); + + $(settings.trigger).on('click', function(event) { + event.preventDefault(); + zen(); + }); + + }); + + }; + +})(jQuery); + +/* autogeneration */ +define("lib/zen-form", [], function(){}); + +/* @source lib/mousetrap.js */; + +/** + * Copyright 2012 Craig Campbell + * + * 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. + * + * Mousetrap is a simple keyboard shortcut library for Javascript with + * no external dependencies + * + * @version 1.2.2 + * @url craig.is/killing/mice + */ +(function() { + + /** + * mapping of special keycodes to their corresponding keys + * + * everything in this dictionary cannot use keypress events + * so it has to be here to map to the correct keycodes for + * keyup/keydown events + * + * @type {Object} + */ + var _MAP = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 20: 'capslock', + 27: 'esc', + 32: 'space', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'ins', + 46: 'del', + 91: 'meta', + 93: 'meta', + 224: 'meta' + }, + + /** + * mapping for special characters so they can support + * + * this dictionary is only used incase you want to bind a + * keyup or keydown event to one of these keys + * + * @type {Object} + */ + _KEYCODE_MAP = { + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111 : '/', + 186: ';', + 187: '=', + 188: ',', + 189: '-', + 190: '.', + 191: '/', + 192: '`', + 219: '[', + 220: '\\', + 221: ']', + 222: '\'' + }, + + /** + * this is a mapping of keys that require shift on a US keypad + * back to the non shift equivelents + * + * this is so you can use keyup events with these keys + * + * note that this will only work reliably on US keyboards + * + * @type {Object} + */ + _SHIFT_MAP = { + '~': '`', + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '%': '5', + '^': '6', + '&': '7', + '*': '8', + '(': '9', + ')': '0', + '_': '-', + '+': '=', + ':': ';', + '\"': '\'', + '<': ',', + '>': '.', + '?': '/', + '|': '\\' + }, + + /** + * this is a list of special strings you can use to map + * to modifier keys when you specify your keyboard shortcuts + * + * @type {Object} + */ + _SPECIAL_ALIASES = { + 'option': 'alt', + 'command': 'meta', + 'return': 'enter', + 'escape': 'esc' + }, + + /** + * variable to store the flipped version of _MAP from above + * needed to check if we should use keypress or not when no action + * is specified + * + * @type {Object|undefined} + */ + _REVERSE_MAP, + + /** + * a list of all the callbacks setup via Mousetrap.bind() + * + * @type {Object} + */ + _callbacks = {}, + + /** + * direct map of string combinations to callbacks used for trigger() + * + * @type {Object} + */ + _direct_map = {}, + + /** + * keeps track of what level each sequence is at since multiple + * sequences can start out with the same sequence + * + * @type {Object} + */ + _sequence_levels = {}, + + /** + * variable to store the setTimeout call + * + * @type {null|number} + */ + _reset_timer, + + /** + * temporary state where we will ignore the next keyup + * + * @type {boolean|string} + */ + _ignore_next_keyup = false, + + /** + * are we currently inside of a sequence? + * type of action ("keyup" or "keydown" or "keypress") or false + * + * @type {boolean|string} + */ + _sequence_type = false; + + /** + * loop through the f keys, f1 to f19 and add them to the map + * programatically + */ + for (var i = 1; i < 20; ++i) { + _MAP[111 + i] = 'f' + i; + } + + /** + * loop through to map numbers on the numeric keypad + */ + for (i = 0; i <= 9; ++i) { + _MAP[i + 96] = i; + } + + /** + * cross browser add event method + * + * @param {Element|HTMLDocument} object + * @param {string} type + * @param {Function} callback + * @returns void + */ + function _addEvent(object, type, callback) { + if (object.addEventListener) { + object.addEventListener(type, callback, false); + return; + } + + object.attachEvent('on' + type, callback); + } + + /** + * takes the event and returns the key character + * + * @param {Event} e + * @return {string} + */ + function _characterFromEvent(e) { + + // for keypress events we should return the character as is + if (e.type == 'keypress') { + return String.fromCharCode(e.which); + } + + // for non keypress events the special maps are needed + if (_MAP[e.which]) { + return _MAP[e.which]; + } + + if (_KEYCODE_MAP[e.which]) { + return _KEYCODE_MAP[e.which]; + } + + // if it is not in the special map + return String.fromCharCode(e.which).toLowerCase(); + } + + /** + * checks if two arrays are equal + * + * @param {Array} modifiers1 + * @param {Array} modifiers2 + * @returns {boolean} + */ + function _modifiersMatch(modifiers1, modifiers2) { + return modifiers1.sort().join(',') === modifiers2.sort().join(','); + } + + /** + * resets all sequence counters except for the ones passed in + * + * @param {Object} do_not_reset + * @returns void + */ + function _resetSequences(do_not_reset, max_level) { + do_not_reset = do_not_reset || {}; + + var active_sequences = false, + key; + + for (key in _sequence_levels) { + if (do_not_reset[key] && _sequence_levels[key] > max_level) { + active_sequences = true; + continue; + } + _sequence_levels[key] = 0; + } + + if (!active_sequences) { + _sequence_type = false; + } + } + + /** + * finds all callbacks that match based on the keycode, modifiers, + * and action + * + * @param {string} character + * @param {Array} modifiers + * @param {Event|Object} e + * @param {boolean=} remove - should we remove any matches + * @param {string=} combination + * @returns {Array} + */ + function _getMatches(character, modifiers, e, remove, combination) { + var i, + callback, + matches = [], + action = e.type; + + // if there are no events related to this keycode + if (!_callbacks[character]) { + return []; + } + + // if a modifier key is coming up on its own we should allow it + if (action == 'keyup' && _isModifier(character)) { + modifiers = [character]; + } + + // loop through all callbacks for the key that was pressed + // and see if any of them match + for (i = 0; i < _callbacks[character].length; ++i) { + callback = _callbacks[character][i]; + + // if this is a sequence but it is not at the right level + // then move onto the next match + if (callback.seq && _sequence_levels[callback.seq] != callback.level) { + continue; + } + + // if the action we are looking for doesn't match the action we got + // then we should keep going + if (action != callback.action) { + continue; + } + + // if this is a keypress event and the meta key and control key + // are not pressed that means that we need to only look at the + // character, otherwise check the modifiers as well + // + // chrome will not fire a keypress if meta or control is down + // safari will fire a keypress if meta or meta+shift is down + // firefox will fire a keypress if meta or control is down + if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) { + + // remove is used so if you change your mind and call bind a + // second time with a new function the first one is overwritten + if (remove && callback.combo == combination) { + _callbacks[character].splice(i, 1); + } + + matches.push(callback); + } + } + + return matches; + } + + /** + * takes a key event and figures out what the modifiers are + * + * @param {Event} e + * @returns {Array} + */ + function _eventModifiers(e) { + var modifiers = []; + + if (e.shiftKey) { + modifiers.push('shift'); + } + + if (e.altKey) { + modifiers.push('alt'); + } + + if (e.ctrlKey) { + modifiers.push('ctrl'); + } + + if (e.metaKey) { + modifiers.push('meta'); + } + + return modifiers; + } + + /** + * actually calls the callback function + * + * if your callback function returns false this will use the jquery + * convention - prevent default and stop propogation on the event + * + * @param {Function} callback + * @param {Event} e + * @returns void + */ + function _fireCallback(callback, e, combo) { + + // if this event should not happen stop here + if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo)) { + return; + } + + if (callback(e, combo) === false) { + if (e.preventDefault) { + e.preventDefault(); + } + + if (e.stopPropagation) { + e.stopPropagation(); + } + + e.returnValue = false; + e.cancelBubble = true; + } + } + + /** + * handles a character key event + * + * @param {string} character + * @param {Event} e + * @returns void + */ + function _handleCharacter(character, e) { + var callbacks = _getMatches(character, _eventModifiers(e), e), + i, + do_not_reset = {}, + max_level = 0, + processed_sequence_callback = false; + + // loop through matching callbacks for this key event + for (i = 0; i < callbacks.length; ++i) { + + // fire for all sequence callbacks + // this is because if for example you have multiple sequences + // bound such as "g i" and "g t" they both need to fire the + // callback for matching g cause otherwise you can only ever + // match the first one + if (callbacks[i].seq) { + processed_sequence_callback = true; + + // as we loop through keep track of the max + // any sequence at a lower level will be discarded + max_level = Math.max(max_level, callbacks[i].level); + + // keep a list of which sequences were matches for later + do_not_reset[callbacks[i].seq] = 1; + _fireCallback(callbacks[i].callback, e, callbacks[i].combo); + continue; + } + + // if there were no sequence matches but we are still here + // that means this is a regular match so we should fire that + if (!processed_sequence_callback && !_sequence_type) { + _fireCallback(callbacks[i].callback, e, callbacks[i].combo); + } + } + + // if you are inside of a sequence and the key you are pressing + // is not a modifier key then we should reset all sequences + // that were not matched by this key event + if (e.type == _sequence_type && !_isModifier(character)) { + _resetSequences(do_not_reset, max_level); + } + } + + /** + * handles a keydown event + * + * @param {Event} e + * @returns void + */ + function _handleKey(e) { + + // normalize e.which for key events + // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion + if (typeof e.which !== 'number') { + e.which = e.keyCode; + } + + var character = _characterFromEvent(e); + + // no character found then stop + if (!character) { + return; + } + + if (e.type == 'keyup' && _ignore_next_keyup == character) { + _ignore_next_keyup = false; + return; + } + + _handleCharacter(character, e); + } + + /** + * determines if the keycode specified is a modifier key or not + * + * @param {string} key + * @returns {boolean} + */ + function _isModifier(key) { + return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta'; + } + + /** + * called to set a 1 second timeout on the specified sequence + * + * this is so after each key press in the sequence you have 1 second + * to press the next key before you have to start over + * + * @returns void + */ + function _resetSequenceTimer() { + clearTimeout(_reset_timer); + _reset_timer = setTimeout(_resetSequences, 1000); + } + + /** + * reverses the map lookup so that we can look for specific keys + * to see what can and can't use keypress + * + * @return {Object} + */ + function _getReverseMap() { + if (!_REVERSE_MAP) { + _REVERSE_MAP = {}; + for (var key in _MAP) { + + // pull out the numeric keypad from here cause keypress should + // be able to detect the keys from the character + if (key > 95 && key < 112) { + continue; + } + + if (_MAP.hasOwnProperty(key)) { + _REVERSE_MAP[_MAP[key]] = key; + } + } + } + return _REVERSE_MAP; + } + + /** + * picks the best action based on the key combination + * + * @param {string} key - character for key + * @param {Array} modifiers + * @param {string=} action passed in + */ + function _pickBestAction(key, modifiers, action) { + + // if no action was picked in we should try to pick the one + // that we think would work best for this key + if (!action) { + action = _getReverseMap()[key] ? 'keydown' : 'keypress'; + } + + // modifier keys don't work as expected with keypress, + // switch to keydown + if (action == 'keypress' && modifiers.length) { + action = 'keydown'; + } + + return action; + } + + /** + * binds a key sequence to an event + * + * @param {string} combo - combo specified in bind call + * @param {Array} keys + * @param {Function} callback + * @param {string=} action + * @returns void + */ + function _bindSequence(combo, keys, callback, action) { + + // start off by adding a sequence level record for this combination + // and setting the level to 0 + _sequence_levels[combo] = 0; + + // if there is no action pick the best one for the first key + // in the sequence + if (!action) { + action = _pickBestAction(keys[0], []); + } + + /** + * callback to increase the sequence level for this sequence and reset + * all other sequences that were active + * + * @param {Event} e + * @returns void + */ + var _increaseSequence = function(e) { + _sequence_type = action; + ++_sequence_levels[combo]; + _resetSequenceTimer(); + }, + + /** + * wraps the specified callback inside of another function in order + * to reset all sequence counters as soon as this sequence is done + * + * @param {Event} e + * @returns void + */ + _callbackAndReset = function(e) { + _fireCallback(callback, e, combo); + + // we should ignore the next key up if the action is key down + // or keypress. this is so if you finish a sequence and + // release the key the final key will not trigger a keyup + if (action !== 'keyup') { + _ignore_next_keyup = _characterFromEvent(e); + } + + // weird race condition if a sequence ends with the key + // another sequence begins with + setTimeout(_resetSequences, 10); + }, + i; + + // loop through keys one at a time and bind the appropriate callback + // function. for any key leading up to the final one it should + // increase the sequence. after the final, it should reset all sequences + for (i = 0; i < keys.length; ++i) { + _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i); + } + } + + /** + * binds a single keyboard combination + * + * @param {string} combination + * @param {Function} callback + * @param {string=} action + * @param {string=} sequence_name - name of sequence if part of sequence + * @param {number=} level - what part of the sequence the command is + * @returns void + */ + function _bindSingle(combination, callback, action, sequence_name, level) { + + // make sure multiple spaces in a row become a single space + combination = combination.replace(/\s+/g, ' '); + + var sequence = combination.split(' '), + i, + key, + keys, + modifiers = []; + + // if this pattern is a sequence of keys then run through this method + // to reprocess each pattern one key at a time + if (sequence.length > 1) { + _bindSequence(combination, sequence, callback, action); + return; + } + + // take the keys from this pattern and figure out what the actual + // pattern is all about + keys = combination === '+' ? ['+'] : combination.split('+'); + + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + + // normalize key names + if (_SPECIAL_ALIASES[key]) { + key = _SPECIAL_ALIASES[key]; + } + + // if this is not a keypress event then we should + // be smart about using shift keys + // this will only work for US keyboards however + if (action && action != 'keypress' && _SHIFT_MAP[key]) { + key = _SHIFT_MAP[key]; + modifiers.push('shift'); + } + + // if this key is a modifier then add it to the list of modifiers + if (_isModifier(key)) { + modifiers.push(key); + } + } + + // depending on what the key combination is + // we will try to pick the best event for it + action = _pickBestAction(key, modifiers, action); + + // make sure to initialize array if this is the first time + // a callback is added for this key + if (!_callbacks[key]) { + _callbacks[key] = []; + } + + // remove an existing match if there is one + _getMatches(key, modifiers, {type: action}, !sequence_name, combination); + + // add this call back to the array + // if it is a sequence put it at the beginning + // if not put it at the end + // + // this is important because the way these are processed expects + // the sequence ones to come first + _callbacks[key][sequence_name ? 'unshift' : 'push']({ + callback: callback, + modifiers: modifiers, + action: action, + seq: sequence_name, + level: level, + combo: combination + }); + } + + /** + * binds multiple combinations to the same callback + * + * @param {Array} combinations + * @param {Function} callback + * @param {string|undefined} action + * @returns void + */ + function _bindMultiple(combinations, callback, action) { + for (var i = 0; i < combinations.length; ++i) { + _bindSingle(combinations[i], callback, action); + } + } + + // start! + _addEvent(document, 'keypress', _handleKey); + _addEvent(document, 'keydown', _handleKey); + _addEvent(document, 'keyup', _handleKey); + + var Mousetrap = { + + /** + * binds an event to mousetrap + * + * can be a single key, a combination of keys separated with +, + * an array of keys, or a sequence of keys separated by spaces + * + * be sure to list the modifier keys first to make sure that the + * correct key ends up getting bound (the last key in the pattern) + * + * @param {string|Array} keys + * @param {Function} callback + * @param {string=} action - 'keypress', 'keydown', or 'keyup' + * @returns void + */ + bind: function(keys, callback, action) { + _bindMultiple(keys instanceof Array ? keys : [keys], callback, action); + _direct_map[keys + ':' + action] = callback; + return this; + }, + + /** + * unbinds an event to mousetrap + * + * the unbinding sets the callback function of the specified key combo + * to an empty function and deletes the corresponding key in the + * _direct_map dict. + * + * the keycombo+action has to be exactly the same as + * it was defined in the bind method + * + * TODO: actually remove this from the _callbacks dictionary instead + * of binding an empty function + * + * @param {string|Array} keys + * @param {string} action + * @returns void + */ + unbind: function(keys, action) { + if (_direct_map[keys + ':' + action]) { + delete _direct_map[keys + ':' + action]; + this.bind(keys, function() {}, action); + } + return this; + }, + + /** + * triggers an event that has already been bound + * + * @param {string} keys + * @param {string=} action + * @returns void + */ + trigger: function(keys, action) { + _direct_map[keys + ':' + action](); + return this; + }, + + /** + * resets the library back to its initial state. this is useful + * if you want to clear out the current keyboard shortcuts and bind + * new ones - for example if you switch to another page + * + * @returns void + */ + reset: function() { + _callbacks = {}; + _direct_map = {}; + return this; + }, + + /** + * should we stop this event before firing off callbacks + * + * @param {Event} e + * @param {Element} element + * @return {boolean} + */ + stopCallback: function(e, element, combo) { + + // if the element has the class "mousetrap" then no need to stop + if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { + return false; + } + + // stop for input, select, and textarea + return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); + } + }; + + // expose mousetrap to the global object + window.Mousetrap = Mousetrap; + + // expose mousetrap as an AMD module + if (typeof define === 'function' && define.amd) { + define("mousetrap", Mousetrap); + } +}) (); + +/* @source lib/store.js */; + +;(function(win){ + var store = {}, + doc = win.document, + localStorageName = 'localStorage', + namespace = '__storejs__', + storage + + store.disabled = false + store.set = function(key, value) {} + store.get = function(key) {} + store.remove = function(key) {} + store.clear = function() {} + store.transact = function(key, defaultVal, transactionFn) { + var val = store.get(key) + if (transactionFn == null) { + transactionFn = defaultVal + defaultVal = null + } + if (typeof val == 'undefined') { val = defaultVal || {} } + transactionFn(val) + store.set(key, val) + } + store.getAll = function() {} + + store.serialize = function(value) { + return JSON.stringify(value) + } + store.deserialize = function(value) { + if (typeof value != 'string') { return undefined } + try { return JSON.parse(value) } + catch(e) { return value || undefined } + } + + // Functions to encapsulate questionable FireFox 3.6.13 behavior + // when about.config::dom.storage.enabled === false + // See https://github.com/marcuswestin/store.js/issues#issue/13 + function isLocalStorageNameSupported() { + try { return (localStorageName in win && win[localStorageName]) } + catch(err) { return false } + } + + if (isLocalStorageNameSupported()) { + storage = win[localStorageName] + store.set = function(key, val) { + if (val === undefined) { return store.remove(key) } + storage.setItem(key, store.serialize(val)) + return val + } + store.get = function(key) { return store.deserialize(storage.getItem(key)) } + store.remove = function(key) { storage.removeItem(key) } + store.clear = function() { storage.clear() } + store.getAll = function() { + var ret = {} + for (var i=0; idocument.w=window') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source */; + +require( + ['jquery', + 'mod/relative_date', + 'mod/user_avatar', + 'jquery-tmpl', + 'mod/input-ext'], function ($, updateRelativeDate, loadAvatar) { + var tmpl = $("#tmpl-timeline-activity"); + //previewable-comment-form + $('.previewable-comment-form .js-preview-tabs a.preview-tab').on('show', function(e) { + $('#preview_bucket p').html("Loading preview..."); + }).on('shown', function(e) { + var url = $('#preview_bucket .content-body').data('api-url'); + var text = $('#write_bucket textarea').val(); + $('#preview_bucket .content-body').load(url, {text: text}); + }); + + $('.timeline .loader').hide(); + $('.timeline .pagination').show().click( + function () { + var id = $('.timeline .activity .action').length; + var url = "/api/center/activity/?start=" + id + "&limit=10"; + $.ajax({type: "GET", + url: url, + dataType: "json", + beforeSend: function() { + $('.timeline .loader').show(); + }, + success: function(data) { + for (var x in data) { + $('.timeline .activity').append($.tmpl(tmpl, data[x])); + } + $('.timeline .loader').hide(); + if (data.length < 10) { + $('.timeline .pagination').hide(); + } + updateRelativeDate(); + loadAvatar(); + } + }); + }); + } +); + diff --git a/dist/js/app/chat/main.js b/dist/js/app/chat/main.js new file mode 100644 index 0000000..8283a49 --- /dev/null +++ b/dist/js/app/chat/main.js @@ -0,0 +1,5465 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source mod/node_config.js */; + +define('mod/node_config', function() { + var config = { + port:'7076', + host:'code.intra.douban.com', + };//need to write this when online + return config; +}); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source mod/chat.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define('mod/chat', [ + "jquery", + "jquery-atwho", + "jquery-forms", + "mod/connect", + "mod/user_avatar", + "mod/input-ext", + "mousetrap", + "bootbox" +], function ($, _, _, connectNode, loadAvatar, inputExt) { + $(function () { + var ajaxGet = function (url, nowMessageId) { + $.ajax({type: "GET", + url: url, + dataType: "json", + success: function (data) { + if (data.r === 0) { + $(".alert-error").show(); + location.hash = '#lobby'; + return; + } + + var messages = data.msg; + for (var i = 0; i < messages.length; i++) { + nowMessageId.append(messages[i]); + } + loadAvatar(); + var $d = nowMessageId; + $d[0].scrollTop = $d[0].scrollHeight; + $('#message_input').focus(); + } + }); + }; + + var roomName = "lobby"; + if (location.hash.slice(1)) { + roomName = location.hash.slice(1); + } + var channelPrefix = "chat:room:"; + var roomChannel = channelPrefix + roomName; + var io = connectNode(roomChannel); + io.on('announce', function(data) { + var channel = data.channel; + var room = channel.split(':')[2]; + $('#'+room).append(data.send_message); + loadAvatar(); + var $d= $('#'+room); + $d[0].scrollTop = $d[0].scrollHeight; + }); + var sliceUrl = '#' + roomName; + var lastActive = $('[href=' + sliceUrl + ']').parents('li'); + lastActive.attr("class", "active"); + var lastMessageId = $("#"+roomName); + var nowMessageId = $("#"+roomName); + lastMessageId.hide(); + nowMessageId.show(); + nowMessageId.html(''); + + var urlPrefix = "/j/chat/"; + var url = urlPrefix + roomName; + $('#message-form').attr('action', url); + ajaxGet(url, nowMessageId); + + $(window).on('hashchange',function(){ + roomName = location.hash.slice(1); + sliceUrl = '#' + roomName; + var needActive = $('[href='+sliceUrl+']').parents('li'); + lastActive.attr("class", ""); + needActive.attr("class", "active"); + lastActive = needActive; + + url = urlPrefix + roomName; + $('#message-form').attr('action', url); + lastMessageId.hide(); + nowMessageId = $('#'+roomName); + nowMessageId.show(); + nowMessageId.html(''); + lastMessageId = nowMessageId; + + ajaxGet(url, nowMessageId); + + roomChannel = channelPrefix + roomName; + io.emit('ready', {channel:roomChannel}); + }); + + $('#message_input').focus(); + var messageInput = $('textarea#message_input'); + inputExt.shortcut2submit(messageInput); + inputExt.enableEmojiInput(messageInput); + $('#message-form').ajaxForm({ + dataType: 'json', + success: function(r) { + if (r.r === 1) { + $('#message_input').val(''); + $('#message_input').focus(); + $('#message_input').closest('form').removeClass('submitting'); + } + } + }); + + $('.del-room').on('click', function () { + var roomName = $(this).attr("data-name"), + roomItem = $(this), + msg = '你确定要删除room: ' + roomName + '?'; + + if (roomName) { + bootbox.confirm(msg, function(confirmed) { + if (confirmed) { + $.post(urlPrefix + 'delete_room', {'room_name': roomName}, + function (ret) { + if (ret.r === 1) { + var li = roomItem.parents('li'); + li.remove(); + } + }, + 'json' + ); + } + }); + } + }); + }); +}); + +/* @source */; + +require(['jquery' +, 'mod/chat' +, 'mod/connect' +, 'mod/user_avatar' +], function() { +}); diff --git a/dist/js/app/create/main.js b/dist/js/app/create/main.js new file mode 100644 index 0000000..386d4a1 --- /dev/null +++ b/dist/js/app/create/main.js @@ -0,0 +1,32 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +//define('jquery', 'lib/jquery.min.js') +require(['jquery'], function($){ + $(function(){ + $("#org_proj").click(function(){ + $("#owner").hide("slow"); + $(".splash").hide("slow"); + $("#mirror").hide("slow"); + $(".mirror-url").hide(); + $(".mirror-with-proxy").hide(); + }); + $("#people_proj").click(function(){ + $("#owner").show("slow"); + $(".splash").show("slow"); + $("#mirror").hide(); + $(".mirror-url").hide(); + $(".mirror-with-proxy").hide(); + }); + $("#mirror_proj").click(function(){ + $("#owner").hide(); + $("#mirror").show("slow"); + $(".splash").show("slow"); + $(".mirror-url").show(); + $(".mirror-with-proxy").show(); + }); + }); +}); diff --git a/dist/js/app/explore/main.js b/dist/js/app/explore/main.js new file mode 100644 index 0000000..d00902c --- /dev/null +++ b/dist/js/app/explore/main.js @@ -0,0 +1,80 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/confirm.js */; + +define('mod/confirm', [ + "jquery", + "bootbox" +], function($){ + + $("a.confirm").click(function(e) { + e.preventDefault(); + var location = $(this).attr('href'); + bootbox.confirm("Are you sure?", function(confirmed) { + if(confirmed){ + window.location.replace(location); + } + }); + }); + +}); + +/* @source */; + +//define('jquery', 'lib/jquery.min.js') +//define('mustache', 'lib/mustache.js') +//define('bootstrap', 'lib/bootstrap-amd.js') +//define('jquery-tmpl', 'lib/jquery.tmpl.min.js') +//define('bootbox', 'lib/bootbox.js') +require(['jquery' +, 'mustache' +, 'mod/confirm'], function($, Mustache){ + + $("div.trending-repositories a[href^='#tab_']").click( + function(e) { + tab_name = $(this).attr("href").slice("#tab_".length); + $.ajax({type: "GET", + url: "/api/projects?without_commits=true&sortby=" + tab_name, + dataType: "json", + success: function(data){ + var template = $("script#item-project").html(); + var render = ''; + + for(idx_proj in data['projects']){ + proj = data['projects'][idx_proj]; + render += Mustache.to_html(template, proj); + if (idx_proj >= 5) { break } + } + render += '
    '; + $("div#tab_" + tab_name).html(render); + }, + }); + }); + + $("div.repositories-by-dept a[href^='#proj_dept_']").click( + function(e) { + dept_name = $(this).attr("href").slice("#proj_dept_".length); + $.ajax({type: "GET", + url: "/api/projects?without_commits=true&by_dept=" + dept_name, + dataType: "json", + success: function(data){ + var template = $("script#item-project").html(); + var render = ''; + + for(idx_proj in data['projects']){ + proj = data['projects'][idx_proj]; + render += Mustache.to_html(template, proj); + } + render += '
    '; + $("div#proj_dept_" + dept_name).html(render); + } + }); + }); + + $("div.trending-repositories a[href='#tab_updated']").click(); + $("div.repositories-by-dept a[href='#proj_dept_public']").click(); + + +}); diff --git a/dist/js/app/explore/notify_timeline.js b/dist/js/app/explore/notify_timeline.js new file mode 100644 index 0000000..a02a44d --- /dev/null +++ b/dist/js/app/explore/notify_timeline.js @@ -0,0 +1,115 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source */; + +require(['jquery' +, 'mod/user_avatar' +//, 'mod/notify_pagination' +], function($, loadAvatar) { + //TODO: add notify realtime show + // + $(function () { + $('.entry').delegate('.entry-title .title', 'click', function(){ + $(this).parent().next().toggle(300); + loadAvatar(); + }); + + var removeSlow = function($this) { + $this.fadeOut(350, function() { $this.remove();}); + }; + + $('.notif-list').delegate('.mark-item', 'click', function (e) { + var $this = $(this); + $this.ajaxForm({ + dataType: 'json', + success: function(r) { + if (r.r === 0) { + removeSlow($this.parents('.notif-item')); + } + } + }); + }); + + $('.notif-list').delegate('.mark-entry', 'click', function (e) { + var $this = $(this); + $this.ajaxForm({ + dataType: 'json', + success: function(r) { + if (r.r === 0) { + if ($this.parents('.item-body').children().length == 1) { + removeSlow($this.parents('.notif-item')); + } else { + removeSlow($this.parents('.entry')); + } + } + } + }); + }); + + $('.notif-list').delegate('.mute-entry', 'click', function (e) { + var $this = $(this); + $this.ajaxForm({ + dataType: 'json', + success: function(r) { + if (r.r === 0) { + $this.find('i').removeClass('icon-volume-up').addClass('icon-volume-off'); + } + } + }); + }); + + $('.mark-all-as-read').click(function() { + var $this = $(this), + type = $this.data('type'); + if(type == 'merged_pr') { + var form = $('#merged-pr-uids'); + form.ajaxSubmit({ + success: function() { + location.reload(); + } + }); + } + }) + + }); +}); diff --git a/dist/js/app/explore/public_timeline.js b/dist/js/app/explore/public_timeline.js new file mode 100644 index 0000000..357fc26 --- /dev/null +++ b/dist/js/app/explore/public_timeline.js @@ -0,0 +1,4288 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/count.js */; + +define('mod/count', [], function() { + var countDict = { + public_num: 35, + teamfeed_num: 35, + userfeed_num: 35, + }; + return countDict; +}); + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source mod/ajax_load.js */; + +define('mod/ajax_load', [ + "jquery", + "mod/count", + "mod/relative_date", + "mod/user_avatar" +], function($, countDict, updateRelativeDate, loadAvatar) { + var ajaxLoad = function(url, number_type) { + var maxShown = 35; + $.ajax({type: "GET", + url: url, + dataType: "json", + beforeSend: function() { + $('.timeline .loader').show(); + }, + success: function(data) { + var result = data.result; + var length = data.length; + + $('.timeline>ul').append(result); + $('.timeline .loader').hide(); + if (length < maxShown) { + $('.timeline .pagination').hide(); + } else { + countDict[number_type] += maxShown; + } + updateRelativeDate(); + loadAvatar(); + } + }); + }; + + return ajaxLoad; +}); + +/* @source mod/newsfeed_pagination.js */; + +define('mod/newsfeed_pagination', [ + "jquery", + "mod/ajax_load", + "mod/count" +], function($, ajaxLoad, countDict) { + $(function () { + $('.timeline .loader').hide(); + $('.timeline .pagination').show().click( + function () { + var number_type = "public_num"; + var url = "/j/more/pub/" + countDict.public_num; + ajaxLoad(url, number_type); + }); + }); +}); + +/* @source mod/newsfeed.js */; + +define('mod/newsfeed', [ + "jquery", + "mod/user_avatar" +], function($, loadAvatar) { + $(function () { + $('.timeline').delegate('.expand-rest', 'click', function(){ + var last = $(this).parents('.expand-last'); + last.prevUntil('.expand-first').show(300); + last.hide(); + loadAvatar(); + }); + }); +}); + + +/* @source mod/user_profile_card.js */; + +define('mod/user_profile_card', [ + "jquery", + "jquery-tmpl" +], function($) { + $(function () { + var userCard, teamCard, users = {}, user_type = {}; + $(document).delegate( + '.user-link,.user-mention', 'mouseover', + function (e) { + if (!userCard) { + userCard = $('
    ').appendTo('body') + .mouseleave(function () { + $(this).hide(); + $('.team-card').hide(); + }); + } + if (!teamCard) { + teamCard = $('
    ').appendTo('body') + .mouseleave(function () { + $(this).hide(); + $('.user-card').hide(); + }); + } + var pos = $(this).offset(); + pos.left = pos.left - 5; + pos.top = pos.top - 5; + var name = /@?(\w+)/.exec($(this).text())[1], user = users[name]; + + if (!user) { + $.getJSON('/api/card_info', {user: name}, + function (r) { + if (r.team) { + teamCard.css(pos).empty().show(); + teamCard.append($.tmpl($('#templ-team-card'), r.team)); + user_type[name] = 'team'; + users[name] = r.team; + } else { + userCard.css(pos).empty().show(); + userCard.append($.tmpl($('#templ-user-card'), r.user)); + user_type[name] = 'user'; + users[name] = r.user; + } + }); + } else { + if (user_type[name] === 'team') { + teamCard.css(pos).empty().show(); + teamCard.append($.tmpl($('#templ-team-card'), user)); + } else { + userCard.css(pos).empty().show(); + userCard.append($.tmpl($('#templ-user-card'), user)); + } + } + }); + }); +}); + +/* @source mod/node_config.js */; + +define('mod/node_config', function() { + var config = { + port:'7076', + host:'code.intra.douban.com', + };//need to write this when online + return config; +}); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source lib/zen-form.js */; + +/** Zen Forms 1.0.0 | MIT License | git.io/zen-form */ + +(function($) { + + $.fn.zenForm = function(settings) { + + settings = $.extend({ + trigger: '.go-zen', + theme: 'dark' + }, settings); + + /** + * Helper functions + */ + var Utils = { + + watchEmpty: function($form) { + + $form.find('input, textarea').each(function() { + $(this).on('change', function() { + $(this)[ $(this).val() ? 'removeClass' : 'addClass' ]('empty'); + }).trigger('change'); + }); + + } + + }, // Utils + + /** + * Core functionality + */ + App = { + + /** + * Wrapper element + */ + Environment: null, + + /** + * Functions to create and manipulate environment + */ + env: { + + create: function() { + + var theme = settings.theme == 'dark' ? '' : ' light-theme'; + + return $('
    ', {class: 'zen-forms' + theme}).hide().appendTo('body').fadeIn(200); + + }, // create + + /** + * Update orginal inputs with new values and destroy Environment + */ + destroy: function($elements) { + + // Update orginal inputs with new values + $elements.each(function(i) { + + var $el = $('#zen-forms-input' + i); + + if ( $el.length ) + $(this).val($el.val()); + + }).filter('input:text,textarea').eq(0).focus(); + + $('.zen-forms').fadeOut(200, function() { + $(this).remove(); + }); + + }, // destroy + + /** + * Append inputs, textareas to Environment + */ + add: function($elements) { + + $elements.each(function(i) { + + var $this = $(this), + $wrapper = App.env.addObject(App.Environment, 'div', {class: 'zen-forms-input-wrap'}), + + value = $this.val(), + id = $this.attr('id'), + ID = 'zen-forms-input' + i, + label = $("label[for=" + id + "]").text() || $this.attr('placeholder') || ''; + + // Exclude specified elements + if ( $.inArray( $this.attr('type'), ['checkbox', 'radio', 'submit']) == -1) { + + if ( $this.is('input') ) + App.env.addObject($wrapper, 'input', { + id: ID, + value: value, + type: $this.attr('type') + }); + else + App.env.addObject($wrapper, 'textarea', { + id: ID, + text: value + }); + + App.env.addObject($wrapper, 'label', { + for: ID, + text: label + }); + + } + + }); + + }, // add + + /** + * Wrapper for creating jQuery objects + */ + addObject: function($wrapper, type, params, fn, fnMethod) { + + return $('<'+type+'>', params).on(fnMethod || 'click', fn).appendTo($wrapper); + + }, // addObject + + switchTheme: function() { + + App.Environment.toggleClass('light-theme'); + + } // switchTheme + + }, // env + + zen: function($elements) { + + // Create environment + App.Environment = App.env.create(); + + // Add close button + App.env.addObject(App.Environment, 'a', { + class: 'zen-forms-close-button', + html: '×' + }, function() { + App.env.destroy($elements); + }); + + // Add theme switch button + App.env.addObject(App.Environment, 'a', { + class: 'zen-forms-theme-switch', + html: '•' + }, function() { + App.env.switchTheme(); + }); + + // Add inputs and textareas from form + App.env.add($elements); + + App.Environment.keydown(function(e) { + // Esc close + if (e.which == 27) { + App.env.destroy($elements); + } + }).find('input:text, textarea').eq(0).focus(); + + // Watch inputs and add "empty" class if needed + Utils.watchEmpty(App.Environment); + + }, // zen + + }; // App + + return this.each(function() { + + var $this = $(this); + + function zen() { + App.zen( $this.is('form') ? $this.find('input, textarea') : $this ); + } + + if (!settings.trigger) return zen(); + + $(settings.trigger).on('click', function(event) { + event.preventDefault(); + zen(); + }); + + }); + + }; + +})(jQuery); + +/* autogeneration */ +define("lib/zen-form", [], function(){}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source */; + +define('mousetrap', 'lib/mousetrap.js'); +define('tag-it', 'lib/tag-it.js'); + +require( + ['jquery' + , 'mod/input-ext' + , 'jquery-caret' + , 'jquery-atwho' + , 'jquery-timeago' + , 'bootstrap' + , 'mod/watch' + , 'mousetrap' + , 'tag-it'], + function($, inputExt){ + $(function () { + inputExt.enableZenMode('#pull_body'); + inputExt.enableAutoCompleteFollowingAndTeam('#pull_body'); + //previewable-comment-form + $('.previewable-comment-form .js-preview-tabs a.preview-tab').on('show', function(e) { + $('#preview_bucket p').html("Loading preview..."); + }).on('shown', function(e) { + var url = $('#preview_bucket .content-body').data('api-url'); + var text = $('#write_bucket textarea').val(); + $('#preview_bucket .content-body').load(url, {text: text}); + }); + + $('.new-issue form').submit( + function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + //Google Analytic Events + ga('send', 'event', 'issue', 'create'); + } + ); + + var uploader = $('#form-file-upload'), + textarea = $('#write_bucket textarea'); + inputExt.enableUpload(uploader, textarea); + + $('#issue-tags').tagit({input_name: 'issue_tags', tag_list: $('.label')}); + + }); + }); diff --git a/dist/js/app/issue/team-issue.js b/dist/js/app/issue/team-issue.js new file mode 100644 index 0000000..22af399 --- /dev/null +++ b/dist/js/app/issue/team-issue.js @@ -0,0 +1,6573 @@ + +require.config({ enable_ozma: true }); + + +/* @source lib/mousetrap.js */; + +/** + * Copyright 2012 Craig Campbell + * + * 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. + * + * Mousetrap is a simple keyboard shortcut library for Javascript with + * no external dependencies + * + * @version 1.2.2 + * @url craig.is/killing/mice + */ +(function() { + + /** + * mapping of special keycodes to their corresponding keys + * + * everything in this dictionary cannot use keypress events + * so it has to be here to map to the correct keycodes for + * keyup/keydown events + * + * @type {Object} + */ + var _MAP = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 20: 'capslock', + 27: 'esc', + 32: 'space', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'ins', + 46: 'del', + 91: 'meta', + 93: 'meta', + 224: 'meta' + }, + + /** + * mapping for special characters so they can support + * + * this dictionary is only used incase you want to bind a + * keyup or keydown event to one of these keys + * + * @type {Object} + */ + _KEYCODE_MAP = { + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111 : '/', + 186: ';', + 187: '=', + 188: ',', + 189: '-', + 190: '.', + 191: '/', + 192: '`', + 219: '[', + 220: '\\', + 221: ']', + 222: '\'' + }, + + /** + * this is a mapping of keys that require shift on a US keypad + * back to the non shift equivelents + * + * this is so you can use keyup events with these keys + * + * note that this will only work reliably on US keyboards + * + * @type {Object} + */ + _SHIFT_MAP = { + '~': '`', + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '%': '5', + '^': '6', + '&': '7', + '*': '8', + '(': '9', + ')': '0', + '_': '-', + '+': '=', + ':': ';', + '\"': '\'', + '<': ',', + '>': '.', + '?': '/', + '|': '\\' + }, + + /** + * this is a list of special strings you can use to map + * to modifier keys when you specify your keyboard shortcuts + * + * @type {Object} + */ + _SPECIAL_ALIASES = { + 'option': 'alt', + 'command': 'meta', + 'return': 'enter', + 'escape': 'esc' + }, + + /** + * variable to store the flipped version of _MAP from above + * needed to check if we should use keypress or not when no action + * is specified + * + * @type {Object|undefined} + */ + _REVERSE_MAP, + + /** + * a list of all the callbacks setup via Mousetrap.bind() + * + * @type {Object} + */ + _callbacks = {}, + + /** + * direct map of string combinations to callbacks used for trigger() + * + * @type {Object} + */ + _direct_map = {}, + + /** + * keeps track of what level each sequence is at since multiple + * sequences can start out with the same sequence + * + * @type {Object} + */ + _sequence_levels = {}, + + /** + * variable to store the setTimeout call + * + * @type {null|number} + */ + _reset_timer, + + /** + * temporary state where we will ignore the next keyup + * + * @type {boolean|string} + */ + _ignore_next_keyup = false, + + /** + * are we currently inside of a sequence? + * type of action ("keyup" or "keydown" or "keypress") or false + * + * @type {boolean|string} + */ + _sequence_type = false; + + /** + * loop through the f keys, f1 to f19 and add them to the map + * programatically + */ + for (var i = 1; i < 20; ++i) { + _MAP[111 + i] = 'f' + i; + } + + /** + * loop through to map numbers on the numeric keypad + */ + for (i = 0; i <= 9; ++i) { + _MAP[i + 96] = i; + } + + /** + * cross browser add event method + * + * @param {Element|HTMLDocument} object + * @param {string} type + * @param {Function} callback + * @returns void + */ + function _addEvent(object, type, callback) { + if (object.addEventListener) { + object.addEventListener(type, callback, false); + return; + } + + object.attachEvent('on' + type, callback); + } + + /** + * takes the event and returns the key character + * + * @param {Event} e + * @return {string} + */ + function _characterFromEvent(e) { + + // for keypress events we should return the character as is + if (e.type == 'keypress') { + return String.fromCharCode(e.which); + } + + // for non keypress events the special maps are needed + if (_MAP[e.which]) { + return _MAP[e.which]; + } + + if (_KEYCODE_MAP[e.which]) { + return _KEYCODE_MAP[e.which]; + } + + // if it is not in the special map + return String.fromCharCode(e.which).toLowerCase(); + } + + /** + * checks if two arrays are equal + * + * @param {Array} modifiers1 + * @param {Array} modifiers2 + * @returns {boolean} + */ + function _modifiersMatch(modifiers1, modifiers2) { + return modifiers1.sort().join(',') === modifiers2.sort().join(','); + } + + /** + * resets all sequence counters except for the ones passed in + * + * @param {Object} do_not_reset + * @returns void + */ + function _resetSequences(do_not_reset, max_level) { + do_not_reset = do_not_reset || {}; + + var active_sequences = false, + key; + + for (key in _sequence_levels) { + if (do_not_reset[key] && _sequence_levels[key] > max_level) { + active_sequences = true; + continue; + } + _sequence_levels[key] = 0; + } + + if (!active_sequences) { + _sequence_type = false; + } + } + + /** + * finds all callbacks that match based on the keycode, modifiers, + * and action + * + * @param {string} character + * @param {Array} modifiers + * @param {Event|Object} e + * @param {boolean=} remove - should we remove any matches + * @param {string=} combination + * @returns {Array} + */ + function _getMatches(character, modifiers, e, remove, combination) { + var i, + callback, + matches = [], + action = e.type; + + // if there are no events related to this keycode + if (!_callbacks[character]) { + return []; + } + + // if a modifier key is coming up on its own we should allow it + if (action == 'keyup' && _isModifier(character)) { + modifiers = [character]; + } + + // loop through all callbacks for the key that was pressed + // and see if any of them match + for (i = 0; i < _callbacks[character].length; ++i) { + callback = _callbacks[character][i]; + + // if this is a sequence but it is not at the right level + // then move onto the next match + if (callback.seq && _sequence_levels[callback.seq] != callback.level) { + continue; + } + + // if the action we are looking for doesn't match the action we got + // then we should keep going + if (action != callback.action) { + continue; + } + + // if this is a keypress event and the meta key and control key + // are not pressed that means that we need to only look at the + // character, otherwise check the modifiers as well + // + // chrome will not fire a keypress if meta or control is down + // safari will fire a keypress if meta or meta+shift is down + // firefox will fire a keypress if meta or control is down + if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) { + + // remove is used so if you change your mind and call bind a + // second time with a new function the first one is overwritten + if (remove && callback.combo == combination) { + _callbacks[character].splice(i, 1); + } + + matches.push(callback); + } + } + + return matches; + } + + /** + * takes a key event and figures out what the modifiers are + * + * @param {Event} e + * @returns {Array} + */ + function _eventModifiers(e) { + var modifiers = []; + + if (e.shiftKey) { + modifiers.push('shift'); + } + + if (e.altKey) { + modifiers.push('alt'); + } + + if (e.ctrlKey) { + modifiers.push('ctrl'); + } + + if (e.metaKey) { + modifiers.push('meta'); + } + + return modifiers; + } + + /** + * actually calls the callback function + * + * if your callback function returns false this will use the jquery + * convention - prevent default and stop propogation on the event + * + * @param {Function} callback + * @param {Event} e + * @returns void + */ + function _fireCallback(callback, e, combo) { + + // if this event should not happen stop here + if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo)) { + return; + } + + if (callback(e, combo) === false) { + if (e.preventDefault) { + e.preventDefault(); + } + + if (e.stopPropagation) { + e.stopPropagation(); + } + + e.returnValue = false; + e.cancelBubble = true; + } + } + + /** + * handles a character key event + * + * @param {string} character + * @param {Event} e + * @returns void + */ + function _handleCharacter(character, e) { + var callbacks = _getMatches(character, _eventModifiers(e), e), + i, + do_not_reset = {}, + max_level = 0, + processed_sequence_callback = false; + + // loop through matching callbacks for this key event + for (i = 0; i < callbacks.length; ++i) { + + // fire for all sequence callbacks + // this is because if for example you have multiple sequences + // bound such as "g i" and "g t" they both need to fire the + // callback for matching g cause otherwise you can only ever + // match the first one + if (callbacks[i].seq) { + processed_sequence_callback = true; + + // as we loop through keep track of the max + // any sequence at a lower level will be discarded + max_level = Math.max(max_level, callbacks[i].level); + + // keep a list of which sequences were matches for later + do_not_reset[callbacks[i].seq] = 1; + _fireCallback(callbacks[i].callback, e, callbacks[i].combo); + continue; + } + + // if there were no sequence matches but we are still here + // that means this is a regular match so we should fire that + if (!processed_sequence_callback && !_sequence_type) { + _fireCallback(callbacks[i].callback, e, callbacks[i].combo); + } + } + + // if you are inside of a sequence and the key you are pressing + // is not a modifier key then we should reset all sequences + // that were not matched by this key event + if (e.type == _sequence_type && !_isModifier(character)) { + _resetSequences(do_not_reset, max_level); + } + } + + /** + * handles a keydown event + * + * @param {Event} e + * @returns void + */ + function _handleKey(e) { + + // normalize e.which for key events + // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion + if (typeof e.which !== 'number') { + e.which = e.keyCode; + } + + var character = _characterFromEvent(e); + + // no character found then stop + if (!character) { + return; + } + + if (e.type == 'keyup' && _ignore_next_keyup == character) { + _ignore_next_keyup = false; + return; + } + + _handleCharacter(character, e); + } + + /** + * determines if the keycode specified is a modifier key or not + * + * @param {string} key + * @returns {boolean} + */ + function _isModifier(key) { + return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta'; + } + + /** + * called to set a 1 second timeout on the specified sequence + * + * this is so after each key press in the sequence you have 1 second + * to press the next key before you have to start over + * + * @returns void + */ + function _resetSequenceTimer() { + clearTimeout(_reset_timer); + _reset_timer = setTimeout(_resetSequences, 1000); + } + + /** + * reverses the map lookup so that we can look for specific keys + * to see what can and can't use keypress + * + * @return {Object} + */ + function _getReverseMap() { + if (!_REVERSE_MAP) { + _REVERSE_MAP = {}; + for (var key in _MAP) { + + // pull out the numeric keypad from here cause keypress should + // be able to detect the keys from the character + if (key > 95 && key < 112) { + continue; + } + + if (_MAP.hasOwnProperty(key)) { + _REVERSE_MAP[_MAP[key]] = key; + } + } + } + return _REVERSE_MAP; + } + + /** + * picks the best action based on the key combination + * + * @param {string} key - character for key + * @param {Array} modifiers + * @param {string=} action passed in + */ + function _pickBestAction(key, modifiers, action) { + + // if no action was picked in we should try to pick the one + // that we think would work best for this key + if (!action) { + action = _getReverseMap()[key] ? 'keydown' : 'keypress'; + } + + // modifier keys don't work as expected with keypress, + // switch to keydown + if (action == 'keypress' && modifiers.length) { + action = 'keydown'; + } + + return action; + } + + /** + * binds a key sequence to an event + * + * @param {string} combo - combo specified in bind call + * @param {Array} keys + * @param {Function} callback + * @param {string=} action + * @returns void + */ + function _bindSequence(combo, keys, callback, action) { + + // start off by adding a sequence level record for this combination + // and setting the level to 0 + _sequence_levels[combo] = 0; + + // if there is no action pick the best one for the first key + // in the sequence + if (!action) { + action = _pickBestAction(keys[0], []); + } + + /** + * callback to increase the sequence level for this sequence and reset + * all other sequences that were active + * + * @param {Event} e + * @returns void + */ + var _increaseSequence = function(e) { + _sequence_type = action; + ++_sequence_levels[combo]; + _resetSequenceTimer(); + }, + + /** + * wraps the specified callback inside of another function in order + * to reset all sequence counters as soon as this sequence is done + * + * @param {Event} e + * @returns void + */ + _callbackAndReset = function(e) { + _fireCallback(callback, e, combo); + + // we should ignore the next key up if the action is key down + // or keypress. this is so if you finish a sequence and + // release the key the final key will not trigger a keyup + if (action !== 'keyup') { + _ignore_next_keyup = _characterFromEvent(e); + } + + // weird race condition if a sequence ends with the key + // another sequence begins with + setTimeout(_resetSequences, 10); + }, + i; + + // loop through keys one at a time and bind the appropriate callback + // function. for any key leading up to the final one it should + // increase the sequence. after the final, it should reset all sequences + for (i = 0; i < keys.length; ++i) { + _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i); + } + } + + /** + * binds a single keyboard combination + * + * @param {string} combination + * @param {Function} callback + * @param {string=} action + * @param {string=} sequence_name - name of sequence if part of sequence + * @param {number=} level - what part of the sequence the command is + * @returns void + */ + function _bindSingle(combination, callback, action, sequence_name, level) { + + // make sure multiple spaces in a row become a single space + combination = combination.replace(/\s+/g, ' '); + + var sequence = combination.split(' '), + i, + key, + keys, + modifiers = []; + + // if this pattern is a sequence of keys then run through this method + // to reprocess each pattern one key at a time + if (sequence.length > 1) { + _bindSequence(combination, sequence, callback, action); + return; + } + + // take the keys from this pattern and figure out what the actual + // pattern is all about + keys = combination === '+' ? ['+'] : combination.split('+'); + + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + + // normalize key names + if (_SPECIAL_ALIASES[key]) { + key = _SPECIAL_ALIASES[key]; + } + + // if this is not a keypress event then we should + // be smart about using shift keys + // this will only work for US keyboards however + if (action && action != 'keypress' && _SHIFT_MAP[key]) { + key = _SHIFT_MAP[key]; + modifiers.push('shift'); + } + + // if this key is a modifier then add it to the list of modifiers + if (_isModifier(key)) { + modifiers.push(key); + } + } + + // depending on what the key combination is + // we will try to pick the best event for it + action = _pickBestAction(key, modifiers, action); + + // make sure to initialize array if this is the first time + // a callback is added for this key + if (!_callbacks[key]) { + _callbacks[key] = []; + } + + // remove an existing match if there is one + _getMatches(key, modifiers, {type: action}, !sequence_name, combination); + + // add this call back to the array + // if it is a sequence put it at the beginning + // if not put it at the end + // + // this is important because the way these are processed expects + // the sequence ones to come first + _callbacks[key][sequence_name ? 'unshift' : 'push']({ + callback: callback, + modifiers: modifiers, + action: action, + seq: sequence_name, + level: level, + combo: combination + }); + } + + /** + * binds multiple combinations to the same callback + * + * @param {Array} combinations + * @param {Function} callback + * @param {string|undefined} action + * @returns void + */ + function _bindMultiple(combinations, callback, action) { + for (var i = 0; i < combinations.length; ++i) { + _bindSingle(combinations[i], callback, action); + } + } + + // start! + _addEvent(document, 'keypress', _handleKey); + _addEvent(document, 'keydown', _handleKey); + _addEvent(document, 'keyup', _handleKey); + + var Mousetrap = { + + /** + * binds an event to mousetrap + * + * can be a single key, a combination of keys separated with +, + * an array of keys, or a sequence of keys separated by spaces + * + * be sure to list the modifier keys first to make sure that the + * correct key ends up getting bound (the last key in the pattern) + * + * @param {string|Array} keys + * @param {Function} callback + * @param {string=} action - 'keypress', 'keydown', or 'keyup' + * @returns void + */ + bind: function(keys, callback, action) { + _bindMultiple(keys instanceof Array ? keys : [keys], callback, action); + _direct_map[keys + ':' + action] = callback; + return this; + }, + + /** + * unbinds an event to mousetrap + * + * the unbinding sets the callback function of the specified key combo + * to an empty function and deletes the corresponding key in the + * _direct_map dict. + * + * the keycombo+action has to be exactly the same as + * it was defined in the bind method + * + * TODO: actually remove this from the _callbacks dictionary instead + * of binding an empty function + * + * @param {string|Array} keys + * @param {string} action + * @returns void + */ + unbind: function(keys, action) { + if (_direct_map[keys + ':' + action]) { + delete _direct_map[keys + ':' + action]; + this.bind(keys, function() {}, action); + } + return this; + }, + + /** + * triggers an event that has already been bound + * + * @param {string} keys + * @param {string=} action + * @returns void + */ + trigger: function(keys, action) { + _direct_map[keys + ':' + action](); + return this; + }, + + /** + * resets the library back to its initial state. this is useful + * if you want to clear out the current keyboard shortcuts and bind + * new ones - for example if you switch to another page + * + * @returns void + */ + reset: function() { + _callbacks = {}; + _direct_map = {}; + return this; + }, + + /** + * should we stop this event before firing off callbacks + * + * @param {Event} e + * @param {Element} element + * @return {boolean} + */ + stopCallback: function(e, element, combo) { + + // if the element has the class "mousetrap" then no need to stop + if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { + return false; + } + + // stop for input, select, and textarea + return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); + } + }; + + // expose mousetrap to the global object + window.Mousetrap = Mousetrap; + + // expose mousetrap as an AMD module + if (typeof define === 'function' && define.amd) { + define("mousetrap", Mousetrap); + } +}) (); + +/* @source lib/tag-it.js */; + +(function($) { + + $.fn.tagit = function(options) { + + var el = this; + + const BACKSPACE = 8; + const ENTER = 13; + const SPACE = 32; + const COMMA = 44; + + // add the tagit CSS class. + el.addClass("tagit"); + + // create the input field. + var html_input_field = "
  • \n"; + el.html (html_input_field); + + tag_input = el.children(".tagit-new").children(".tagit-input"); + + $(this).click(function(e){ + if (e.target.tagName == 'A') { + // Removes a tag when the little 'x' is clicked. + // Event is binded to the UL, otherwise a new tag (LI > A) wouldn't have this event attached to it. + $(e.target).parent().remove(); + } + else { + // Sets the focus() to the input field, if the user clicks anywhere inside the UL. + // This is needed because the input field needs to be of a small size. + tag_input.focus(); + } + }); + + $(this).delegate('.tagit-choice', 'click', function(){ + // the little 'x' is hard to click =.= + $(this).remove(); + }); + + tag_input.blur(function () { + var unhandlerTag = tag_input.val(); + unhandlerTag = unhandlerTag.replace(/,+$/,""); + unhandlerTag = unhandlerTag.trim(); + if (unhandlerTag !== ''){ + if (is_new (unhandlerTag)) { + create_choice (unhandlerTag); + } + // Cleaning the input. + tag_input.val(""); + } + }); + + if (options) { + if (options.hasOwnProperty('tag_list')) { + options.tag_list.click(function(event){ + + var typed = $(event.target).html(); + typed = typed.replace(/,+$/,""); + typed = typed.trim(); + + if (typed != "") { + if (is_new (typed)) { + create_choice (typed); + } + } + }); + } + if (options.hasOwnProperty('fillup')) { + for (var i in options.fillup) { + create_choice(options.fillup[i]); + } + } + } + tag_input.keypress(function(event){ + if (event.which == BACKSPACE) { + if (tag_input.val() == "") { + // When backspace is pressed, the last tag is deleted. + $(el).children(".tagit-choice:last").remove(); + } + } + // Comma/Space/Enter are all valid delimiters for new tags. + else if (event.which == COMMA || event.which == SPACE || event.which == ENTER) { + event.preventDefault(); + + var typed = tag_input.val(); + typed = typed.replace(/,+$/,""); + typed = typed.trim(); + + if (typed != "") { + if (is_new (typed)) { + create_choice (typed); + } + // Cleaning the input. + tag_input.val(""); + } + } + }); + + function is_new (value){ + var is_new = true; + this.tag_input.parents("ul").children(".tagit-choice").each(function(i){ + n = $(this).children("input").val(); + if (value == n) { + is_new = false; + } + }); + return is_new; + } + function create_choice (value){ + var el = ""; + el = "
  • \n"; + el += value + "\n"; + el += "x\n"; + el += "\n"; + el += "
  • \n"; + var li_search_tags = this.tag_input.parent(); + $(el).insertBefore (li_search_tags); + this.tag_input.val(""); + } + }; + + String.prototype.trim = function() { + return this.replace(/^\s+|\s+$/g,""); + }; + +})(jQuery); + +/* autogeneration */ +define("tag-it", [], function(){}); + +/* @source mod/team_header.js */; + +define('mod/team_header', [ + "jquery" +], function($){ + $(function(){ + var JoinOrLeaveTeam = function (url, onSuccess) { + $.post(url, function (ret) { + if (ret.r === 0) { + onSuccess(); + } + }, 'json'); + }; + $('.join-or-leave-btn').click(function () { + var Btn = $(this), team = Btn.attr('data-team'), _type = Btn.attr('data-type'), + url = '/hub/team/' + team + '/' + _type; + if (_type === "leave") { + JoinOrLeaveTeam(url, function () { + Btn.removeClass('btn-danger'); + Btn.addClass('btn-success'); + Btn.html('Join'); + Btn.attr('data-type', 'join'); + }); + }else{ + JoinOrLeaveTeam(url, function () { + Btn.removeClass('btn-success'); + Btn.addClass('btn-danger'); + Btn.html('Leave'); + Btn.attr('data-type', 'leave'); + }); + } + }); + }); +}); + +/* @source lib/jquery.caret.js */; + + +/* + Implement Twitter/Weibo @ mentions + + Copyright (c) 2012 chord.luo@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* +本插件操作 textarea 或者 input 内的插入符 +只实现了获得插入符在文本框中的位置,以及设置 +插入符的位置. +*/ + +(function() { + + (function($) { + var getCaretPos, setCaretPos; + getCaretPos = function(inputor) { + var end, endRange, len, normalizedValue, pos, range, start, textInputRange; + if (document.selection) { + /* + #assume we select "HATE" in the inputor such as textarea -> { }. + * start end-point. + * / + * < I really [HATE] IE > between the brackets is the selection range. + * \ + * end end-point. + */ + range = document.selection.createRange(); + pos = 0; + if (range && range.parentElement() === inputor) { + normalizedValue = inputor.value.replace(/\r\n/g, "\n"); + /* SOMETIME !!! + "/r/n" is counted as two char. + one line is two, two will be four. balalala. + so we have to using the normalized one's length.; + */ + len = normalizedValue.length; + /* + <[ I really HATE IE ]>: + the whole content in the inputor will be the textInputRange. + */ + textInputRange = inputor.createTextRange(); + /* _here must be the position of bookmark. + / + <[ I really [HATE] IE ]> + [---------->[ ] : this is what moveToBookmark do. + < I really [[HATE] IE ]> : here is result. + \ two brackets in should be in line. + */ + textInputRange.moveToBookmark(range.getBookmark()); + endRange = inputor.createTextRange(); + /* [--------------------->[] : if set false all end-point goto end. + < I really [[HATE] IE []]> + */ + endRange.collapse(false); + /* + ___VS____ + / \ + < I really [[HATE] IE []]> + \_endRange end-point. + + " > -1" mean the start end-point will be the same or right to the end end-point + * simplelly, all in the end. + */ + if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { + start = end = len; + } else { + /* + I really |HATE] IE ]> + <-| + I really[ [HATE] IE ]> + <-[ + I reall[y [HATE] IE ]> + + will return how many unit have moved. + */ + start = -textInputRange.moveStart("character", -len); + end = -textInputRange.moveEnd("character", -len); + } + } + } else { + start = inputor.selectionStart; + } + return start; + }; + setCaretPos = function(inputor, pos) { + var range; + if (document.selection) { + range = inputor.createTextRange(); + range.move("character", pos); + return range.select(); + } else { + return inputor.setSelectionRange(pos, pos); + } + }; + return $.fn.caretPos = function(pos) { + var inputor; + inputor = this[0]; + inputor.focus(); + if (pos) { + return setCaretPos(inputor, pos); + } else { + return getCaretPos(inputor); + } + }; + })(window.jQuery); + +}).call(this); + +/* autogeneration */ +define("lib/jquery.caret", [], function(){}); + +/* @source mod/quick_emoji.js */; + +define("mod/quick_emoji", [ + "jquery", + "lib/jquery.caret", + "bootstrap" +], + function($) { + var quick_emoji = {}; + quick_emoji.enable = function(textarea_query){ + $('body').delegate('.quick-emoji a', 'click', function(e){ + var emoji = $(this).attr('data-emoji'); + if(emoji){ + textarea = $(textarea_query); + var caretpos = textarea.caretPos(); + var content = textarea.val(); + var result = ""; + if(content) { + result = content.slice(0, caretpos) + ' ' + + emoji + ' ' + content.slice(caretpos); + textarea.val(result); + textarea.caretPos(caretpos + emoji.length + 2); + } + else { + result = emoji; + textarea.val(result); + textarea.caretPos(result.length); + } + } + return false; + }); + + $('body').delegate('.emojis a', 'hover', function(e){ + var $zoomDiv = $('.zoom'); + if (e.type == "mouseenter") { + var $emojiUrl = $(this).find('img').attr('src'); + var $zoomImage = $('.zoom-image'); + var $tabContent = $('.tab-content'); + $zoomImage.attr('src', $emojiUrl); + $zoomDiv.css({'display': 'block'}); + } else { + $zoomDiv.css({'display': 'none'}); + } + }); + } + return quick_emoji; + }); + +/* @source mod/upvote.js */; + +define("mod/upvote", [ + "jquery" +], + function ($) { + var upvote = {}; + upvote.button = function(btn){ + $(btn).click(function(){ + var method = 'PUT'; + var $ts = $(this); + if($ts.hasClass("upvoted")) method = 'DELETE'; + + $.ajax("upvote", + { + type:method, + dataType:'json', + success:function(res){ + console.log(res); + if(res.action>0){ + console.log($ts); + $ts.addClass('btn-danger upvoted'); + $ts.find('i').removeClass('icon-chevron-up').addClass('icon-chevron-down'); + $ts.find('span').text("Unvote"); + } + else if(res.action<0){ + $ts.removeClass('btn-danger upvoted'); + $ts.find('i').removeClass('icon-chevron-down').addClass('icon-chevron-up'); + $ts.find('span').text("Vote"); + } + else{ + alert(res.msg); + return; + } + $('#vote-count').text(res.count); + }, + }); + return false; + }); + + } + return upvote; + }); + +/* @source mod/issue_body.js */; + +define('mod/issue_body', [ + "jquery", + "mod/upvote", + "mod/quick_emoji", + "tag-it" +], function($, upvote, quick_emoji) { + $(function(){ + + // edit issue + $('#issue-content-edit-form').ajaxForm( + {dataType: 'json', + delegation: true, + success: function(r) { + if (r.r == '0') { + var issue = $('#summary'); + issue.find('h2').html(r.title_html); + issue.find('.description .markdown-body').html(r.content_html); + // update ticket content in edit form + var form = $('#issue-content-edit-form'); + form.find('#issue_title').val(r.title); + form.find('#issue_body').val(r.content); + } + $('#summary .content').removeClass('is-comment-editing').find('.form-content').hide(); + }}); + + // close & open + $('#issue').delegate( + '#add-comment-form #close', 'click', function () { + var commentForm = $('#add-comment-form'); + if (commentForm.find('[name=comment_and_close]').length == 0) { + var input = $('').attr('type', 'hidden').attr('name', 'comment_and_close').val('1'); + commentForm.append(input); + } + }); + + $('#issue').delegate( + '#add-comment-form #open', 'click', function () { + var commentForm = $('#add-comment-form'); + if (commentForm.find('[name=comment_and_open]').length == 0) { + var input = $('').attr('type', 'hidden').attr('name', 'comment_and_open').val('1'); + commentForm.append(input); + } + }); + + // delete comment + $('#issue').delegate( + '.delete-pr-note-button', 'click', function (e) { + if (!confirm('Are you sure you want to delete this?')) { + return false; + } + var comment = $(this).parents('.change'); + $.getJSON($(this).attr('href'), + function(r) { + if (r.r == '1'){ + comment.remove(); + } + }); + return false; + }); + + // tabs + $('.write-tab').live( + 'click', + function () { + var form = $(this).closest('.previewable-comment-form'); + $(this).closest('.previewable-comment-form').removeClass('preview-selected').addClass('write-selected'); + form.find('#write_bucket').addClass('active').end().find('#preview_bucket').removeClass('active'); + }); + $('.preview-tab').live( + 'click', + function () { + var form = $(this).closest('.previewable-comment-form'); + form.removeClass('write-selected').addClass('preview-selected'); + form.find('#write_bucket').removeClass('active').end().find('#preview_bucket').addClass('active'); + form.find('#preview_bucket p').html("Loading preview..."); + var url = form.find('#preview_bucket .content-body').data('api-url'), + text = form.find('#write_bucket textarea').val(); + form.find('#preview_bucket .content-body').load(url, {text: text}); + }); + + // join issue + var JoinOrLeaveIssue = function (url, onSuccess) { + $.post(url, function (ret) { + if (ret.r === 0) { + onSuccess(); + if (ret.participants_html) { + $('#participants-block').html(ret.participants_html); + } + } else if (ret.r === 1 && ret.msg) { + alert(ret.msg); + } + }, 'json'); + }; + $('.join-issue-btn').click(function () { + var Btn = $(this), _type = Btn.attr('data-type'), + url = Btn.attr('data-url') + _type; + if (_type === "leave") { + JoinOrLeaveIssue(url, function () { + Btn.removeClass('btn-danger'); + Btn.html('Join'); + Btn.attr('data-type', 'join'); + }); + } else { + JoinOrLeaveIssue(url, function () { + Btn.addClass('btn-danger'); + Btn.html('Leave'); + Btn.attr('data-type', 'leave'); + }); + } + }); + + // edit button + $('#issue').delegate( + '.js-edit-button', 'click', + function () { + var comment_content = $(this).parents('.js-edit-container').addClass('is-comment-editing').children('.content'); + //comment_content.addClass('is-comment-editing'); + comment_content.find('.form-content').show(); + }); + + $('#issue').delegate( + '.js-cancel-button', 'click', + function () { + var comment_content = $(this).parents('.js-edit-container'); + comment_content.removeClass('is-comment-editing'); + comment_content.find('.form-content').hide(); + }); + + $('body').delegate('.js-edit-button', 'click', + function (e) { + var form_content = $(this).parents('.js-edit-container') + .children('.content') + .children('.form-content'); + if(form_content != undefined){ + form_content.show().find('textarea').focus(); + form_content.find('form.js-comment-update').ajaxForm( + { + dataType: 'json', + beforeSend: function() { + form_content.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + if (form_content.find('textarea').attr('name') === 'pull_request_review_comment'){ + // FIXME: + form_content.parents('.js-comments-holder').append(r.html); + form_content.parents('.comment').remove(); + } else { + var comment = form_content.parents('.change'); + form_content.parents('#changelog').append(r.html); + comment.remove(); + } + } + return true; + } + } + ); + }else{ + return false; + } + } + ); + + $('body').delegate('.form-content .comment-cancel-button', 'click', + function (e) { + var form_content = $(this).parents('.form-content'); + if(form_content != undefined){ + form_content.hide(); + }else{ + return false; + } + } + ); + + // others + quick_emoji.enable('#new_comment_content'); + upvote.button("#upvote"); + + // tag + $('#issue-tags').tagit({input_name: 'tags', tag_list: $('.label'), fillup: JSON.parse($("#json-tags")[0].value)}); + + $('.milestone-menu').delegate('a', 'click', + function (e) { + var $a = $(this); + clear_milestone(); + $a.parent().addClass('active').find('input').attr('checked', true);; + } + ); + $('#milestone_title').on('keypress keyup keydown focus', function () { + var $this = $(this); + var value = $this.val(); + console.log(value); + if (value && value !== "") { + clear_milestone(true); + $("#milestone_new").attr('checked', true); + } else { + clear_milestone(); + } + }); + var clear_milestone = function (hide) { + var $menu = $('.milestone-menu'); + $menu.find('li').each(function () { + $(this).removeClass("active"); + }); + if (hide) { + $menu.hide(); + } else { + $menu.show(); + } + }; + + }); +}) + +/* @source mod/tasklist.js */; + +define('mod/tasklist', [ + "jquery", + "jquery-lazyload" +], function($, _) { + $(function() { + $('body').delegate( + '.tasklist-enabled input[type=checkbox]', 'click', function(){ + var editForm = $(this).parents('.tasklist-enabled').find('.tasklist-form'); + if (editForm && editForm.length) { + var el = editForm.find('#issue_body'), content = el.val(), + p = /- \[[x\s]\]/g, joints = content.match(p), parts = content.split(p), + idx = Number($(this).data('item-index')); + joints[idx] = joints[idx] == '- [x]' ? '- [ ]' : '- [x]', content = ''; + for (var i=0, len=parts.length; i
    ').appendTo('body') + .mouseleave(function () { + $(this).hide(); + $('.team-card').hide(); + }); + } + if (!teamCard) { + teamCard = $('
    ').appendTo('body') + .mouseleave(function () { + $(this).hide(); + $('.user-card').hide(); + }); + } + var pos = $(this).offset(); + pos.left = pos.left - 5; + pos.top = pos.top - 5; + var name = /@?(\w+)/.exec($(this).text())[1], user = users[name]; + + if (!user) { + $.getJSON('/api/card_info', {user: name}, + function (r) { + if (r.team) { + teamCard.css(pos).empty().show(); + teamCard.append($.tmpl($('#templ-team-card'), r.team)); + user_type[name] = 'team'; + users[name] = r.team; + } else { + userCard.css(pos).empty().show(); + userCard.append($.tmpl($('#templ-user-card'), r.user)); + user_type[name] = 'user'; + users[name] = r.user; + } + }); + } else { + if (user_type[name] === 'team') { + teamCard.css(pos).empty().show(); + teamCard.append($.tmpl($('#templ-team-card'), user)); + } else { + userCard.css(pos).empty().show(); + userCard.append($.tmpl($('#templ-user-card'), user)); + } + } + }); + }); +}); + +/* @source mod/watch.js */; + +define('mod/watch', [ + "jquery" +], function($){ + + $(function() { + var watch_btn = $("#watch-btn"); + var countLabel = $('#watched-count'); + var proj_id = watch_btn.attr("proj_id"); + + var updateLabelBy = function (n) { + var count = Number(countLabel.text()) || 0; + if (count === 0 && n <= 0) { return; } + + count += n; + countLabel.text(count.toString()); + }; + + watch_btn.click(function() { + + if(watch_btn.hasClass('watch')) { + $.post("/watch/"+proj_id, function(data) { + if (!data.error) { + watch_btn.text('Unwatch'); + watch_btn.addClass('unwatch'); + watch_btn.removeClass('watch'); + updateLabelBy(1); + } else { + // show error notification to user + show_error("关注失败"); + } + }); + } + else{ + $.ajax("/watch/"+proj_id, { + type: "DELETE", + success: function(data) { + if (!data.error) { + watch_btn.text('Watch'); + watch_btn.addClass('watch'); + watch_btn.removeClass('unwatch'); + updateLabelBy(-1); + } else { + show_error("取消关注失败"); + } + }, + error: function(e) { + show_error("取消关注失败"); + } + }); + } + }); + + function show_success(msg) { + var successDiv = $(".navbar .success"); + if (successDiv.size() === 0 ) { + successDiv= $("
    ").addClass("success").addClass("alert-success"); + $("div.navbar").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(1500, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("
    ").addClass("error").addClass("alert-error"); + $("div.navbar").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source lib/zen-form.js */; + +/** Zen Forms 1.0.0 | MIT License | git.io/zen-form */ + +(function($) { + + $.fn.zenForm = function(settings) { + + settings = $.extend({ + trigger: '.go-zen', + theme: 'dark' + }, settings); + + /** + * Helper functions + */ + var Utils = { + + watchEmpty: function($form) { + + $form.find('input, textarea').each(function() { + $(this).on('change', function() { + $(this)[ $(this).val() ? 'removeClass' : 'addClass' ]('empty'); + }).trigger('change'); + }); + + } + + }, // Utils + + /** + * Core functionality + */ + App = { + + /** + * Wrapper element + */ + Environment: null, + + /** + * Functions to create and manipulate environment + */ + env: { + + create: function() { + + var theme = settings.theme == 'dark' ? '' : ' light-theme'; + + return $('
    ', {class: 'zen-forms' + theme}).hide().appendTo('body').fadeIn(200); + + }, // create + + /** + * Update orginal inputs with new values and destroy Environment + */ + destroy: function($elements) { + + // Update orginal inputs with new values + $elements.each(function(i) { + + var $el = $('#zen-forms-input' + i); + + if ( $el.length ) + $(this).val($el.val()); + + }).filter('input:text,textarea').eq(0).focus(); + + $('.zen-forms').fadeOut(200, function() { + $(this).remove(); + }); + + }, // destroy + + /** + * Append inputs, textareas to Environment + */ + add: function($elements) { + + $elements.each(function(i) { + + var $this = $(this), + $wrapper = App.env.addObject(App.Environment, 'div', {class: 'zen-forms-input-wrap'}), + + value = $this.val(), + id = $this.attr('id'), + ID = 'zen-forms-input' + i, + label = $("label[for=" + id + "]").text() || $this.attr('placeholder') || ''; + + // Exclude specified elements + if ( $.inArray( $this.attr('type'), ['checkbox', 'radio', 'submit']) == -1) { + + if ( $this.is('input') ) + App.env.addObject($wrapper, 'input', { + id: ID, + value: value, + type: $this.attr('type') + }); + else + App.env.addObject($wrapper, 'textarea', { + id: ID, + text: value + }); + + App.env.addObject($wrapper, 'label', { + for: ID, + text: label + }); + + } + + }); + + }, // add + + /** + * Wrapper for creating jQuery objects + */ + addObject: function($wrapper, type, params, fn, fnMethod) { + + return $('<'+type+'>', params).on(fnMethod || 'click', fn).appendTo($wrapper); + + }, // addObject + + switchTheme: function() { + + App.Environment.toggleClass('light-theme'); + + } // switchTheme + + }, // env + + zen: function($elements) { + + // Create environment + App.Environment = App.env.create(); + + // Add close button + App.env.addObject(App.Environment, 'a', { + class: 'zen-forms-close-button', + html: '×' + }, function() { + App.env.destroy($elements); + }); + + // Add theme switch button + App.env.addObject(App.Environment, 'a', { + class: 'zen-forms-theme-switch', + html: '•' + }, function() { + App.env.switchTheme(); + }); + + // Add inputs and textareas from form + App.env.add($elements); + + App.Environment.keydown(function(e) { + // Esc close + if (e.which == 27) { + App.env.destroy($elements); + } + }).find('input:text, textarea').eq(0).focus(); + + // Watch inputs and add "empty" class if needed + Utils.watchEmpty(App.Environment); + + }, // zen + + }; // App + + return this.each(function() { + + var $this = $(this); + + function zen() { + App.zen( $this.is('form') ? $this.find('input, textarea') : $this ); + } + + if (!settings.trigger) return zen(); + + $(settings.trigger).on('click', function(event) { + event.preventDefault(); + zen(); + }); + + }); + + }; + +})(jQuery); + +/* autogeneration */ +define("lib/zen-form", [], function(){}); + +/* @source lib/store.js */; + +;(function(win){ + var store = {}, + doc = win.document, + localStorageName = 'localStorage', + namespace = '__storejs__', + storage + + store.disabled = false + store.set = function(key, value) {} + store.get = function(key) {} + store.remove = function(key) {} + store.clear = function() {} + store.transact = function(key, defaultVal, transactionFn) { + var val = store.get(key) + if (transactionFn == null) { + transactionFn = defaultVal + defaultVal = null + } + if (typeof val == 'undefined') { val = defaultVal || {} } + transactionFn(val) + store.set(key, val) + } + store.getAll = function() {} + + store.serialize = function(value) { + return JSON.stringify(value) + } + store.deserialize = function(value) { + if (typeof value != 'string') { return undefined } + try { return JSON.parse(value) } + catch(e) { return value || undefined } + } + + // Functions to encapsulate questionable FireFox 3.6.13 behavior + // when about.config::dom.storage.enabled === false + // See https://github.com/marcuswestin/store.js/issues#issue/13 + function isLocalStorageNameSupported() { + try { return (localStorageName in win && win[localStorageName]) } + catch(err) { return false } + } + + if (isLocalStorageNameSupported()) { + storage = win[localStorageName] + store.set = function(key, val) { + if (val === undefined) { return store.remove(key) } + storage.setItem(key, store.serialize(val)) + return val + } + store.get = function(key) { return store.deserialize(storage.getItem(key)) } + store.remove = function(key) { storage.removeItem(key) } + store.clear = function() { storage.clear() } + store.getAll = function() { + var ret = {} + for (var i=0; idocument.w=window') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source mod/diff.js */; + +define('mod/diff', [ + "jquery", + "mod/input-ext", + "mod/liveupdate", + "mod/colorcube" +], function ($, inputExt, live, colorcube) { + + //////////////////// linecomment + + // comment form + var hideCommentForm = function () { + $('.inline-comment-form').hide().closest('tr').removeClass('show-inline-comment-form'); + $('.inline-comment-form').each( + function (idx, el) { + if (!$(el).siblings('.comment-holder').children('.comment').length) { + $(el).parents('tr').hide(); + } + } + ); + }; + var openCommentForm = function (curRow) { + hideCommentForm(); + var nextRow = curRow.next('tr'); + // if no comments on curRow yet + if (!nextRow.length || !nextRow.hasClass('inline-comments')) { + nextRow = $.tmpl($('#templ-inline-comments-row'), {}).insertAfter(curRow); + } + // if side by side... plz refactor this + var file = curRow.parents('.file'); + if ((file.children('.side')).length != 0 && file.children('.side').css('display') != 'none') { + $(nextRow.children()[0]).attr('colspan', 1); + } + nextRow.show().addClass('show-inline-comment-form'); + var commentsBlock = nextRow.children('.line-comments'), + commentForm = commentsBlock.find('.inline-comment-form'); + // if no commentForm on nextRow yet + if (!commentForm.length) { + // get form-data + var patch_data = file.children('.meta').find('.patch-data'); + var line_data = curRow.find('.line-data'); + var data = { + from_sha: patch_data.attr('data-from-sha'), + old_path: patch_data.attr('data-old-path'), + new_path: patch_data.attr('data-new-path'), + from_oid: patch_data.attr('data-from-oid'), + to_oid: patch_data.attr('data-to-oid'), + old_no: line_data.attr('data-old'), + new_no: line_data.attr('data-new'), + }; + commentForm = $.tmpl($('#templ-inline-comment-form'), data).appendTo(commentsBlock); + commentForm.find('.js-hide-inline-comment-form').click( + function () { + hideCommentForm(); + } + ).end().find('form').submit( + function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + return true; + } + ); + var commentTexarea = commentForm.find('textarea'); + inputExt.enableEmojiInput(commentTexarea); + inputExt.shortcut2submit(commentTexarea); + } + commentForm.show().find('textarea').focus(); + // codelive channel + var linecomment_channel_id; + if ($('.discussion-tab-link').length > 0) { + linecomment_channel_id = "code_pr_"+$('.discussion-tab-link').attr('data-url') + 'linecomment'; + } + // `comment on this line` + commentForm.find('form.js-inline-comment-form').ajaxForm({ + dataType: 'json', + beforeSend: function () { + commentForm.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + commentForm.siblings('.js-comments-holder').append(r.html); + commentForm.find('textarea').val('').blur(); + hideCommentForm(); + live && linecomment_channel_id && + live.emit('ready', {channel: linecomment_channel_id, msg:r.html_with_diff}); + } else if (r.error){ + alert(r.error); + } + commentForm.find('button[type="submit"]').attr('disabled', false).removeClass('disabled'); + commentForm.find('form.js-inline-comment-form').removeClass('submitting') + .end().find('.loader').hide(); + return true; + }, + error: function () {} + }); + }; + + // add-bubble... + $('body').delegate('.add-bubble', 'click', function () { + var curRow = $(this).parents('tr'); + var nextRow = curRow.next('tr'); + if (nextRow.hasClass('inline-comments') && nextRow.css('display') != 'none') { + nextRow.hide(); + } else { + openCommentForm(curRow); + } + }); + + // `add a line note` + $('body').delegate( + '.js-show-inline-comment-form', 'click', function () { + var curRow = $(this).parents('tr').prev('tr'); + openCommentForm(curRow); + }); + + // linecomment delete + $('body').delegate('.inline-comments .delete-button', 'click', function (e) { + if (!confirm('Are you sure you want to delete this?')) { + return false; + } + var comment = $(this).parents('.comment'); + $.getJSON( + $(this).attr('href'), + function(r) { + // FIXME: global row? + if (r.r == '1') + var row = comment.parents('tr'); + if (comment.siblings('.comment').length || + row.find('.inline-comment-form').length) { + comment.remove(); + } else { + row.remove(); + } + } + ); + return false; + }); + + // comment & linecomment edit + $('body').delegate('.js-comment-edit-button', 'click', function (e) { + var form_content = $(this).parents('.comment-header') + .next('.comment-content') + .children('.form-content'); + if (form_content != undefined) { + form_content.show().find('textarea').focus(); + form_content.find('form.js-comment-update').ajaxForm({ + dataType: 'json', + beforeSend: function() { + form_content.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + if (form_content.find('textarea').attr('name') === 'pull_request_review_comment'){ + form_content.parents('.js-comments-holder').append(r.html); + form_content.parents('.comment').remove(); + } else { + var comment = form_content.parents('.change'); + var avatar = comment.prev('.side-avatar'); + form_content.parents('#changelog').append(r.html); + comment.remove(); + avatar.remove(); + } + } + return true; + } + }); + } else { + return false; + } + }); + + // show linecomments toggle + $('body').delegate('.file .js-show-inline-comments-toggle', 'change', function () { + var comments = $(this).parents('.file').find('.inline-comments'); + if ($(this).is(':checked')) { + comments.show(); + } else { + comments.hide(); + } + }); + + // generated file toggle + $('body').delegate('.file a.generated', 'click', function() { + var file = $(this).parents('.file'); + var inline = file.children('.inline').show(); + $(this).hide(); + }); + + // patch side diff toggle + $('body').delegate('.file .js-side-diff', 'click', function () { + var file = $(this).parents('.file'); + file.find('a.generated').hide(); + if (file.children('.side').css('display') === 'none' && + file.children('.inline').css('display') === 'none'){ + file.children('.inline').show(); + }else { + var inline = file.children('.inline').toggle(); + var side = file.children('.side').toggle(); + var checkbox = file.find('.js-show-inline-comments-toggle'); + if (file.children('.side').css('display') != 'none') { + checkbox.attr('checked', false); + side.find('.inline-comments').hide(); + } + else { + checkbox.attr('checked', true); + } + } + }); + + // diff patch fullscreen toggle + $('body').delegate('.file .js-fullscreen', 'click', function () { + var fullscreenStage = $('#fullscreen-stage'); + if (fullscreenStage.length == 0) { + var files = $(this).parents('#files'); + fullscreenStage = $('
    ').appendTo(files); + } + if (fullscreenStage.is(":visible")) { + fullscreenStage.hide(); + $('body').removeClass('fullscreen-mode'); + } else { + var file = $(this).parents('.file'); + fullscreenStage.html(file.clone()).show(); + $('body').addClass('fullscreen-mode'); + fullscreenStage.find('.file .js-fullscreen').text('Exit Full Screen'); + } + }); + + // dblclick open linecomment form + var clearSelection = function () { + if (window.getSelection) { + if (window.getSelection().empty) { // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { // IE? + document.selection.empty(); + } + } + $('body').delegate('.js-open-comment-form.dblclick-comment', 'dblclick', function () { + clearSelection(); + var curRow = $(this).parents('tr'); + openCommentForm(curRow); + }); + + //////////////////// moreline get_contexts + + // moreline + $('body').delegate('pre.skipped a', 'click', function() { + var curRow = $(this).parents('tr'); + var patch_data = curRow.parents('.file').children('.meta').find('.patch-data'); + var data = curRow.find('.expand-data'); + var url = patch_data.attr('data-context-url'); + $.get( + url, + { + old_sha : patch_data.attr('data-old-sha'), + old_path : patch_data.attr('data-old-path'), + old_start : data.attr('data-old-start'), + new_start : data.attr('data-new-start'), + old_end : data.attr('data-old-end'), + new_end : data.attr('data-new-end'), + type : $(this).attr('data-type'), + }, + function (r) { + curRow.after(r.html); + if (r.html.trim()) { + curRow.remove(); + } + } + ); + }); + + // full diff + $('body').delegate('.ellipsis', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj + }, + function(r){ + table.find('tbody').html(r.html); + }); + }); + + // TODO: modify this, after refactor diff api + // toggle whitespace diff + $('body').delegate('.toggle_whitespace', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + var whitespace = $this.attr('data-w'); + + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj, + w: whitespace + }, + function(r){ + table.find('tbody').html(r.html); + $this.attr('data-w', (1 - parseInt(whitespace)).toString()); + }); + }); + + //////////////////// no use ?? + function convertDiff(name, table, pre) { + var inline = $(table).hasClass('inline'); + var ths = table.tHead.rows[0].cells; + var afile, bfile; + if ( inline ) { + afile = ths[0].title; + bfile = ths[1].title; + } else { + afile = $(ths[0]).find('a').text(); + bfile = $(ths[1]).find('a').text(); + } + if ( afile.match(/^Revision /) ) { + afile = 'a/' + name; + bfile = 'b/' + name; + } + var lines = [ + "Index: " + name, + "===================================================================", + "--- " + afile.replace(/File /, ''), + "+++ " + bfile.replace(/File /, ''), + ]; + var sepIndex = 0; + var oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + var title = ""; + if (inline) + title = $(ths[2]).text(); + for (var i = 0; i < table.tBodies.length; i++) { + var tBody = table.tBodies[i]; + if (i == 0 || tBody.className == "skipped") { + if (i > 0) { + if (!oldOffset && oldLength) oldOffset = 1 + if (!newOffset && newLength) newOffset = 1 + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + } + sepIndex = lines.length; + lines.push("@@ -{1},{2} +{3},{4} @@{5}"); + oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + if (tBody.className == "skipped") { + if (inline) + title = $(tBody.rows[0].cells[2]).text(); + continue; + } + } + var tmpLines = []; + for (var j = 0; j < tBody.rows.length; j++) { + var cells = tBody.rows[j].cells; + var oldLineNo = parseInt($(cells[0]).text()); + var newLineNo = parseInt($(cells[inline ? 1 : 2]).text()); + if (tBody.className == 'unmod') { + lines.push(" " + $(cells[inline ? 2 : 1]).text()); + oldLength += 1; + newLength += 1; + if (!oldOffset) oldOffset = oldLineNo; + if (!newOffset) newOffset = newLineNo; + } else { + var oldLine; + var newLine; + var oldTag = "-"; + var newTag = "+"; + if (inline) { + oldLine = newLine = $(cells[2]).text(); + if ($('em', cells[2]).length) oldTag = newTag = "\\"; + } else { + oldLine = $(cells[1]).text(); + if ($('em', cells[1]).length) oldTag = "\\"; + newLine = $(cells[3]).text(); + if ($('em', cells[3]).length) newTag = "\\"; + } + if (!isNaN(oldLineNo)) { + lines.push(oldTag + oldLine); + oldLength += 1; + } + if (!isNaN(newLineNo)) { + tmpLines.push(newTag + newLine); + newLength += 1; + } + } + } + if (tmpLines.length > 0) { + lines = lines.concat(tmpLines); + } + } + if (!oldOffset && oldLength) oldOffset = 1; + if (!newOffset && newLength) newOffset = 1; + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + /* remove trailing   and join lines (with CR for IExplorer) */ + var sep = $.browser.msie ? "\r" : "\n"; + for ( var i = 0; i < lines.length; i++ ) + if ( lines[i] ) + { + var line = lines[i].replace(/\xa0$/, '') + sep; + if ( lines[i][0] == '+' ) + pre.append($('').text(line)); + else if ( lines[i][0] == '-' ) + pre.append($('').text(line)); + else + pre.append($('').text(line)); + } + } + // no use ?? + $("div.diff h2").each(function() { + console.log('call div.diff h2 !!!'); + var switcher = $("").prependTo(this); + var name = $.trim($(this).text()); + var table = $(this).siblings("table").get(0); + if (! table) return; + var pre = $('
    ').hide().insertAfter(table);
    +          $("" + _("Tabular") + "").click(function() {
    +            $(pre).hide();
    +            $(table).show();
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).addClass("active").appendTo(switcher);
    +          $("" + _("Unified") + "").click(function() {
    +            $(table).hide();
    +            if (!pre.get(0).firstChild) convertDiff(name, table, pre);
    +            $(pre).fadeIn("fast")
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).appendTo(switcher);
    +        });
    +
    +
    +        colorcube.init({target:'body'});
    +});
    +
    +/* @source mod/watch.js */;
    +
    +define('mod/watch', [
    +  "jquery"
    +], function($){
    +
    +  $(function() {
    +    var watch_btn = $("#watch-btn");
    +    var countLabel = $('#watched-count');
    +    var proj_id = watch_btn.attr("proj_id");
    +
    +    var updateLabelBy = function (n) {
    +        var count = Number(countLabel.text()) || 0;
    +        if (count === 0 && n <= 0) { return; }
    +
    +        count += n;
    +        countLabel.text(count.toString());
    +    };
    +
    +    watch_btn.click(function() {
    +
    +      if(watch_btn.hasClass('watch')) {
    +        $.post("/watch/"+proj_id, function(data) {
    +          if (!data.error) {
    +            watch_btn.text('Unwatch');
    +            watch_btn.addClass('unwatch');
    +            watch_btn.removeClass('watch');
    +            updateLabelBy(1);
    +          } else {
    +            // show error notification to user
    +            show_error("关注失败");
    +          }
    +        });
    +      }
    +      else{
    +        $.ajax("/watch/"+proj_id, {
    +          type: "DELETE",
    +          success: function(data) {
    +            if (!data.error) {
    +              watch_btn.text('Watch');
    +              watch_btn.addClass('watch');
    +              watch_btn.removeClass('unwatch');
    +              updateLabelBy(-1);
    +            } else {
    +              show_error("取消关注失败");
    +            }
    +          },
    +          error: function(e) {
    +            show_error("取消关注失败");
    +          }
    +        });
    +      }
    +    });
    +
    +    function show_success(msg) {
    +        var successDiv = $(".navbar .success");
    +        if (successDiv.size() === 0 ) {
    +            successDiv= $("
    ").addClass("success").addClass("alert-success"); + $("div.navbar").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(1500, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("
    ").addClass("error").addClass("alert-error"); + $("div.navbar").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); + +/* @source lib/jquery.caret.js */; + + +/* + Implement Twitter/Weibo @ mentions + + Copyright (c) 2012 chord.luo@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* +本插件操作 textarea 或者 input 内的插入符 +只实现了获得插入符在文本框中的位置,以及设置 +插入符的位置. +*/ + +(function() { + + (function($) { + var getCaretPos, setCaretPos; + getCaretPos = function(inputor) { + var end, endRange, len, normalizedValue, pos, range, start, textInputRange; + if (document.selection) { + /* + #assume we select "HATE" in the inputor such as textarea -> { }. + * start end-point. + * / + * < I really [HATE] IE > between the brackets is the selection range. + * \ + * end end-point. + */ + range = document.selection.createRange(); + pos = 0; + if (range && range.parentElement() === inputor) { + normalizedValue = inputor.value.replace(/\r\n/g, "\n"); + /* SOMETIME !!! + "/r/n" is counted as two char. + one line is two, two will be four. balalala. + so we have to using the normalized one's length.; + */ + len = normalizedValue.length; + /* + <[ I really HATE IE ]>: + the whole content in the inputor will be the textInputRange. + */ + textInputRange = inputor.createTextRange(); + /* _here must be the position of bookmark. + / + <[ I really [HATE] IE ]> + [---------->[ ] : this is what moveToBookmark do. + < I really [[HATE] IE ]> : here is result. + \ two brackets in should be in line. + */ + textInputRange.moveToBookmark(range.getBookmark()); + endRange = inputor.createTextRange(); + /* [--------------------->[] : if set false all end-point goto end. + < I really [[HATE] IE []]> + */ + endRange.collapse(false); + /* + ___VS____ + / \ + < I really [[HATE] IE []]> + \_endRange end-point. + + " > -1" mean the start end-point will be the same or right to the end end-point + * simplelly, all in the end. + */ + if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { + start = end = len; + } else { + /* + I really |HATE] IE ]> + <-| + I really[ [HATE] IE ]> + <-[ + I reall[y [HATE] IE ]> + + will return how many unit have moved. + */ + start = -textInputRange.moveStart("character", -len); + end = -textInputRange.moveEnd("character", -len); + } + } + } else { + start = inputor.selectionStart; + } + return start; + }; + setCaretPos = function(inputor, pos) { + var range; + if (document.selection) { + range = inputor.createTextRange(); + range.move("character", pos); + return range.select(); + } else { + return inputor.setSelectionRange(pos, pos); + } + }; + return $.fn.caretPos = function(pos) { + var inputor; + inputor = this[0]; + inputor.focus(); + if (pos) { + return setCaretPos(inputor, pos); + } else { + return getCaretPos(inputor); + } + }; + })(window.jQuery); + +}).call(this); + +/* autogeneration */ +define("lib/jquery.caret", [], function(){}); + +/* @source mod/quick_emoji.js */; + +define("mod/quick_emoji", [ + "jquery", + "lib/jquery.caret", + "bootstrap" +], + function($) { + var quick_emoji = {}; + quick_emoji.enable = function(textarea_query){ + $('body').delegate('.quick-emoji a', 'click', function(e){ + var emoji = $(this).attr('data-emoji'); + if(emoji){ + textarea = $(textarea_query); + var caretpos = textarea.caretPos(); + var content = textarea.val(); + var result = ""; + if(content) { + result = content.slice(0, caretpos) + ' ' + + emoji + ' ' + content.slice(caretpos); + textarea.val(result); + textarea.caretPos(caretpos + emoji.length + 2); + } + else { + result = emoji; + textarea.val(result); + textarea.caretPos(result.length); + } + } + return false; + }); + + $('body').delegate('.emojis a', 'hover', function(e){ + var $zoomDiv = $('.zoom'); + if (e.type == "mouseenter") { + var $emojiUrl = $(this).find('img').attr('src'); + var $zoomImage = $('.zoom-image'); + var $tabContent = $('.tab-content'); + $zoomImage.attr('src', $emojiUrl); + $zoomDiv.css({'display': 'block'}); + } else { + $zoomDiv.css({'display': 'none'}); + } + }); + } + return quick_emoji; + }); + +/* @source lib/pixastic.custom.js */; + +/* + * Pixastic - JavaScript Image Processing Library + * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ + * MIT License [http://www.pixastic.com/lib/license.txt] + */ + + +var Pixastic=(function(){function addEvent(el,event,handler){if(el.addEventListener) +el.addEventListener(event,handler,false);else if(el.attachEvent) +el.attachEvent("on"+event,handler);} +function onready(handler){var handlerDone=false;var execHandler=function(){if(!handlerDone){handlerDone=true;handler();}} +document.write("<"+"script defer src=\"//:\" id=\"__onload_ie_pixastic__\">");var script=document.getElementById("__onload_ie_pixastic__");script.onreadystatechange=function(){if(script.readyState=="complete"){script.parentNode.removeChild(script);execHandler();}} +if(document.addEventListener) +document.addEventListener("DOMContentLoaded",execHandler,false);addEvent(window,"load",execHandler);} +function init(){var imgEls=getElementsByClass("pixastic",null,"img");var canvasEls=getElementsByClass("pixastic",null,"canvas");var elements=imgEls.concat(canvasEls);for(var i=0;i-1){var tmp=actionName;actionName=tmp.substr(0,tmp.indexOf("("));var arg=tmp.match(/\((.*?)\)/);if(arg[1]){arg=arg[1].split(";");for(var a=0;adata2[pix]) +data2[pix]=r1;if((g1=data[pix1=pix+1])>data2[pix1]) +data2[pix1]=g1;if((b1=data[pix2=pix+2])>data2[pix2]) +data2[pix2]=b1;} +dataChanged=true;break;case"darken":while(p--){if((r1=data[pix-=4])(data2[pix]*0.3+data2[pix1]*0.59+data2[pix2]*0.11)){data2[pix]=r1;data2[pix1]=g1;data2[pix2]=b1;}} +dataChanged=true;break;case"lineardodge":while(p--){if((r3=data[pix-=4]+data2[pix])>255) +data2[pix]=255;else +data2[pix]=r3;if((g3=data[pix1=pix+1]+data2[pix1])>255) +data2[pix1]=255;else +data2[pix1]=g3;if((b3=data[pix2=pix+2]+data2[pix2])>255) +data2[pix2]=255;else +data2[pix2]=b3;} +dataChanged=true;break;case"linearburn":while(p--){if((r3=data[pix-=4]+data2[pix])<255) +data2[pix]=0;else +data2[pix]=(r3-255);if((g3=data[pix1=pix+1]+data2[pix1])<255) +data2[pix1]=0;else +data2[pix1]=(g3-255);if((b3=data[pix2=pix+2]+data2[pix2])<255) +data2[pix2]=0;else +data2[pix2]=(b3-255);} +dataChanged=true;break;case"difference":while(p--){if((r3=data[pix-=4]-data2[pix])<0) +data2[pix]=-r3;else +data2[pix]=r3;if((g3=data[pix1=pix+1]-data2[pix1])<0) +data2[pix1]=-g3;else +data2[pix1]=g3;if((b3=data[pix2=pix+2]-data2[pix2])<0) +data2[pix2]=-b3;else +data2[pix2]=b3;} +dataChanged=true;break;case"screen":while(p--){data2[pix-=4]=(255-(((255-data2[pix])*(255-data[pix]))>>8));data2[pix1=pix+1]=(255-(((255-data2[pix1])*(255-data[pix1]))>>8));data2[pix2=pix+2]=(255-(((255-data2[pix2])*(255-data[pix2]))>>8));} +dataChanged=true;break;case"exclusion":var div_2_255=2/255;while(p--){data2[pix-=4]=(r1=data[pix])-(r1*div_2_255-1)*data2[pix];data2[pix1=pix+1]=(g1=data[pix1])-(g1*div_2_255-1)*data2[pix1];data2[pix2=pix+2]=(b1=data[pix2])-(b1*div_2_255-1)*data2[pix2];} +dataChanged=true;break;case"overlay":var div_2_255=2/255;while(p--){if((r1=data[pix-=4])<128) +data2[pix]=data2[pix]*r1*div_2_255;else +data2[pix]=255-(255-data2[pix])*(255-r1)*div_2_255;if((g1=data[pix1=pix+1])<128) +data2[pix1]=data2[pix1]*g1*div_2_255;else +data2[pix1]=255-(255-data2[pix1])*(255-g1)*div_2_255;if((b1=data[pix2=pix+2])<128) +data2[pix2]=data2[pix2]*b1*div_2_255;else +data2[pix2]=255-(255-data2[pix2])*(255-b1)*div_2_255;} +dataChanged=true;break;case"softlight":var div_2_255=2/255;while(p--){if((r1=data[pix-=4])<128) +data2[pix]=((data2[pix]>>1)+64)*r1*div_2_255;else +data2[pix]=255-(191-(data2[pix]>>1))*(255-r1)*div_2_255;if((g1=data[pix1=pix+1])<128) +data2[pix1]=((data2[pix1]>>1)+64)*g1*div_2_255;else +data2[pix1]=255-(191-(data2[pix1]>>1))*(255-g1)*div_2_255;if((b1=data[pix2=pix+2])<128) +data2[pix2]=((data2[pix2]>>1)+64)*b1*div_2_255;else +data2[pix2]=255-(191-(data2[pix2]>>1))*(255-b1)*div_2_255;} +dataChanged=true;break;case"hardlight":var div_2_255=2/255;while(p--){if((r2=data2[pix-=4])<128) +data2[pix]=data[pix]*r2*div_2_255;else +data2[pix]=255-(255-data[pix])*(255-r2)*div_2_255;if((g2=data2[pix1=pix+1])<128) +data2[pix1]=data[pix1]*g2*div_2_255;else +data2[pix1]=255-(255-data[pix1])*(255-g2)*div_2_255;if((b2=data2[pix2=pix+2])<128) +data2[pix2]=data[pix2]*b2*div_2_255;else +data2[pix2]=255-(255-data[pix2])*(255-b2)*div_2_255;} +dataChanged=true;break;case"colordodge":while(p--){if((r3=(data[pix-=4]<<8)/(255-(r2=data2[pix])))>255||r2==255) +data2[pix]=255;else +data2[pix]=r3;if((g3=(data[pix1=pix+1]<<8)/(255-(g2=data2[pix1])))>255||g2==255) +data2[pix1]=255;else +data2[pix1]=g3;if((b3=(data[pix2=pix+2]<<8)/(255-(b2=data2[pix2])))>255||b2==255) +data2[pix2]=255;else +data2[pix2]=b3;} +dataChanged=true;break;case"colorburn":while(p--){if((r3=255-((255-data[pix-=4])<<8)/data2[pix])<0||data2[pix]==0) +data2[pix]=0;else +data2[pix]=r3;if((g3=255-((255-data[pix1=pix+1])<<8)/data2[pix1])<0||data2[pix1]==0) +data2[pix1]=0;else +data2[pix1]=g3;if((b3=255-((255-data[pix2=pix+2])<<8)/data2[pix2])<0||data2[pix2]==0) +data2[pix2]=0;else +data2[pix2]=b3;} +dataChanged=true;break;case"linearlight":while(p--){if(((r3=2*(r2=data2[pix-=4])+data[pix]-256)<0)||(r2<128&&r3<0)){data2[pix]=0}else{if(r3>255) +data2[pix]=255;else +data2[pix]=r3;} +if(((g3=2*(g2=data2[pix1=pix+1])+data[pix1]-256)<0)||(g2<128&&g3<0)){data2[pix1]=0}else{if(g3>255) +data2[pix1]=255;else +data2[pix1]=g3;} +if(((b3=2*(b2=data2[pix2=pix+2])+data[pix2]-256)<0)||(b2<128&&b3<0)){data2[pix2]=0}else{if(b3>255) +data2[pix2]=255;else +data2[pix2]=b3;}} +dataChanged=true;break;case"vividlight":while(p--){if((r2=data2[pix-=4])<128){if(r2){if((r3=255-((255-data[pix])<<8)/(2*r2))<0) +data2[pix]=0;else +data2[pix]=r3}else{data2[pix]=0;}}else if((r3=(r4=2*r2-256))<255){if((r3=(data[pix]<<8)/(255-r4))>255) +data2[pix]=255;else +data2[pix]=r3;}else{if(r3<0) +data2[pix]=0;else +data2[pix]=r3} +if((g2=data2[pix1=pix+1])<128){if(g2){if((g3=255-((255-data[pix1])<<8)/(2*g2))<0) +data2[pix1]=0;else +data2[pix1]=g3;}else{data2[pix1]=0;}}else if((g3=(g4=2*g2-256))<255){if((g3=(data[pix1]<<8)/(255-g4))>255) +data2[pix1]=255;else +data2[pix1]=g3;}else{if(g3<0) +data2[pix1]=0;else +data2[pix1]=g3;} +if((b2=data2[pix2=pix+2])<128){if(b2){if((b3=255-((255-data[pix2])<<8)/(2*b2))<0) +data2[pix2]=0;else +data2[pix2]=b3;}else{data2[pix2]=0;}}else if((b3=(b4=2*b2-256))<255){if((b3=(data[pix2]<<8)/(255-b4))>255) +data2[pix2]=255;else +data2[pix2]=b3;}else{if(b3<0) +data2[pix2]=0;else +data2[pix2]=b3;}} +dataChanged=true;break;case"pinlight":while(p--){if((r2=data2[pix-=4])<128) +if((r1=data[pix])<(r4=2*r2)) +data2[pix]=r1;else +data2[pix]=r4;else +if((r1=data[pix])>(r4=2*r2-256)) +data2[pix]=r1;else +data2[pix]=r4;if((g2=data2[pix1=pix+1])<128) +if((g1=data[pix1])<(g4=2*g2)) +data2[pix1]=g1;else +data2[pix1]=g4;else +if((g1=data[pix1])>(g4=2*g2-256)) +data2[pix1]=g1;else +data2[pix1]=g4;if((r2=data2[pix2=pix+2])<128) +if((r1=data[pix2])<(r4=2*r2)) +data2[pix2]=r1;else +data2[pix2]=r4;else +if((r1=data[pix2])>(r4=2*r2-256)) +data2[pix2]=r1;else +data2[pix2]=r4;} +dataChanged=true;break;case"hardmix":while(p--){if((r2=data2[pix-=4])<128) +if(255-((255-data[pix])<<8)/(2*r2)<128||r2==0) +data2[pix]=0;else +data2[pix]=255;else if((r4=2*r2-256)<255&&(data[pix]<<8)/(255-r4)<128) +data2[pix]=0;else +data2[pix]=255;if((g2=data2[pix1=pix+1])<128) +if(255-((255-data[pix1])<<8)/(2*g2)<128||g2==0) +data2[pix1]=0;else +data2[pix1]=255;else if((g4=2*g2-256)<255&&(data[pix1]<<8)/(255-g4)<128) +data2[pix1]=0;else +data2[pix1]=255;if((b2=data2[pix2=pix+2])<128) +if(255-((255-data[pix2])<<8)/(2*b2)<128||b2==0) +data2[pix2]=0;else +data2[pix2]=255;else if((b4=2*b2-256)<255&&(data[pix2]<<8)/(255-b4)<128) +data2[pix2]=0;else +data2[pix2]=255;} +dataChanged=true;break;} +if(dataChanged) +otherCtx.putImageData(dataDesc2,0,0);if(amount!=1&&!Pixastic.Client.hasGlobalAlpha()){var p=w*h;var amount2=amount;var amount1=1-amount;while(p--){var pix=p*4;var r=(data[pix]*amount1+data2[pix]*amount2)>>0;var g=(data[pix+1]*amount1+data2[pix+1]*amount2)>>0;var b=(data[pix+2]*amount1+data2[pix+2]*amount2)>>0;data[pix]=r;data[pix+1]=g;data[pix+2]=b;} +params.useData=true;}else{var ctx=params.canvas.getContext("2d");ctx.save();ctx.globalAlpha=amount;ctx.drawImage(otherCanvas,0,0,rect.width,rect.height,rect.left,rect.top,rect.width,rect.height);ctx.globalAlpha=1;ctx.restore();} +return true;}},checkSupport:function(){return Pixastic.Client.hasCanvasImageData();}} +/* autogeneration */ +define("lib/pixastic.custom", [], function(){}); + +/* @source */; + +define('mousetrap', 'lib/mousetrap.js'); + +require([ + 'jquery', + 'jquery-caret', + 'jquery-atwho', + 'jquery-forms', + 'bootstrap', + 'lib/pixastic.custom', + 'mod/liveupdate', + 'mod/input-ext', + 'mod/quick_emoji', + 'mod/user_following', + 'mod/watch', + //'mod/commit', // delegate of .js-comment-edit-button // plz refac... + 'mod/diff', // diff js + 'mod/user_profile_card', + 'mod/tasklist', + 'mod/mute', + 'mousetrap', + 'mod/pull_key', + ], + function ($, _, _, _, _, _, live, inputExt, quick_emoji, userFollowing) { + $(function () { + var channel_id = "code_pr_"+$('.discussion-tab-link').attr('data-url'); + var linecomment_channel_id = channel_id + 'linecomment'; + live.emit('ready', {channel: channel_id, msg: ''}); + $('textarea#new_comment_content').live( + 'keypress', + (function (e) { + var username = $('textarea#new_comment_content').data('current-user'); + live.emit('ready', {channel: channel_id, type: 'typing', username: username}); + }) + ); + + // pull-nav + var getAnchor = function (url) { + var index = url.indexOf('#'); + if (index != -1) { + return url.substring(index + 1); + } + return ''; + }; + var loadTabContent = function (tab, isFirstLoad) { + var container = $('#' + $(tab).attr('data-tab-container')), + url = $(tab).attr('data-j-url'); + + if (container && container.children().length == 0) { + $('.loader').show(); + container.load(url, {}, function () { + $('.loader').hide(); + if (container.is('#discussion-pane') || container.is('#files-pane') || container.is("#commits-pane")) { + loadMergeGuide(container, function(st){ + window.initState = st; + }); + + loadCommentInputExt(); + + $('#watch-ci').on('click', function(){ + if ($(this).attr('checked')) { + CINotification.init(); + window.ciWatcher = window.setInterval(function(){ + loadMergeGuide(container, function(st){ + var msg, prName = $('h2').text(); + if (st !== window.initState) { + if (st === 'clean') { + msg = 'PR "'+ prName +'" can merge now'; + clearTimeout(window.ciWatcher); + } else if (st === 'error') { + msg = 'PR "'+ prName +'" occurred an error'; + window.initState = 'error'; + } else if (st === 'dirty') { + msg = 'PR "'+ prName +'" got a qaci'; + window.initState = 'dirty'; + } else { + msg = 'Something wrong... ping xutao!' + } + CINotification.create('Code need your Attention!', msg); + } + }); + }, 5000); + } else { + clearTimeout(window.ciWatcher); + } + }); + + } + if (isFirstLoad) { + var anchor = getAnchor(location.href); + if (anchor !== '') { + var anchorEl = $(document.getElementById(anchor)); + if (anchorEl.length > 0) { + $('html, body').animate({scrollTop:anchorEl.offset().top}, 500); + } + } + } + }); + } + }; + + /* notification */ + var CINotification = { + init: function () { + var webkitNotify = window.webkitNotifications, + notify = window.Notification; + + if (webkitNotify) { + var st = webkitNotify.checkPermission(); + if (st === 1) { + webkitNotify.requestPermission(); + } else if (st === 2) { + alert('你拒绝了通知授权,请在通知设置里打开。') + } + } else if (notify && notify.permission !== "granted") { + notify.requestPermission(function (status) { + if (notify.permission !== status) { + notify.permission = status; + } + }); + } + }, + + create: function(title,msg) { + var webkitNotify = window.webkitNotifications, + notify = window.Notification, + icon = '/static/img/code_lover.png'; + + if (webkitNotify) { + if (webkitNotify.checkPermission() != 0) { + message.init(); + } else { + var n = webkitNotify.createNotification(icon,title, msg); + n.show(); + /* + n.ondisplay = function() { }; + n.onclose = function() { }; + setTimeout(function(){n.cancle}, 5000); + */ + } + } else if (notify) { + if (notify.permission == "granted") { + var n = new notify(title, { icon: icon, body: msg }); + } else { + message.init(); + } + } + } + } + + $('.pull-nav a[data-toggle="tab"]').on('show', function (e) { + window.history.pushState('', '', $(e.target).attr('data-url')); + loadTabContent($(e.target), false); + }); + loadTabContent($('.pull-nav .active a'), true); + var tabUrls = [], tabs = {}; + $('.pull-nav a[data-toggle="tab"]').each( + function (i, t) { + var url = $(t).attr('data-url'); + tabUrls.push(url); + tabs[url] = $(t); + }); + $(window).bind( + "popstate", function(e) { + var location = e.target.location, + path = location.href.split(location.protocol + '//' + location.host)[1], + anchorIndex = path.indexOf('#'); + if (anchorIndex !== -1) { + path = path.substring(0, anchorIndex); + } + if (path) { + for (var i=0, l=tabUrls.length; i 0){ + var inline = $(this).siblings('div .inline'); + var side = $(this).siblings('div .side'); + if (inline.css('display') === 'none' && side.css('display') === 'none'){ + inline.show(); + side.hide(); + }else{ + inline.hide(); + side.hide(); + } + } + }); + + // merge guide + var loadMergeGuide = function (container, cb) { + if (!container) + return; + var mergeGuide = container.find('#merge-guide'); + if (mergeGuide.length) { + var url = mergeGuide.attr('data-url'); + mergeGuide.load( + url, + function () { + var mergeForm = mergeGuide.find('.merge-form'), + cancelBtn = mergeGuide.find('#merge-pr-cancel-btn'); + mergeGuide.find('#merge-pr-confirm-btn').click(function () { + $(this).closest('.mergeable.clean').hide(); + mergeForm.show(); + }); + cancelBtn.click(function () { + if (!$(this).hasClass('disabled')) { + mergeForm.hide(); + mergeGuide.find('.mergeable.clean').show(); + } + }); + mergeForm.submit(function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + cancelBtn.addClass('disabled'); + var username = $('textarea#new_comment_content').data('current-user'); + live.emit('ready', {channel: channel_id, type: 'merge', username: username}); + return true; + }); + + cb(container.find('.merge-branch').data('mst')); + } + ); + } + }; + + $('#discussion-pane').delegate('#add-comment-form #close', 'click', function () { + var commentForm = $('#add-comment-form'); + if (commentForm.find('[name=comment_and_close]').length == 0) { + var input = $('').attr('type', 'hidden').attr('name', 'comment_and_close').val('1'); + commentForm.append(input); + } + }); + + $('#discussion-pane').delegate('#add-comment-form #reopen', 'click', function () { + var commentForm = $('#add-comment-form'); + if (commentForm.find('[name=comment_and_reopen]').length == 0) { + var input = $('').attr('type', 'hidden').attr('name', 'comment_and_reopen').val('1'); + commentForm.append(input); + } + }); + + $('#discussion-pane').delegate('.outdated_mark', 'click', function () { + $(this).toggle(); + $(this).next().toggle(); + }); + + // delete pr comment + $('#discussion-pane').delegate('.change-header .delete-pr-note-button', 'click', function (e) { + if (!confirm('Are you sure you want to delete this?')) { + return false; + } + var comment = $(this).parents('.change'); + var avatar = comment.prev('.side-avatar'); + $.getJSON( + $(this).attr('href'), + function(r) { + if (r.r == '1'){ + comment.remove(); + avatar.remove(); + } + } + ); + return false; + }); + + $('#add-comment-form').ajaxForm({ + dataType: 'json', + delegation: true, + beforeSend: function () { + var commentForm = $('#add-comment-form'); + commentForm.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + var commentForm = $('#add-comment-form'); + if (r.r == 0) { + if (r.reload && r.redirect_to) { + window.location.href = r.redirect_to; + return true; + } else if (r.html) { + commentForm.find('textarea').val(''); + $('#changelog').append(r.html); + live.emit('ready', {channel: channel_id, msg:r.html}); + } + } else if(r.error){ + alert(r.error); + } + commentForm.removeClass('submitting').find('button[type="submit"]').attr('disabled', false) + .removeClass('disabled').end().find('.loader').hide(); + return true; + } + }); + + $('.tabnav-tabs a').live('click', function () { + $(this).closest('.tabnav-tabs').find('a').removeClass('selected'); + $(this).addClass('selected'); + }); + + $('.write-tab').live('click', function () { + var form = $(this).closest('.previewable-comment-form'); + $(this).closest('.previewable-comment-form').removeClass('preview-selected').addClass('write-selected'); + form.find('#write_bucket').addClass('active').end().find('#preview_bucket').removeClass('active'); + }); + $('.preview-tab').live('click', function () { + var form = $(this).closest('.previewable-comment-form'); + form.removeClass('write-selected').addClass('preview-selected'); + form.find('#write_bucket').removeClass('active').end().find('#preview_bucket').addClass('active'); + form.find('#preview_bucket p').html("Loading preview..."); + var url = form.find('#preview_bucket .content-body').data('api-url'), + text = form.find('#write_bucket textarea').val(); + form.find('#preview_bucket .content-body').load(url, {text: text}); + }); + + var loadCommentInputExt = function () { + if ($('#participants').length > 0) { + var participants = JSON.parse($('#participants').val()); + var teams = JSON.parse($('#all-teams').val() || '[]'); + var following = userFollowing.val(); + var users = $.unique( + participants.concat(following, teams) + ); + $('textarea#new_comment_content, textarea#issue_body') + .atwho("@", {data:users, limit:7}); + } + var newCommentInput = $('textarea#new_comment_content'); + inputExt.enableEmojiInput(newCommentInput); + inputExt.enablePullsInput(newCommentInput); + inputExt.shortcut2submit(newCommentInput); + inputExt.enableZenMode(newCommentInput); + inputExt.enableQuickQuotes(newCommentInput); + + var uploader = $('#form-file-upload'), + textarea = $('#add-comment-form').find('textarea'); + inputExt.enableUpload(uploader, textarea); + + $('#add-comment-form button[type="submit"]').tooltip(); + }; + loadCommentInputExt(); + + }); + + quick_emoji.enable('#new_comment_content'); + } +); diff --git a/dist/js/app/pull/new.js b/dist/js/app/pull/new.js new file mode 100644 index 0000000..6484229 --- /dev/null +++ b/dist/js/app/pull/new.js @@ -0,0 +1,5977 @@ + +require.config({ enable_ozma: true }); + + +/* @source lib/mousetrap.js */; + +/** + * Copyright 2012 Craig Campbell + * + * 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. + * + * Mousetrap is a simple keyboard shortcut library for Javascript with + * no external dependencies + * + * @version 1.2.2 + * @url craig.is/killing/mice + */ +(function() { + + /** + * mapping of special keycodes to their corresponding keys + * + * everything in this dictionary cannot use keypress events + * so it has to be here to map to the correct keycodes for + * keyup/keydown events + * + * @type {Object} + */ + var _MAP = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 20: 'capslock', + 27: 'esc', + 32: 'space', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 45: 'ins', + 46: 'del', + 91: 'meta', + 93: 'meta', + 224: 'meta' + }, + + /** + * mapping for special characters so they can support + * + * this dictionary is only used incase you want to bind a + * keyup or keydown event to one of these keys + * + * @type {Object} + */ + _KEYCODE_MAP = { + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111 : '/', + 186: ';', + 187: '=', + 188: ',', + 189: '-', + 190: '.', + 191: '/', + 192: '`', + 219: '[', + 220: '\\', + 221: ']', + 222: '\'' + }, + + /** + * this is a mapping of keys that require shift on a US keypad + * back to the non shift equivelents + * + * this is so you can use keyup events with these keys + * + * note that this will only work reliably on US keyboards + * + * @type {Object} + */ + _SHIFT_MAP = { + '~': '`', + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '%': '5', + '^': '6', + '&': '7', + '*': '8', + '(': '9', + ')': '0', + '_': '-', + '+': '=', + ':': ';', + '\"': '\'', + '<': ',', + '>': '.', + '?': '/', + '|': '\\' + }, + + /** + * this is a list of special strings you can use to map + * to modifier keys when you specify your keyboard shortcuts + * + * @type {Object} + */ + _SPECIAL_ALIASES = { + 'option': 'alt', + 'command': 'meta', + 'return': 'enter', + 'escape': 'esc' + }, + + /** + * variable to store the flipped version of _MAP from above + * needed to check if we should use keypress or not when no action + * is specified + * + * @type {Object|undefined} + */ + _REVERSE_MAP, + + /** + * a list of all the callbacks setup via Mousetrap.bind() + * + * @type {Object} + */ + _callbacks = {}, + + /** + * direct map of string combinations to callbacks used for trigger() + * + * @type {Object} + */ + _direct_map = {}, + + /** + * keeps track of what level each sequence is at since multiple + * sequences can start out with the same sequence + * + * @type {Object} + */ + _sequence_levels = {}, + + /** + * variable to store the setTimeout call + * + * @type {null|number} + */ + _reset_timer, + + /** + * temporary state where we will ignore the next keyup + * + * @type {boolean|string} + */ + _ignore_next_keyup = false, + + /** + * are we currently inside of a sequence? + * type of action ("keyup" or "keydown" or "keypress") or false + * + * @type {boolean|string} + */ + _sequence_type = false; + + /** + * loop through the f keys, f1 to f19 and add them to the map + * programatically + */ + for (var i = 1; i < 20; ++i) { + _MAP[111 + i] = 'f' + i; + } + + /** + * loop through to map numbers on the numeric keypad + */ + for (i = 0; i <= 9; ++i) { + _MAP[i + 96] = i; + } + + /** + * cross browser add event method + * + * @param {Element|HTMLDocument} object + * @param {string} type + * @param {Function} callback + * @returns void + */ + function _addEvent(object, type, callback) { + if (object.addEventListener) { + object.addEventListener(type, callback, false); + return; + } + + object.attachEvent('on' + type, callback); + } + + /** + * takes the event and returns the key character + * + * @param {Event} e + * @return {string} + */ + function _characterFromEvent(e) { + + // for keypress events we should return the character as is + if (e.type == 'keypress') { + return String.fromCharCode(e.which); + } + + // for non keypress events the special maps are needed + if (_MAP[e.which]) { + return _MAP[e.which]; + } + + if (_KEYCODE_MAP[e.which]) { + return _KEYCODE_MAP[e.which]; + } + + // if it is not in the special map + return String.fromCharCode(e.which).toLowerCase(); + } + + /** + * checks if two arrays are equal + * + * @param {Array} modifiers1 + * @param {Array} modifiers2 + * @returns {boolean} + */ + function _modifiersMatch(modifiers1, modifiers2) { + return modifiers1.sort().join(',') === modifiers2.sort().join(','); + } + + /** + * resets all sequence counters except for the ones passed in + * + * @param {Object} do_not_reset + * @returns void + */ + function _resetSequences(do_not_reset, max_level) { + do_not_reset = do_not_reset || {}; + + var active_sequences = false, + key; + + for (key in _sequence_levels) { + if (do_not_reset[key] && _sequence_levels[key] > max_level) { + active_sequences = true; + continue; + } + _sequence_levels[key] = 0; + } + + if (!active_sequences) { + _sequence_type = false; + } + } + + /** + * finds all callbacks that match based on the keycode, modifiers, + * and action + * + * @param {string} character + * @param {Array} modifiers + * @param {Event|Object} e + * @param {boolean=} remove - should we remove any matches + * @param {string=} combination + * @returns {Array} + */ + function _getMatches(character, modifiers, e, remove, combination) { + var i, + callback, + matches = [], + action = e.type; + + // if there are no events related to this keycode + if (!_callbacks[character]) { + return []; + } + + // if a modifier key is coming up on its own we should allow it + if (action == 'keyup' && _isModifier(character)) { + modifiers = [character]; + } + + // loop through all callbacks for the key that was pressed + // and see if any of them match + for (i = 0; i < _callbacks[character].length; ++i) { + callback = _callbacks[character][i]; + + // if this is a sequence but it is not at the right level + // then move onto the next match + if (callback.seq && _sequence_levels[callback.seq] != callback.level) { + continue; + } + + // if the action we are looking for doesn't match the action we got + // then we should keep going + if (action != callback.action) { + continue; + } + + // if this is a keypress event and the meta key and control key + // are not pressed that means that we need to only look at the + // character, otherwise check the modifiers as well + // + // chrome will not fire a keypress if meta or control is down + // safari will fire a keypress if meta or meta+shift is down + // firefox will fire a keypress if meta or control is down + if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) { + + // remove is used so if you change your mind and call bind a + // second time with a new function the first one is overwritten + if (remove && callback.combo == combination) { + _callbacks[character].splice(i, 1); + } + + matches.push(callback); + } + } + + return matches; + } + + /** + * takes a key event and figures out what the modifiers are + * + * @param {Event} e + * @returns {Array} + */ + function _eventModifiers(e) { + var modifiers = []; + + if (e.shiftKey) { + modifiers.push('shift'); + } + + if (e.altKey) { + modifiers.push('alt'); + } + + if (e.ctrlKey) { + modifiers.push('ctrl'); + } + + if (e.metaKey) { + modifiers.push('meta'); + } + + return modifiers; + } + + /** + * actually calls the callback function + * + * if your callback function returns false this will use the jquery + * convention - prevent default and stop propogation on the event + * + * @param {Function} callback + * @param {Event} e + * @returns void + */ + function _fireCallback(callback, e, combo) { + + // if this event should not happen stop here + if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo)) { + return; + } + + if (callback(e, combo) === false) { + if (e.preventDefault) { + e.preventDefault(); + } + + if (e.stopPropagation) { + e.stopPropagation(); + } + + e.returnValue = false; + e.cancelBubble = true; + } + } + + /** + * handles a character key event + * + * @param {string} character + * @param {Event} e + * @returns void + */ + function _handleCharacter(character, e) { + var callbacks = _getMatches(character, _eventModifiers(e), e), + i, + do_not_reset = {}, + max_level = 0, + processed_sequence_callback = false; + + // loop through matching callbacks for this key event + for (i = 0; i < callbacks.length; ++i) { + + // fire for all sequence callbacks + // this is because if for example you have multiple sequences + // bound such as "g i" and "g t" they both need to fire the + // callback for matching g cause otherwise you can only ever + // match the first one + if (callbacks[i].seq) { + processed_sequence_callback = true; + + // as we loop through keep track of the max + // any sequence at a lower level will be discarded + max_level = Math.max(max_level, callbacks[i].level); + + // keep a list of which sequences were matches for later + do_not_reset[callbacks[i].seq] = 1; + _fireCallback(callbacks[i].callback, e, callbacks[i].combo); + continue; + } + + // if there were no sequence matches but we are still here + // that means this is a regular match so we should fire that + if (!processed_sequence_callback && !_sequence_type) { + _fireCallback(callbacks[i].callback, e, callbacks[i].combo); + } + } + + // if you are inside of a sequence and the key you are pressing + // is not a modifier key then we should reset all sequences + // that were not matched by this key event + if (e.type == _sequence_type && !_isModifier(character)) { + _resetSequences(do_not_reset, max_level); + } + } + + /** + * handles a keydown event + * + * @param {Event} e + * @returns void + */ + function _handleKey(e) { + + // normalize e.which for key events + // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion + if (typeof e.which !== 'number') { + e.which = e.keyCode; + } + + var character = _characterFromEvent(e); + + // no character found then stop + if (!character) { + return; + } + + if (e.type == 'keyup' && _ignore_next_keyup == character) { + _ignore_next_keyup = false; + return; + } + + _handleCharacter(character, e); + } + + /** + * determines if the keycode specified is a modifier key or not + * + * @param {string} key + * @returns {boolean} + */ + function _isModifier(key) { + return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta'; + } + + /** + * called to set a 1 second timeout on the specified sequence + * + * this is so after each key press in the sequence you have 1 second + * to press the next key before you have to start over + * + * @returns void + */ + function _resetSequenceTimer() { + clearTimeout(_reset_timer); + _reset_timer = setTimeout(_resetSequences, 1000); + } + + /** + * reverses the map lookup so that we can look for specific keys + * to see what can and can't use keypress + * + * @return {Object} + */ + function _getReverseMap() { + if (!_REVERSE_MAP) { + _REVERSE_MAP = {}; + for (var key in _MAP) { + + // pull out the numeric keypad from here cause keypress should + // be able to detect the keys from the character + if (key > 95 && key < 112) { + continue; + } + + if (_MAP.hasOwnProperty(key)) { + _REVERSE_MAP[_MAP[key]] = key; + } + } + } + return _REVERSE_MAP; + } + + /** + * picks the best action based on the key combination + * + * @param {string} key - character for key + * @param {Array} modifiers + * @param {string=} action passed in + */ + function _pickBestAction(key, modifiers, action) { + + // if no action was picked in we should try to pick the one + // that we think would work best for this key + if (!action) { + action = _getReverseMap()[key] ? 'keydown' : 'keypress'; + } + + // modifier keys don't work as expected with keypress, + // switch to keydown + if (action == 'keypress' && modifiers.length) { + action = 'keydown'; + } + + return action; + } + + /** + * binds a key sequence to an event + * + * @param {string} combo - combo specified in bind call + * @param {Array} keys + * @param {Function} callback + * @param {string=} action + * @returns void + */ + function _bindSequence(combo, keys, callback, action) { + + // start off by adding a sequence level record for this combination + // and setting the level to 0 + _sequence_levels[combo] = 0; + + // if there is no action pick the best one for the first key + // in the sequence + if (!action) { + action = _pickBestAction(keys[0], []); + } + + /** + * callback to increase the sequence level for this sequence and reset + * all other sequences that were active + * + * @param {Event} e + * @returns void + */ + var _increaseSequence = function(e) { + _sequence_type = action; + ++_sequence_levels[combo]; + _resetSequenceTimer(); + }, + + /** + * wraps the specified callback inside of another function in order + * to reset all sequence counters as soon as this sequence is done + * + * @param {Event} e + * @returns void + */ + _callbackAndReset = function(e) { + _fireCallback(callback, e, combo); + + // we should ignore the next key up if the action is key down + // or keypress. this is so if you finish a sequence and + // release the key the final key will not trigger a keyup + if (action !== 'keyup') { + _ignore_next_keyup = _characterFromEvent(e); + } + + // weird race condition if a sequence ends with the key + // another sequence begins with + setTimeout(_resetSequences, 10); + }, + i; + + // loop through keys one at a time and bind the appropriate callback + // function. for any key leading up to the final one it should + // increase the sequence. after the final, it should reset all sequences + for (i = 0; i < keys.length; ++i) { + _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i); + } + } + + /** + * binds a single keyboard combination + * + * @param {string} combination + * @param {Function} callback + * @param {string=} action + * @param {string=} sequence_name - name of sequence if part of sequence + * @param {number=} level - what part of the sequence the command is + * @returns void + */ + function _bindSingle(combination, callback, action, sequence_name, level) { + + // make sure multiple spaces in a row become a single space + combination = combination.replace(/\s+/g, ' '); + + var sequence = combination.split(' '), + i, + key, + keys, + modifiers = []; + + // if this pattern is a sequence of keys then run through this method + // to reprocess each pattern one key at a time + if (sequence.length > 1) { + _bindSequence(combination, sequence, callback, action); + return; + } + + // take the keys from this pattern and figure out what the actual + // pattern is all about + keys = combination === '+' ? ['+'] : combination.split('+'); + + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + + // normalize key names + if (_SPECIAL_ALIASES[key]) { + key = _SPECIAL_ALIASES[key]; + } + + // if this is not a keypress event then we should + // be smart about using shift keys + // this will only work for US keyboards however + if (action && action != 'keypress' && _SHIFT_MAP[key]) { + key = _SHIFT_MAP[key]; + modifiers.push('shift'); + } + + // if this key is a modifier then add it to the list of modifiers + if (_isModifier(key)) { + modifiers.push(key); + } + } + + // depending on what the key combination is + // we will try to pick the best event for it + action = _pickBestAction(key, modifiers, action); + + // make sure to initialize array if this is the first time + // a callback is added for this key + if (!_callbacks[key]) { + _callbacks[key] = []; + } + + // remove an existing match if there is one + _getMatches(key, modifiers, {type: action}, !sequence_name, combination); + + // add this call back to the array + // if it is a sequence put it at the beginning + // if not put it at the end + // + // this is important because the way these are processed expects + // the sequence ones to come first + _callbacks[key][sequence_name ? 'unshift' : 'push']({ + callback: callback, + modifiers: modifiers, + action: action, + seq: sequence_name, + level: level, + combo: combination + }); + } + + /** + * binds multiple combinations to the same callback + * + * @param {Array} combinations + * @param {Function} callback + * @param {string|undefined} action + * @returns void + */ + function _bindMultiple(combinations, callback, action) { + for (var i = 0; i < combinations.length; ++i) { + _bindSingle(combinations[i], callback, action); + } + } + + // start! + _addEvent(document, 'keypress', _handleKey); + _addEvent(document, 'keydown', _handleKey); + _addEvent(document, 'keyup', _handleKey); + + var Mousetrap = { + + /** + * binds an event to mousetrap + * + * can be a single key, a combination of keys separated with +, + * an array of keys, or a sequence of keys separated by spaces + * + * be sure to list the modifier keys first to make sure that the + * correct key ends up getting bound (the last key in the pattern) + * + * @param {string|Array} keys + * @param {Function} callback + * @param {string=} action - 'keypress', 'keydown', or 'keyup' + * @returns void + */ + bind: function(keys, callback, action) { + _bindMultiple(keys instanceof Array ? keys : [keys], callback, action); + _direct_map[keys + ':' + action] = callback; + return this; + }, + + /** + * unbinds an event to mousetrap + * + * the unbinding sets the callback function of the specified key combo + * to an empty function and deletes the corresponding key in the + * _direct_map dict. + * + * the keycombo+action has to be exactly the same as + * it was defined in the bind method + * + * TODO: actually remove this from the _callbacks dictionary instead + * of binding an empty function + * + * @param {string|Array} keys + * @param {string} action + * @returns void + */ + unbind: function(keys, action) { + if (_direct_map[keys + ':' + action]) { + delete _direct_map[keys + ':' + action]; + this.bind(keys, function() {}, action); + } + return this; + }, + + /** + * triggers an event that has already been bound + * + * @param {string} keys + * @param {string=} action + * @returns void + */ + trigger: function(keys, action) { + _direct_map[keys + ':' + action](); + return this; + }, + + /** + * resets the library back to its initial state. this is useful + * if you want to clear out the current keyboard shortcuts and bind + * new ones - for example if you switch to another page + * + * @returns void + */ + reset: function() { + _callbacks = {}; + _direct_map = {}; + return this; + }, + + /** + * should we stop this event before firing off callbacks + * + * @param {Event} e + * @param {Element} element + * @return {boolean} + */ + stopCallback: function(e, element, combo) { + + // if the element has the class "mousetrap" then no need to stop + if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { + return false; + } + + // stop for input, select, and textarea + return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); + } + }; + + // expose mousetrap to the global object + window.Mousetrap = Mousetrap; + + // expose mousetrap as an AMD module + if (typeof define === 'function' && define.amd) { + define("mousetrap", Mousetrap); + } +}) (); + +/* @source mod/colorcube.js */; + +define("mod/colorcube", + [ + "jquery" +], + function ($) { + var colorcube = {}, cubeWnd; + var showCubeWnd = function (el) { + el = $(el); + if (!cubeWnd) { + cubeWnd = $('
    ').appendTo('body'); + } + var pos = el.offset(); + pos = {top:pos.top - 40, left:pos.left + el.width()/2 -15}; + cubeWnd.show().offset(pos).css({'background-color':el.data('color')}); + }; + colorcube.init = function (opts) { + if (opts.target) { + $(opts.target).delegate( + '.line .color', 'mouseenter mouseleave', function (e) { + if (e.type === 'mouseenter') { + showCubeWnd(this); + } else { + cubeWnd.hide(); + } + }); + } + }; + return colorcube; + } +); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source mod/diff.js */; + +define('mod/diff', [ + "jquery", + "mod/input-ext", + "mod/liveupdate", + "mod/colorcube" +], function ($, inputExt, live, colorcube) { + + //////////////////// linecomment + + // comment form + var hideCommentForm = function () { + $('.inline-comment-form').hide().closest('tr').removeClass('show-inline-comment-form'); + $('.inline-comment-form').each( + function (idx, el) { + if (!$(el).siblings('.comment-holder').children('.comment').length) { + $(el).parents('tr').hide(); + } + } + ); + }; + var openCommentForm = function (curRow) { + hideCommentForm(); + var nextRow = curRow.next('tr'); + // if no comments on curRow yet + if (!nextRow.length || !nextRow.hasClass('inline-comments')) { + nextRow = $.tmpl($('#templ-inline-comments-row'), {}).insertAfter(curRow); + } + // if side by side... plz refactor this + var file = curRow.parents('.file'); + if ((file.children('.side')).length != 0 && file.children('.side').css('display') != 'none') { + $(nextRow.children()[0]).attr('colspan', 1); + } + nextRow.show().addClass('show-inline-comment-form'); + var commentsBlock = nextRow.children('.line-comments'), + commentForm = commentsBlock.find('.inline-comment-form'); + // if no commentForm on nextRow yet + if (!commentForm.length) { + // get form-data + var patch_data = file.children('.meta').find('.patch-data'); + var line_data = curRow.find('.line-data'); + var data = { + from_sha: patch_data.attr('data-from-sha'), + old_path: patch_data.attr('data-old-path'), + new_path: patch_data.attr('data-new-path'), + from_oid: patch_data.attr('data-from-oid'), + to_oid: patch_data.attr('data-to-oid'), + old_no: line_data.attr('data-old'), + new_no: line_data.attr('data-new'), + }; + commentForm = $.tmpl($('#templ-inline-comment-form'), data).appendTo(commentsBlock); + commentForm.find('.js-hide-inline-comment-form').click( + function () { + hideCommentForm(); + } + ).end().find('form').submit( + function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + return true; + } + ); + var commentTexarea = commentForm.find('textarea'); + inputExt.enableEmojiInput(commentTexarea); + inputExt.shortcut2submit(commentTexarea); + } + commentForm.show().find('textarea').focus(); + // codelive channel + var linecomment_channel_id; + if ($('.discussion-tab-link').length > 0) { + linecomment_channel_id = "code_pr_"+$('.discussion-tab-link').attr('data-url') + 'linecomment'; + } + // `comment on this line` + commentForm.find('form.js-inline-comment-form').ajaxForm({ + dataType: 'json', + beforeSend: function () { + commentForm.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + commentForm.siblings('.js-comments-holder').append(r.html); + commentForm.find('textarea').val('').blur(); + hideCommentForm(); + live && linecomment_channel_id && + live.emit('ready', {channel: linecomment_channel_id, msg:r.html_with_diff}); + } else if (r.error){ + alert(r.error); + } + commentForm.find('button[type="submit"]').attr('disabled', false).removeClass('disabled'); + commentForm.find('form.js-inline-comment-form').removeClass('submitting') + .end().find('.loader').hide(); + return true; + }, + error: function () {} + }); + }; + + // add-bubble... + $('body').delegate('.add-bubble', 'click', function () { + var curRow = $(this).parents('tr'); + var nextRow = curRow.next('tr'); + if (nextRow.hasClass('inline-comments') && nextRow.css('display') != 'none') { + nextRow.hide(); + } else { + openCommentForm(curRow); + } + }); + + // `add a line note` + $('body').delegate( + '.js-show-inline-comment-form', 'click', function () { + var curRow = $(this).parents('tr').prev('tr'); + openCommentForm(curRow); + }); + + // linecomment delete + $('body').delegate('.inline-comments .delete-button', 'click', function (e) { + if (!confirm('Are you sure you want to delete this?')) { + return false; + } + var comment = $(this).parents('.comment'); + $.getJSON( + $(this).attr('href'), + function(r) { + // FIXME: global row? + if (r.r == '1') + var row = comment.parents('tr'); + if (comment.siblings('.comment').length || + row.find('.inline-comment-form').length) { + comment.remove(); + } else { + row.remove(); + } + } + ); + return false; + }); + + // comment & linecomment edit + $('body').delegate('.js-comment-edit-button', 'click', function (e) { + var form_content = $(this).parents('.comment-header') + .next('.comment-content') + .children('.form-content'); + if (form_content != undefined) { + form_content.show().find('textarea').focus(); + form_content.find('form.js-comment-update').ajaxForm({ + dataType: 'json', + beforeSend: function() { + form_content.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + if (form_content.find('textarea').attr('name') === 'pull_request_review_comment'){ + form_content.parents('.js-comments-holder').append(r.html); + form_content.parents('.comment').remove(); + } else { + var comment = form_content.parents('.change'); + var avatar = comment.prev('.side-avatar'); + form_content.parents('#changelog').append(r.html); + comment.remove(); + avatar.remove(); + } + } + return true; + } + }); + } else { + return false; + } + }); + + // show linecomments toggle + $('body').delegate('.file .js-show-inline-comments-toggle', 'change', function () { + var comments = $(this).parents('.file').find('.inline-comments'); + if ($(this).is(':checked')) { + comments.show(); + } else { + comments.hide(); + } + }); + + // generated file toggle + $('body').delegate('.file a.generated', 'click', function() { + var file = $(this).parents('.file'); + var inline = file.children('.inline').show(); + $(this).hide(); + }); + + // patch side diff toggle + $('body').delegate('.file .js-side-diff', 'click', function () { + var file = $(this).parents('.file'); + file.find('a.generated').hide(); + if (file.children('.side').css('display') === 'none' && + file.children('.inline').css('display') === 'none'){ + file.children('.inline').show(); + }else { + var inline = file.children('.inline').toggle(); + var side = file.children('.side').toggle(); + var checkbox = file.find('.js-show-inline-comments-toggle'); + if (file.children('.side').css('display') != 'none') { + checkbox.attr('checked', false); + side.find('.inline-comments').hide(); + } + else { + checkbox.attr('checked', true); + } + } + }); + + // diff patch fullscreen toggle + $('body').delegate('.file .js-fullscreen', 'click', function () { + var fullscreenStage = $('#fullscreen-stage'); + if (fullscreenStage.length == 0) { + var files = $(this).parents('#files'); + fullscreenStage = $('
    ').appendTo(files); + } + if (fullscreenStage.is(":visible")) { + fullscreenStage.hide(); + $('body').removeClass('fullscreen-mode'); + } else { + var file = $(this).parents('.file'); + fullscreenStage.html(file.clone()).show(); + $('body').addClass('fullscreen-mode'); + fullscreenStage.find('.file .js-fullscreen').text('Exit Full Screen'); + } + }); + + // dblclick open linecomment form + var clearSelection = function () { + if (window.getSelection) { + if (window.getSelection().empty) { // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { // IE? + document.selection.empty(); + } + } + $('body').delegate('.js-open-comment-form.dblclick-comment', 'dblclick', function () { + clearSelection(); + var curRow = $(this).parents('tr'); + openCommentForm(curRow); + }); + + //////////////////// moreline get_contexts + + // moreline + $('body').delegate('pre.skipped a', 'click', function() { + var curRow = $(this).parents('tr'); + var patch_data = curRow.parents('.file').children('.meta').find('.patch-data'); + var data = curRow.find('.expand-data'); + var url = patch_data.attr('data-context-url'); + $.get( + url, + { + old_sha : patch_data.attr('data-old-sha'), + old_path : patch_data.attr('data-old-path'), + old_start : data.attr('data-old-start'), + new_start : data.attr('data-new-start'), + old_end : data.attr('data-old-end'), + new_end : data.attr('data-new-end'), + type : $(this).attr('data-type'), + }, + function (r) { + curRow.after(r.html); + if (r.html.trim()) { + curRow.remove(); + } + } + ); + }); + + // full diff + $('body').delegate('.ellipsis', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj + }, + function(r){ + table.find('tbody').html(r.html); + }); + }); + + // TODO: modify this, after refactor diff api + // toggle whitespace diff + $('body').delegate('.toggle_whitespace', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + var whitespace = $this.attr('data-w'); + + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj, + w: whitespace + }, + function(r){ + table.find('tbody').html(r.html); + $this.attr('data-w', (1 - parseInt(whitespace)).toString()); + }); + }); + + //////////////////// no use ?? + function convertDiff(name, table, pre) { + var inline = $(table).hasClass('inline'); + var ths = table.tHead.rows[0].cells; + var afile, bfile; + if ( inline ) { + afile = ths[0].title; + bfile = ths[1].title; + } else { + afile = $(ths[0]).find('a').text(); + bfile = $(ths[1]).find('a').text(); + } + if ( afile.match(/^Revision /) ) { + afile = 'a/' + name; + bfile = 'b/' + name; + } + var lines = [ + "Index: " + name, + "===================================================================", + "--- " + afile.replace(/File /, ''), + "+++ " + bfile.replace(/File /, ''), + ]; + var sepIndex = 0; + var oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + var title = ""; + if (inline) + title = $(ths[2]).text(); + for (var i = 0; i < table.tBodies.length; i++) { + var tBody = table.tBodies[i]; + if (i == 0 || tBody.className == "skipped") { + if (i > 0) { + if (!oldOffset && oldLength) oldOffset = 1 + if (!newOffset && newLength) newOffset = 1 + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + } + sepIndex = lines.length; + lines.push("@@ -{1},{2} +{3},{4} @@{5}"); + oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + if (tBody.className == "skipped") { + if (inline) + title = $(tBody.rows[0].cells[2]).text(); + continue; + } + } + var tmpLines = []; + for (var j = 0; j < tBody.rows.length; j++) { + var cells = tBody.rows[j].cells; + var oldLineNo = parseInt($(cells[0]).text()); + var newLineNo = parseInt($(cells[inline ? 1 : 2]).text()); + if (tBody.className == 'unmod') { + lines.push(" " + $(cells[inline ? 2 : 1]).text()); + oldLength += 1; + newLength += 1; + if (!oldOffset) oldOffset = oldLineNo; + if (!newOffset) newOffset = newLineNo; + } else { + var oldLine; + var newLine; + var oldTag = "-"; + var newTag = "+"; + if (inline) { + oldLine = newLine = $(cells[2]).text(); + if ($('em', cells[2]).length) oldTag = newTag = "\\"; + } else { + oldLine = $(cells[1]).text(); + if ($('em', cells[1]).length) oldTag = "\\"; + newLine = $(cells[3]).text(); + if ($('em', cells[3]).length) newTag = "\\"; + } + if (!isNaN(oldLineNo)) { + lines.push(oldTag + oldLine); + oldLength += 1; + } + if (!isNaN(newLineNo)) { + tmpLines.push(newTag + newLine); + newLength += 1; + } + } + } + if (tmpLines.length > 0) { + lines = lines.concat(tmpLines); + } + } + if (!oldOffset && oldLength) oldOffset = 1; + if (!newOffset && newLength) newOffset = 1; + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + /* remove trailing   and join lines (with CR for IExplorer) */ + var sep = $.browser.msie ? "\r" : "\n"; + for ( var i = 0; i < lines.length; i++ ) + if ( lines[i] ) + { + var line = lines[i].replace(/\xa0$/, '') + sep; + if ( lines[i][0] == '+' ) + pre.append($('').text(line)); + else if ( lines[i][0] == '-' ) + pre.append($('').text(line)); + else + pre.append($('').text(line)); + } + } + // no use ?? + $("div.diff h2").each(function() { + console.log('call div.diff h2 !!!'); + var switcher = $("").prependTo(this); + var name = $.trim($(this).text()); + var table = $(this).siblings("table").get(0); + if (! table) return; + var pre = $('
    ').hide().insertAfter(table);
    +          $("" + _("Tabular") + "").click(function() {
    +            $(pre).hide();
    +            $(table).show();
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).addClass("active").appendTo(switcher);
    +          $("" + _("Unified") + "").click(function() {
    +            $(table).hide();
    +            if (!pre.get(0).firstChild) convertDiff(name, table, pre);
    +            $(pre).fadeIn("fast")
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).appendTo(switcher);
    +        });
    +
    +
    +        colorcube.init({target:'body'});
    +});
    +
    +/* @source mod/watch.js */;
    +
    +define('mod/watch', [
    +  "jquery"
    +], function($){
    +
    +  $(function() {
    +    var watch_btn = $("#watch-btn");
    +    var countLabel = $('#watched-count');
    +    var proj_id = watch_btn.attr("proj_id");
    +
    +    var updateLabelBy = function (n) {
    +        var count = Number(countLabel.text()) || 0;
    +        if (count === 0 && n <= 0) { return; }
    +
    +        count += n;
    +        countLabel.text(count.toString());
    +    };
    +
    +    watch_btn.click(function() {
    +
    +      if(watch_btn.hasClass('watch')) {
    +        $.post("/watch/"+proj_id, function(data) {
    +          if (!data.error) {
    +            watch_btn.text('Unwatch');
    +            watch_btn.addClass('unwatch');
    +            watch_btn.removeClass('watch');
    +            updateLabelBy(1);
    +          } else {
    +            // show error notification to user
    +            show_error("关注失败");
    +          }
    +        });
    +      }
    +      else{
    +        $.ajax("/watch/"+proj_id, {
    +          type: "DELETE",
    +          success: function(data) {
    +            if (!data.error) {
    +              watch_btn.text('Watch');
    +              watch_btn.addClass('watch');
    +              watch_btn.removeClass('unwatch');
    +              updateLabelBy(-1);
    +            } else {
    +              show_error("取消关注失败");
    +            }
    +          },
    +          error: function(e) {
    +            show_error("取消关注失败");
    +          }
    +        });
    +      }
    +    });
    +
    +    function show_success(msg) {
    +        var successDiv = $(".navbar .success");
    +        if (successDiv.size() === 0 ) {
    +            successDiv= $("
    ").addClass("success").addClass("alert-success"); + $("div.navbar").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(1500, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("
    ").addClass("error").addClass("alert-error"); + $("div.navbar").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); + +/* @source */; + +define('mousetrap', 'lib/mousetrap.js'); + +require( + ['jquery' + , 'mod/input-ext' + , 'jquery-caret' + , 'jquery-atwho' + , 'jquery-timeago' + , 'bootstrap' + , 'mod/watch' + //, 'mod/commit' + , 'mod/diff' // diff js + , 'mousetrap'], + function($, inputExt){ + $(function () { + inputExt.enableZenMode('#pull_body'); + inputExt.enableAutoCompleteFollowingAndTeam('#pull_body'); + + //pull.js + $('.editor-expander').click( + function() { + var $editor = $('.range-editor'); + $('.pull-tabs').css('opacity', $editor.css('display') == 'none' ? 0.45 : 1); + $editor.slideToggle('fast'); + return false; + }); + + var update_preview = function($box) { + var proj_name = $box.find('select').val(); + var url = '/api/' + proj_name + '/git/branches'; + + $.getJSON(url, function(branches){ + $box.find('.typeahead').data('source', branches); + }); + + url = $box.data('preview-url-base') + proj_name + ':' + $box.find('input.js-ref').val(); + $box.find('.commit-preview').load(url); + }; + + $('.range-editor select[name=base_repo]').change( + function() { + var $box = $(this).parents('.chooser-box'); + update_preview($box); + }); + + $('.range-editor input[type=text]').change( + function() { + var $box = $(this).parents('.chooser-box'); + update_preview($box); + }); + + $('#update_commit_range').click( + function() { + var $form = $(this).parents('form'); + $form.attr('action', $(this).data('url')).submit(); + }); + //previewable-comment-form + $('.previewable-comment-form .js-preview-tabs a.preview-tab').on( + 'show', function(e) { + $('#preview_bucket p').html("Loading preview..."); + }).on('shown', function(e) { + var url = $('#preview_bucket .content-body').data('api-url'); + var text = $('#write_bucket textarea').val(); + $('#preview_bucket .content-body').load(url, {text: text}); + }); + + $('.new-pull-request form').submit( + function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + //Google Analytic Events + ga('send', 'event', 'pullrequest', 'create'); + }); + + var uploader = $('#form-file-upload'), + textarea = $('#write_bucket textarea'); + inputExt.enableUpload(uploader, textarea); + + $('a[data-toggle="tab"]').on( + 'shown', function (e) { + if ($(e.target).hasClass('preview-discussion-tab')) { + $('#form-file-upload').show(); + } else { + $('#form-file-upload').hide(); + } + }); + }); + }); diff --git a/dist/js/app/pull/pulls.js b/dist/js/app/pull/pulls.js new file mode 100644 index 0000000..11d2381 --- /dev/null +++ b/dist/js/app/pull/pulls.js @@ -0,0 +1,88 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/watch.js */; + +define('mod/watch', [ + "jquery" +], function($){ + + $(function() { + var watch_btn = $("#watch-btn"); + var countLabel = $('#watched-count'); + var proj_id = watch_btn.attr("proj_id"); + + var updateLabelBy = function (n) { + var count = Number(countLabel.text()) || 0; + if (count === 0 && n <= 0) { return; } + + count += n; + countLabel.text(count.toString()); + }; + + watch_btn.click(function() { + + if(watch_btn.hasClass('watch')) { + $.post("/watch/"+proj_id, function(data) { + if (!data.error) { + watch_btn.text('Unwatch'); + watch_btn.addClass('unwatch'); + watch_btn.removeClass('watch'); + updateLabelBy(1); + } else { + // show error notification to user + show_error("关注失败"); + } + }); + } + else{ + $.ajax("/watch/"+proj_id, { + type: "DELETE", + success: function(data) { + if (!data.error) { + watch_btn.text('Watch'); + watch_btn.addClass('watch'); + watch_btn.removeClass('unwatch'); + updateLabelBy(-1); + } else { + show_error("取消关注失败"); + } + }, + error: function(e) { + show_error("取消关注失败"); + } + }); + } + }); + + function show_success(msg) { + var successDiv = $(".navbar .success"); + if (successDiv.size() === 0 ) { + successDiv= $("
    ").addClass("success").addClass("alert-success"); + $("div.navbar").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(1500, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("
    ").addClass("error").addClass("alert-error"); + $("div.navbar").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); + +/* @source */; + +require(['jquery' +, 'mod/watch'], function($){ + //put your home code here. +}); diff --git a/dist/js/app/search/search.js b/dist/js/app/search/search.js new file mode 100644 index 0000000..a371902 --- /dev/null +++ b/dist/js/app/search/search.js @@ -0,0 +1,44 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +require(['jquery', 'jquery-timeago'], function($, Spinner) { + var fetch = function(data) { + $.post('count', data, function(ret) { + ret = $.parseJSON(ret); + $('.mini-icon-public-repo + .counter').text(ret.repos); + $('.mini-icon-code + .counter').text(ret.codes); + $('.mini-icon-person + .counter').text(ret.users); + $('.mini-icon-doc + .counter').text(ret.docs); + $('.mini-icon-pull + .counter').text(ret.pulls); + $('.mini-icon-issue + .counter').text(ret.issues); + }); + } + $(function() { + var q = $("#command-bar").val(); + var language = $("input[name='language']").val(); + var state = $("input[name='state']").val(); + var doctype = $("input[name='doctype']").val(); + var data = {q:q, language:language, state:state, doctype:doctype}; + fetch(data); + }); + + $('select[name="s"]').change(function() { + $(this).parent().submit(); + }); + + $('#tip').click(function() { + $('#tip-content').toggle(); + }); + + $('a.path-url').each(function (){ + var url = $(this).attr('href'); + $(this).parents('.public').find('.linenodiv a').each(function (){ + var href = $(this).attr('href'); + $(this).attr('href', url + href); + }); + }); +}); + diff --git a/dist/js/app/settings/codereview.js b/dist/js/app/settings/codereview.js new file mode 100644 index 0000000..c0f1b1a --- /dev/null +++ b/dist/js/app/settings/codereview.js @@ -0,0 +1,58 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +require(['jquery'], function(){ + var is_enable = 1; + var field = [ + 'dblclick_comment', + ]; + + for(var i = 0; i < field.length; i++){ + $('#' + field[i]).click(function() { + var checkbox = $(this); + if(checkbox.attr("checked") == "checked"){ + is_enable = 1; + }else{ + is_enable = 0; + } + + $.ajax({ + type: 'POST', + data: { + 'field': checkbox.val(), + 'is_enable': is_enable + }, + url: '/settings/codereview/setting', + dataType: 'json', + success: function (ret) { + if(ret.result == 'fail'){ + checkbox.prop("checked", "checked"); + } + } + }); + }); + } + + $('#text_font').on('change', function() { + var select = $(this); + $.ajax({ + type: 'POST', + data: { + 'field': 'text_font', + 'is_enable': select.val() + }, + url: '/settings/codereview/setting', + dataType: 'json', + success: function (ret) { + if(ret.result == 'fail'){ + select.find('option:selected').removeAttr('selected'); + select.find('option[value="' + ret.origin + '"]').attr("selected",true); + } + } + }); + }); +}); + diff --git a/dist/js/app/settings/notification.js b/dist/js/app/settings/notification.js new file mode 100644 index 0000000..9572e43 --- /dev/null +++ b/dist/js/app/settings/notification.js @@ -0,0 +1,42 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +require(['jquery'], function(){ + var is_on = 1; + var notifications_meta = ['participating_email', + 'participating_irc', + 'participating_web', + 'watching_email', + 'watching_irc', + 'watching_web']; + + for(var i = 0; i < notifications_meta.length; i++){ + $('#' + notifications_meta[i]).click(function() { + var checkbox = $(this); + if(checkbox.attr("checked") == "checked"){ + is_on = 1; + }else{ + is_on = 0; + } + + $.ajax({ + type: 'POST', + data: { + 'notifications_meta': checkbox.val(), + 'is_on': is_on + }, + url: '/settings/notification/setting', + dataType: 'json', + success: function (ret) { + if(ret.result == 'fail'){ + checkbox.prop("checked", "checked"); + } + } + }); + }); + } +}); + diff --git a/dist/js/app/src/commit.js b/dist/js/app/src/commit.js new file mode 100644 index 0000000..7bceb9c --- /dev/null +++ b/dist/js/app/src/commit.js @@ -0,0 +1,6147 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/zclip.js */; + +define('mod/zclip', [ + "jquery", + "jquery-zclip" +], function($, _) { + $(function () { + $('input.git-url').focus(function(e) { + var elem = this; + setTimeout(function() { + elem.select(); + }, 0); + }); + $('.copy-git-url').zclip({ + path: '/static/js/lib/ZeroClipboard.swf', + copy: function() { + return $('.copy-git-url').attr('data-clipboard-text'); + }, + afterCopy: function() {} + }); + }); +}); + +/* @source mod/colorcube.js */; + +define("mod/colorcube", + [ + "jquery" +], + function ($) { + var colorcube = {}, cubeWnd; + var showCubeWnd = function (el) { + el = $(el); + if (!cubeWnd) { + cubeWnd = $('
    ').appendTo('body'); + } + var pos = el.offset(); + pos = {top:pos.top - 40, left:pos.left + el.width()/2 -15}; + cubeWnd.show().offset(pos).css({'background-color':el.data('color')}); + }; + colorcube.init = function (opts) { + if (opts.target) { + $(opts.target).delegate( + '.line .color', 'mouseenter mouseleave', function (e) { + if (e.type === 'mouseenter') { + showCubeWnd(this); + } else { + cubeWnd.hide(); + } + }); + } + }; + return colorcube; + } +); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source mod/diff.js */; + +define('mod/diff', [ + "jquery", + "mod/input-ext", + "mod/liveupdate", + "mod/colorcube" +], function ($, inputExt, live, colorcube) { + + //////////////////// linecomment + + // comment form + var hideCommentForm = function () { + $('.inline-comment-form').hide().closest('tr').removeClass('show-inline-comment-form'); + $('.inline-comment-form').each( + function (idx, el) { + if (!$(el).siblings('.comment-holder').children('.comment').length) { + $(el).parents('tr').hide(); + } + } + ); + }; + var openCommentForm = function (curRow) { + hideCommentForm(); + var nextRow = curRow.next('tr'); + // if no comments on curRow yet + if (!nextRow.length || !nextRow.hasClass('inline-comments')) { + nextRow = $.tmpl($('#templ-inline-comments-row'), {}).insertAfter(curRow); + } + // if side by side... plz refactor this + var file = curRow.parents('.file'); + if ((file.children('.side')).length != 0 && file.children('.side').css('display') != 'none') { + $(nextRow.children()[0]).attr('colspan', 1); + } + nextRow.show().addClass('show-inline-comment-form'); + var commentsBlock = nextRow.children('.line-comments'), + commentForm = commentsBlock.find('.inline-comment-form'); + // if no commentForm on nextRow yet + if (!commentForm.length) { + // get form-data + var patch_data = file.children('.meta').find('.patch-data'); + var line_data = curRow.find('.line-data'); + var data = { + from_sha: patch_data.attr('data-from-sha'), + old_path: patch_data.attr('data-old-path'), + new_path: patch_data.attr('data-new-path'), + from_oid: patch_data.attr('data-from-oid'), + to_oid: patch_data.attr('data-to-oid'), + old_no: line_data.attr('data-old'), + new_no: line_data.attr('data-new'), + }; + commentForm = $.tmpl($('#templ-inline-comment-form'), data).appendTo(commentsBlock); + commentForm.find('.js-hide-inline-comment-form').click( + function () { + hideCommentForm(); + } + ).end().find('form').submit( + function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + return true; + } + ); + var commentTexarea = commentForm.find('textarea'); + inputExt.enableEmojiInput(commentTexarea); + inputExt.shortcut2submit(commentTexarea); + } + commentForm.show().find('textarea').focus(); + // codelive channel + var linecomment_channel_id; + if ($('.discussion-tab-link').length > 0) { + linecomment_channel_id = "code_pr_"+$('.discussion-tab-link').attr('data-url') + 'linecomment'; + } + // `comment on this line` + commentForm.find('form.js-inline-comment-form').ajaxForm({ + dataType: 'json', + beforeSend: function () { + commentForm.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + commentForm.siblings('.js-comments-holder').append(r.html); + commentForm.find('textarea').val('').blur(); + hideCommentForm(); + live && linecomment_channel_id && + live.emit('ready', {channel: linecomment_channel_id, msg:r.html_with_diff}); + } else if (r.error){ + alert(r.error); + } + commentForm.find('button[type="submit"]').attr('disabled', false).removeClass('disabled'); + commentForm.find('form.js-inline-comment-form').removeClass('submitting') + .end().find('.loader').hide(); + return true; + }, + error: function () {} + }); + }; + + // add-bubble... + $('body').delegate('.add-bubble', 'click', function () { + var curRow = $(this).parents('tr'); + var nextRow = curRow.next('tr'); + if (nextRow.hasClass('inline-comments') && nextRow.css('display') != 'none') { + nextRow.hide(); + } else { + openCommentForm(curRow); + } + }); + + // `add a line note` + $('body').delegate( + '.js-show-inline-comment-form', 'click', function () { + var curRow = $(this).parents('tr').prev('tr'); + openCommentForm(curRow); + }); + + // linecomment delete + $('body').delegate('.inline-comments .delete-button', 'click', function (e) { + if (!confirm('Are you sure you want to delete this?')) { + return false; + } + var comment = $(this).parents('.comment'); + $.getJSON( + $(this).attr('href'), + function(r) { + // FIXME: global row? + if (r.r == '1') + var row = comment.parents('tr'); + if (comment.siblings('.comment').length || + row.find('.inline-comment-form').length) { + comment.remove(); + } else { + row.remove(); + } + } + ); + return false; + }); + + // comment & linecomment edit + $('body').delegate('.js-comment-edit-button', 'click', function (e) { + var form_content = $(this).parents('.comment-header') + .next('.comment-content') + .children('.form-content'); + if (form_content != undefined) { + form_content.show().find('textarea').focus(); + form_content.find('form.js-comment-update').ajaxForm({ + dataType: 'json', + beforeSend: function() { + form_content.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + if (form_content.find('textarea').attr('name') === 'pull_request_review_comment'){ + form_content.parents('.js-comments-holder').append(r.html); + form_content.parents('.comment').remove(); + } else { + var comment = form_content.parents('.change'); + var avatar = comment.prev('.side-avatar'); + form_content.parents('#changelog').append(r.html); + comment.remove(); + avatar.remove(); + } + } + return true; + } + }); + } else { + return false; + } + }); + + // show linecomments toggle + $('body').delegate('.file .js-show-inline-comments-toggle', 'change', function () { + var comments = $(this).parents('.file').find('.inline-comments'); + if ($(this).is(':checked')) { + comments.show(); + } else { + comments.hide(); + } + }); + + // generated file toggle + $('body').delegate('.file a.generated', 'click', function() { + var file = $(this).parents('.file'); + var inline = file.children('.inline').show(); + $(this).hide(); + }); + + // patch side diff toggle + $('body').delegate('.file .js-side-diff', 'click', function () { + var file = $(this).parents('.file'); + file.find('a.generated').hide(); + if (file.children('.side').css('display') === 'none' && + file.children('.inline').css('display') === 'none'){ + file.children('.inline').show(); + }else { + var inline = file.children('.inline').toggle(); + var side = file.children('.side').toggle(); + var checkbox = file.find('.js-show-inline-comments-toggle'); + if (file.children('.side').css('display') != 'none') { + checkbox.attr('checked', false); + side.find('.inline-comments').hide(); + } + else { + checkbox.attr('checked', true); + } + } + }); + + // diff patch fullscreen toggle + $('body').delegate('.file .js-fullscreen', 'click', function () { + var fullscreenStage = $('#fullscreen-stage'); + if (fullscreenStage.length == 0) { + var files = $(this).parents('#files'); + fullscreenStage = $('
    ').appendTo(files); + } + if (fullscreenStage.is(":visible")) { + fullscreenStage.hide(); + $('body').removeClass('fullscreen-mode'); + } else { + var file = $(this).parents('.file'); + fullscreenStage.html(file.clone()).show(); + $('body').addClass('fullscreen-mode'); + fullscreenStage.find('.file .js-fullscreen').text('Exit Full Screen'); + } + }); + + // dblclick open linecomment form + var clearSelection = function () { + if (window.getSelection) { + if (window.getSelection().empty) { // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { // IE? + document.selection.empty(); + } + } + $('body').delegate('.js-open-comment-form.dblclick-comment', 'dblclick', function () { + clearSelection(); + var curRow = $(this).parents('tr'); + openCommentForm(curRow); + }); + + //////////////////// moreline get_contexts + + // moreline + $('body').delegate('pre.skipped a', 'click', function() { + var curRow = $(this).parents('tr'); + var patch_data = curRow.parents('.file').children('.meta').find('.patch-data'); + var data = curRow.find('.expand-data'); + var url = patch_data.attr('data-context-url'); + $.get( + url, + { + old_sha : patch_data.attr('data-old-sha'), + old_path : patch_data.attr('data-old-path'), + old_start : data.attr('data-old-start'), + new_start : data.attr('data-new-start'), + old_end : data.attr('data-old-end'), + new_end : data.attr('data-new-end'), + type : $(this).attr('data-type'), + }, + function (r) { + curRow.after(r.html); + if (r.html.trim()) { + curRow.remove(); + } + } + ); + }); + + // full diff + $('body').delegate('.ellipsis', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj + }, + function(r){ + table.find('tbody').html(r.html); + }); + }); + + // TODO: modify this, after refactor diff api + // toggle whitespace diff + $('body').delegate('.toggle_whitespace', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + var whitespace = $this.attr('data-w'); + + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj, + w: whitespace + }, + function(r){ + table.find('tbody').html(r.html); + $this.attr('data-w', (1 - parseInt(whitespace)).toString()); + }); + }); + + //////////////////// no use ?? + function convertDiff(name, table, pre) { + var inline = $(table).hasClass('inline'); + var ths = table.tHead.rows[0].cells; + var afile, bfile; + if ( inline ) { + afile = ths[0].title; + bfile = ths[1].title; + } else { + afile = $(ths[0]).find('a').text(); + bfile = $(ths[1]).find('a').text(); + } + if ( afile.match(/^Revision /) ) { + afile = 'a/' + name; + bfile = 'b/' + name; + } + var lines = [ + "Index: " + name, + "===================================================================", + "--- " + afile.replace(/File /, ''), + "+++ " + bfile.replace(/File /, ''), + ]; + var sepIndex = 0; + var oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + var title = ""; + if (inline) + title = $(ths[2]).text(); + for (var i = 0; i < table.tBodies.length; i++) { + var tBody = table.tBodies[i]; + if (i == 0 || tBody.className == "skipped") { + if (i > 0) { + if (!oldOffset && oldLength) oldOffset = 1 + if (!newOffset && newLength) newOffset = 1 + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + } + sepIndex = lines.length; + lines.push("@@ -{1},{2} +{3},{4} @@{5}"); + oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + if (tBody.className == "skipped") { + if (inline) + title = $(tBody.rows[0].cells[2]).text(); + continue; + } + } + var tmpLines = []; + for (var j = 0; j < tBody.rows.length; j++) { + var cells = tBody.rows[j].cells; + var oldLineNo = parseInt($(cells[0]).text()); + var newLineNo = parseInt($(cells[inline ? 1 : 2]).text()); + if (tBody.className == 'unmod') { + lines.push(" " + $(cells[inline ? 2 : 1]).text()); + oldLength += 1; + newLength += 1; + if (!oldOffset) oldOffset = oldLineNo; + if (!newOffset) newOffset = newLineNo; + } else { + var oldLine; + var newLine; + var oldTag = "-"; + var newTag = "+"; + if (inline) { + oldLine = newLine = $(cells[2]).text(); + if ($('em', cells[2]).length) oldTag = newTag = "\\"; + } else { + oldLine = $(cells[1]).text(); + if ($('em', cells[1]).length) oldTag = "\\"; + newLine = $(cells[3]).text(); + if ($('em', cells[3]).length) newTag = "\\"; + } + if (!isNaN(oldLineNo)) { + lines.push(oldTag + oldLine); + oldLength += 1; + } + if (!isNaN(newLineNo)) { + tmpLines.push(newTag + newLine); + newLength += 1; + } + } + } + if (tmpLines.length > 0) { + lines = lines.concat(tmpLines); + } + } + if (!oldOffset && oldLength) oldOffset = 1; + if (!newOffset && newLength) newOffset = 1; + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + /* remove trailing   and join lines (with CR for IExplorer) */ + var sep = $.browser.msie ? "\r" : "\n"; + for ( var i = 0; i < lines.length; i++ ) + if ( lines[i] ) + { + var line = lines[i].replace(/\xa0$/, '') + sep; + if ( lines[i][0] == '+' ) + pre.append($('').text(line)); + else if ( lines[i][0] == '-' ) + pre.append($('').text(line)); + else + pre.append($('').text(line)); + } + } + // no use ?? + $("div.diff h2").each(function() { + console.log('call div.diff h2 !!!'); + var switcher = $("").prependTo(this); + var name = $.trim($(this).text()); + var table = $(this).siblings("table").get(0); + if (! table) return; + var pre = $('
    ').hide().insertAfter(table);
    +          $("" + _("Tabular") + "").click(function() {
    +            $(pre).hide();
    +            $(table).show();
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).addClass("active").appendTo(switcher);
    +          $("" + _("Unified") + "").click(function() {
    +            $(table).hide();
    +            if (!pre.get(0).firstChild) convertDiff(name, table, pre);
    +            $(pre).fadeIn("fast")
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).appendTo(switcher);
    +        });
    +
    +
    +        colorcube.init({target:'body'});
    +});
    +
    +/* @source mod/commit.js */;
    +
    +define('mod/commit', [
    +  "jquery",
    +  "jquery-tmpl",
    +  "jquery-caret",
    +  "jquery-atwho",
    +  "jquery-forms",
    +  "bootstrap",
    +  "mod/input-ext",
    +  "mod/liveupdate"
    +], function ($, _, _, _, _, _, inputExt, live) {
    +    $(function () {
    +
    +        // comment & linecomment edit
    +        $('body').delegate('.js-comment-edit-button', 'click', function (e) {
    +            var form_content = $(this).parents('.comment-header')
    +            .next('.comment-content')
    +            .children('.form-content');
    +            if (form_content != undefined) {
    +                form_content.show().find('textarea').focus();
    +                form_content.find('form.js-comment-update').ajaxForm({
    +                    dataType: 'json',
    +                    beforeSend: function() {
    +                        form_content.find('button[type="submit"]').attr('disabled', true).addClass('disabled')
    +                        .end().find('.loader').show();
    +                    },
    +                    success: function(r) {
    +                        if (r.r == 0 && r.html) {
    +                            if (form_content.find('textarea').attr('name') === 'pull_request_review_comment'){
    +                                form_content.parents('.js-comments-holder').append(r.html);
    +                                form_content.parents('.comment').remove();
    +                            } else {
    +                                var comment = form_content.parents('.change');
    +                                var avatar = comment.prev('.side-avatar');
    +                                form_content.parents('#changelog').append(r.html);
    +                                comment.remove();
    +                                avatar.remove();
    +                            }
    +                        }
    +                        return true;
    +                    }
    +                });
    +            } else {
    +                return false;
    +            }
    +        });
    +
    +        $('body').delegate('.form-content .comment-cancel-button', 'click', function (e) {
    +            var form_content = $(this).parents('.form-content');
    +            if (form_content != undefined) {
    +                form_content.hide();
    +            } else {
    +                return false;
    +            }
    +        });
    +
    +        inputExt.enableEmojiInput($('#new_comment_content'));
    +        inputExt.shortcut2submit($('#new_comment_content'));
    +
    +        $('.tabnav-tabs a').live('click', function () {
    +            $(this).closest('.tabnav-tabs').find('a').removeClass('selected');
    +            $(this).addClass('selected');
    +        });
    +
    +        $('.write-tab').live('click', function () {
    +            var form = $(this).closest('.previewable-comment-form');
    +            $(this).closest('.previewable-comment-form').removeClass('preview-selected').addClass('write-selected');
    +            form.find('#write_bucket').addClass('active').end().find('#preview_bucket').removeClass('active');
    +        });
    +        $('.preview-tab').live('click', function () {
    +            var form = $(this).closest('.previewable-comment-form');
    +            form.removeClass('write-selected').addClass('preview-selected');
    +            form.find('#write_bucket').removeClass('active').end().find('#preview_bucket').addClass('active');
    +            form.find('#preview_bucket p').html("Loading preview...");
    +            var url = form.find('#preview_bucket .content-body').data('api-url'),
    +            text = form.find('#write_bucket textarea').val();
    +            form.find('#preview_bucket .content-body').load(url, {text: text});
    +        });
    +
    +        $('#all-comments .delete-btn').click(function(e) {
    +            e.preventDefault();
    +            if (!confirm("Are you sure you want to delete this comment?")) {
    +                return;
    +            }
    +            // FIXME: global orig?
    +            orig = this;
    +            $.ajax({
    +                url: this.href,
    +                type: 'delete',
    +                dataType: 'json',
    +                success: function(resp) {
    +                    $(orig).parents('.comment-row').slideUp('fast');
    +                },
    +                error: function(resp) {
    +                    alert("Unable to delete comment");
    +                    console.log(resp);
    +                }
    +            });
    +        });
    +        $(".give_beer").click(function(e) {
    +            if (!$("#new_comment_content")[0].value) {
    +                $("#new_comment_content")[0].value = ":beer:";
    +            }
    +            $("#new_comment_content").focus();
    +        });
    +        $(document).delegate('#toc .minibutton', 'click', function() {
    +            $('#toc .content').toggle();
    +        });
    +        $(".comment-popover").popover({placement:'left'});
    +
    +
    +        var cform = $('#new_comment');
    +        cform.submit(function () {
    +            $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled');
    +            return true;
    +        });
    +
    +    });
    +});
    +
    +/* @source lib/jquery.caret.js */;
    +
    +
    +/*
    +   Implement Twitter/Weibo @ mentions
    +
    +   Copyright (c) 2012 chord.luo@gmail.com
    +
    +   Permission is hereby granted, free of charge, to any person obtaining
    +   a copy of this software and associated documentation files (the
    +   "Software"), to deal in the Software without restriction, including
    +   without limitation the rights to use, copy, modify, merge, publish,
    +   distribute, sublicense, and/or sell copies of the Software, and to
    +   permit persons to whom the Software is furnished to do so, subject to
    +   the following conditions:
    +
    +   The above copyright notice and this permission notice shall be
    +   included in all copies or substantial portions of the Software.
    +
    +   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +*/
    +
    +/*
    +本插件操作 textarea 或者 input 内的插入符
    +只实现了获得插入符在文本框中的位置,以及设置
    +插入符的位置.
    +*/
    +
    +(function() {
    +
    +  (function($) {
    +    var getCaretPos, setCaretPos;
    +    getCaretPos = function(inputor) {
    +      var end, endRange, len, normalizedValue, pos, range, start, textInputRange;
    +      if (document.selection) {
    +        /*
    +                    #assume we select "HATE" in the inputor such as textarea -> { }.
    +                     *               start end-point.
    +                     *              /
    +                     * <  I really [HATE] IE   > between the brackets is the selection range.
    +                     *                   \
    +                     *                    end end-point.
    +        */
    +        range = document.selection.createRange();
    +        pos = 0;
    +        if (range && range.parentElement() === inputor) {
    +          normalizedValue = inputor.value.replace(/\r\n/g, "\n");
    +          /* SOMETIME !!! 
    +           "/r/n" is counted as two char.
    +            one line is two, two will be four. balalala.
    +            so we have to using the normalized one's length.;
    +          */
    +          len = normalizedValue.length;
    +          /*
    +                             <[  I really HATE IE   ]>:
    +                              the whole content in the inputor will be the textInputRange.
    +          */
    +          textInputRange = inputor.createTextRange();
    +          /*                 _here must be the position of bookmark.
    +                           /
    +             <[  I really [HATE] IE   ]>
    +              [---------->[           ] : this is what moveToBookmark do.
    +             <   I really [[HATE] IE   ]> : here is result.
    +                            \ two brackets in should be in line.
    +          */
    +          textInputRange.moveToBookmark(range.getBookmark());
    +          endRange = inputor.createTextRange();
    +          /*  [--------------------->[] : if set false all end-point goto end.
    +            <  I really [[HATE] IE  []]>
    +          */
    +          endRange.collapse(false);
    +          /*
    +                                          ___VS____
    +                                         /         \
    +                           <   I really [[HATE] IE []]>
    +                                                    \_endRange end-point.
    +                          
    +                          " > -1" mean the start end-point will be the same or right to the end end-point
    +                         * simplelly, all in the end.
    +          */
    +          if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
    +            start = end = len;
    +          } else {
    +            /*
    +                                        I really |HATE] IE   ]> 
    +                                               <-|
    +                                      I really[ [HATE] IE   ]>
    +                                            <-[
    +                                    I reall[y  [HATE] IE   ]>
    +                                 
    +                                  will return how many unit have moved.
    +            */
    +            start = -textInputRange.moveStart("character", -len);
    +            end = -textInputRange.moveEnd("character", -len);
    +          }
    +        }
    +      } else {
    +        start = inputor.selectionStart;
    +      }
    +      return start;
    +    };
    +    setCaretPos = function(inputor, pos) {
    +      var range;
    +      if (document.selection) {
    +        range = inputor.createTextRange();
    +        range.move("character", pos);
    +        return range.select();
    +      } else {
    +        return inputor.setSelectionRange(pos, pos);
    +      }
    +    };
    +    return $.fn.caretPos = function(pos) {
    +      var inputor;
    +      inputor = this[0];
    +      inputor.focus();
    +      if (pos) {
    +        return setCaretPos(inputor, pos);
    +      } else {
    +        return getCaretPos(inputor);
    +      }
    +    };
    +  })(window.jQuery);
    +
    +}).call(this);
    +
    +/* autogeneration */
    +define("lib/jquery.caret", [], function(){});
    +
    +/* @source mod/quick_emoji.js */;
    +
    +define("mod/quick_emoji", [
    +  "jquery",
    +  "lib/jquery.caret",
    +  "bootstrap"
    +],
    +        function($) {
    +            var quick_emoji = {};
    +            quick_emoji.enable = function(textarea_query){
    +                $('body').delegate('.quick-emoji a', 'click', function(e){
    +                    var emoji = $(this).attr('data-emoji');
    +                    if(emoji){
    +                        textarea = $(textarea_query);
    +                        var caretpos = textarea.caretPos();
    +                        var content = textarea.val();
    +                        var result = "";
    +                        if(content) {
    +                            result = content.slice(0, caretpos) + ' ' +
    +                                emoji + ' ' + content.slice(caretpos);
    +                            textarea.val(result);
    +                            textarea.caretPos(caretpos + emoji.length + 2);
    +                        }
    +                        else {
    +                            result = emoji;
    +                            textarea.val(result);
    +                            textarea.caretPos(result.length);
    +                        }
    +                    }
    +                    return false;
    +                });
    +
    +                $('body').delegate('.emojis a', 'hover', function(e){
    +                    var $zoomDiv = $('.zoom');
    +                    if (e.type == "mouseenter") {
    +                        var $emojiUrl = $(this).find('img').attr('src');
    +                        var $zoomImage = $('.zoom-image');
    +                        var $tabContent = $('.tab-content');
    +                        $zoomImage.attr('src', $emojiUrl);
    +                        $zoomDiv.css({'display': 'block'});
    +                    } else {
    +                        $zoomDiv.css({'display': 'none'});
    +                    }
    +                });
    +            }
    +                return quick_emoji;
    +            });
    +
    +/* @source  */;
    +
    +define('mousetrap', 'lib/mousetrap.js');
    +
    +require(['mod/quick_emoji'
    +, 'mousetrap'
    +, 'mod/commit'
    +, 'mod/diff'  // diff js
    +, 'mod/zclip' ], function(quick_emoji){
    +    quick_emoji.enable("#new_comment_content");
    +});
    diff --git a/dist/js/app/src/compare.js b/dist/js/app/src/compare.js
    new file mode 100644
    index 0000000..137e825
    --- /dev/null
    +++ b/dist/js/app/src/compare.js
    @@ -0,0 +1,5928 @@
    +
    +require.config({ enable_ozma: true });
    +
    +
    +/* @source mod/colorcube.js */;
    +
    +define("mod/colorcube", 
    +    [
    +  "jquery"
    +],
    +    function ($) {
    +        var colorcube = {}, cubeWnd;
    +        var showCubeWnd = function (el) {
    +            el = $(el);
    +            if (!cubeWnd) {
    +                cubeWnd = $('
    ').appendTo('body'); + } + var pos = el.offset(); + pos = {top:pos.top - 40, left:pos.left + el.width()/2 -15}; + cubeWnd.show().offset(pos).css({'background-color':el.data('color')}); + }; + colorcube.init = function (opts) { + if (opts.target) { + $(opts.target).delegate( + '.line .color', 'mouseenter mouseleave', function (e) { + if (e.type === 'mouseenter') { + showCubeWnd(this); + } else { + cubeWnd.hide(); + } + }); + } + }; + return colorcube; + } +); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 + is released under the MIT License +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write(''); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/input-ext.js */; + +define('mousetrap', 'lib/mousetrap.js'); + +define("mod/input-ext", + [ + "jquery", + "mod/user_following", + "jquery-caret", + "jquery-atwho", + "mousetrap", + "lib/zen-form" +], + function ($, userFollowing) { + var inputExt = {}; + var emojis = [ + 'airplane', 'alien', 'art', 'bear', 'beer', 'bike', 'bomb', 'book', + 'bulb', 'bus', 'cake', 'calling', 'clap', 'cocktail', 'code', 'computer', + 'cool', 'cop', 'email', 'feet', 'fire', 'fish', 'fist', 'gift', 'hammer', + 'heart', 'iphone', 'key', 'leaves', 'lgtm', 'lipstick', 'lock', 'mag', 'mega', + 'memo', 'moneybag', 'new', 'octocat', 'ok', 'palm_tree', 'pencil', 'punch', + 'runner', 'scissors', 'ship', 'shipit', 'ski', 'smile', 'smoking', 'sparkles', + 'star', 'sunny', 'taxi', 'thumbsdown', 'thumbsup', 'tm', 'tophat', 'train', + 'trollface', 'v', 'vs', 'warning', 'wheelchair', 'zap', 'zzz', 'see_no_evil', + 'hear_no_evil', 'speak_no_evil', 'monkey', 'monkey_face', 'manybeers', 'beers', + 'hhkb', 'ruby' + ], emoji_list = $.map(emojis, function(value, i) {return {key: value + ':', name:value};}); + inputExt.enableEmojiInput = function (el) { + el.atwho('(?:^|\\s):', + {data:emoji_list, limit:7, + tpl:'
  • ${name}
  • '}); + return el; + }; + + inputExt.enableAutoCompleteFollowingAndTeam = function (el) { + var teams = JSON.parse($('#all-teams').val() || '[]'); + var users = teams.concat(userFollowing.val()); + + $(el).atwho("@", { + data: users, + limit: 7 + }); + }; + + // 输入#自动提示pr信息 + inputExt.enablePullsInput = function (el) { + var projectName = el.attr('data-project-name'); + if (!projectName) return el; + $.getJSON('/' + projectName + '/pulls/all_data', function (r) { + var pulls = $.map( + r, function(value, i) { + return {key: value.id, name:value.id + ' ' + value.title, title:value.title}; + }); + el.atwho('(?:^|\\s)#', + {data:pulls, limit:7, + tpl:'
  • #${key} ${title}
  • '}); + }); + return el; + }; + + inputExt.shortcut2submit = function (el) { + Mousetrap.bind( + ['command+enter', 'ctrl+enter'], + function (e) { + if (el && (e.srcElement || e.target) == $(el)[0] && !$(el).closest('form').hasClass('submitting')) { + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + $(el).closest('form').addClass('submitting').submit(); + } + }, + 'keydown' + ); + }; + + // 进入全屏模式 + inputExt.enableZenMode = function (el) { + var trigger = '.go-zen'; + el = $(el); + el.zenForm({trigger:trigger, theme:'light'}).dblclick(function(e) { + if (!e.altKey) return; + $(this).zenForm({ trigger: null, theme: 'light' }); + fix(); + }); + + $(trigger).click(fix); + + function fix() { + var textarea = $('.zen-forms-input-wrap textarea'); + if (textarea) { + inputExt.enableEmojiInput(textarea); + textarea.attr({ + 'data-project-name': el.attr('data-project-name'), + 'placeholder': el.attr('placeholder') + }); + + inputExt.enablePullsInput(textarea); + + var participants = $('#participants').val(); + if (participants) { + participants = JSON.parse(participants); + textarea.atwho("@", {data:participants, limit:7}); + } + + // 因为zen-form设置的z-index非常高(99999)所以将at-view调更高 + $('#at-view').css('z-index', 100000); + } + } + }; + + var focusToEnd = function(els) { + return $(els).each(function() { + var v = $(this).val(); + $(this).focus().val("").val(v); + }); + }; + + inputExt.enableQuickQuotes = function (el) { + Mousetrap.bind( + ['r'], + function (e) { + var oldVal = $(el).val(), newVal, selVal = window.getSelection().toString(); + selVal = '> ' + selVal.split('\n').join('\n> '); + newVal = oldVal.concat((oldVal != '') ? '\n\n':'', selVal, '\n\n'); + $("html, body").animate({scrollTop: $(document).height()}, "slow"); + $(el).val(newVal); + focusToEnd(el); + }, + 'keyup' + ); + }; + + inputExt.enableFileUpload = function (uploader, textarea, is_image) { + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + type: 'POST', + delegation: true, + success: function(r) { + var oldText = textarea.val(), + newText = oldText + + (oldText.length == 0 ? '' : '\n') + + (is_image? '!' : '') + + '[' + r.origin_filename + '](' + r.url + ')'; + textarea.val(newText); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + + uploader.find('input').change(function () { + uploader.submit(); + }); + }; + + inputExt.enableImageUpload = function (uploader, textarea) { + inputExt.enableFileUpload(uploader,textarea, true); + }; + + inputExt.enableUpload = function(upload_widget,textarea){ + inputExt.enableImageUpload(upload_widget.find(".upload-image-form"),textarea); + inputExt.enableFileUpload(upload_widget.find(".upload-file-form"),textarea); + }; + + return inputExt; + } +); + +/* @source mod/diff.js */; + +define('mod/diff', [ + "jquery", + "mod/input-ext", + "mod/liveupdate", + "mod/colorcube" +], function ($, inputExt, live, colorcube) { + + //////////////////// linecomment + + // comment form + var hideCommentForm = function () { + $('.inline-comment-form').hide().closest('tr').removeClass('show-inline-comment-form'); + $('.inline-comment-form').each( + function (idx, el) { + if (!$(el).siblings('.comment-holder').children('.comment').length) { + $(el).parents('tr').hide(); + } + } + ); + }; + var openCommentForm = function (curRow) { + hideCommentForm(); + var nextRow = curRow.next('tr'); + // if no comments on curRow yet + if (!nextRow.length || !nextRow.hasClass('inline-comments')) { + nextRow = $.tmpl($('#templ-inline-comments-row'), {}).insertAfter(curRow); + } + // if side by side... plz refactor this + var file = curRow.parents('.file'); + if ((file.children('.side')).length != 0 && file.children('.side').css('display') != 'none') { + $(nextRow.children()[0]).attr('colspan', 1); + } + nextRow.show().addClass('show-inline-comment-form'); + var commentsBlock = nextRow.children('.line-comments'), + commentForm = commentsBlock.find('.inline-comment-form'); + // if no commentForm on nextRow yet + if (!commentForm.length) { + // get form-data + var patch_data = file.children('.meta').find('.patch-data'); + var line_data = curRow.find('.line-data'); + var data = { + from_sha: patch_data.attr('data-from-sha'), + old_path: patch_data.attr('data-old-path'), + new_path: patch_data.attr('data-new-path'), + from_oid: patch_data.attr('data-from-oid'), + to_oid: patch_data.attr('data-to-oid'), + old_no: line_data.attr('data-old'), + new_no: line_data.attr('data-new'), + }; + commentForm = $.tmpl($('#templ-inline-comment-form'), data).appendTo(commentsBlock); + commentForm.find('.js-hide-inline-comment-form').click( + function () { + hideCommentForm(); + } + ).end().find('form').submit( + function () { + $(this).find('button[type="submit"]').attr('disabled', true).addClass('disabled'); + return true; + } + ); + var commentTexarea = commentForm.find('textarea'); + inputExt.enableEmojiInput(commentTexarea); + inputExt.shortcut2submit(commentTexarea); + } + commentForm.show().find('textarea').focus(); + // codelive channel + var linecomment_channel_id; + if ($('.discussion-tab-link').length > 0) { + linecomment_channel_id = "code_pr_"+$('.discussion-tab-link').attr('data-url') + 'linecomment'; + } + // `comment on this line` + commentForm.find('form.js-inline-comment-form').ajaxForm({ + dataType: 'json', + beforeSend: function () { + commentForm.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + commentForm.siblings('.js-comments-holder').append(r.html); + commentForm.find('textarea').val('').blur(); + hideCommentForm(); + live && linecomment_channel_id && + live.emit('ready', {channel: linecomment_channel_id, msg:r.html_with_diff}); + } else if (r.error){ + alert(r.error); + } + commentForm.find('button[type="submit"]').attr('disabled', false).removeClass('disabled'); + commentForm.find('form.js-inline-comment-form').removeClass('submitting') + .end().find('.loader').hide(); + return true; + }, + error: function () {} + }); + }; + + // add-bubble... + $('body').delegate('.add-bubble', 'click', function () { + var curRow = $(this).parents('tr'); + var nextRow = curRow.next('tr'); + if (nextRow.hasClass('inline-comments') && nextRow.css('display') != 'none') { + nextRow.hide(); + } else { + openCommentForm(curRow); + } + }); + + // `add a line note` + $('body').delegate( + '.js-show-inline-comment-form', 'click', function () { + var curRow = $(this).parents('tr').prev('tr'); + openCommentForm(curRow); + }); + + // linecomment delete + $('body').delegate('.inline-comments .delete-button', 'click', function (e) { + if (!confirm('Are you sure you want to delete this?')) { + return false; + } + var comment = $(this).parents('.comment'); + $.getJSON( + $(this).attr('href'), + function(r) { + // FIXME: global row? + if (r.r == '1') + var row = comment.parents('tr'); + if (comment.siblings('.comment').length || + row.find('.inline-comment-form').length) { + comment.remove(); + } else { + row.remove(); + } + } + ); + return false; + }); + + // comment & linecomment edit + $('body').delegate('.js-comment-edit-button', 'click', function (e) { + var form_content = $(this).parents('.comment-header') + .next('.comment-content') + .children('.form-content'); + if (form_content != undefined) { + form_content.show().find('textarea').focus(); + form_content.find('form.js-comment-update').ajaxForm({ + dataType: 'json', + beforeSend: function() { + form_content.find('button[type="submit"]').attr('disabled', true).addClass('disabled') + .end().find('.loader').show(); + }, + success: function(r) { + if (r.r == 0 && r.html) { + if (form_content.find('textarea').attr('name') === 'pull_request_review_comment'){ + form_content.parents('.js-comments-holder').append(r.html); + form_content.parents('.comment').remove(); + } else { + var comment = form_content.parents('.change'); + var avatar = comment.prev('.side-avatar'); + form_content.parents('#changelog').append(r.html); + comment.remove(); + avatar.remove(); + } + } + return true; + } + }); + } else { + return false; + } + }); + + // show linecomments toggle + $('body').delegate('.file .js-show-inline-comments-toggle', 'change', function () { + var comments = $(this).parents('.file').find('.inline-comments'); + if ($(this).is(':checked')) { + comments.show(); + } else { + comments.hide(); + } + }); + + // generated file toggle + $('body').delegate('.file a.generated', 'click', function() { + var file = $(this).parents('.file'); + var inline = file.children('.inline').show(); + $(this).hide(); + }); + + // patch side diff toggle + $('body').delegate('.file .js-side-diff', 'click', function () { + var file = $(this).parents('.file'); + file.find('a.generated').hide(); + if (file.children('.side').css('display') === 'none' && + file.children('.inline').css('display') === 'none'){ + file.children('.inline').show(); + }else { + var inline = file.children('.inline').toggle(); + var side = file.children('.side').toggle(); + var checkbox = file.find('.js-show-inline-comments-toggle'); + if (file.children('.side').css('display') != 'none') { + checkbox.attr('checked', false); + side.find('.inline-comments').hide(); + } + else { + checkbox.attr('checked', true); + } + } + }); + + // diff patch fullscreen toggle + $('body').delegate('.file .js-fullscreen', 'click', function () { + var fullscreenStage = $('#fullscreen-stage'); + if (fullscreenStage.length == 0) { + var files = $(this).parents('#files'); + fullscreenStage = $('
    ').appendTo(files); + } + if (fullscreenStage.is(":visible")) { + fullscreenStage.hide(); + $('body').removeClass('fullscreen-mode'); + } else { + var file = $(this).parents('.file'); + fullscreenStage.html(file.clone()).show(); + $('body').addClass('fullscreen-mode'); + fullscreenStage.find('.file .js-fullscreen').text('Exit Full Screen'); + } + }); + + // dblclick open linecomment form + var clearSelection = function () { + if (window.getSelection) { + if (window.getSelection().empty) { // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { // IE? + document.selection.empty(); + } + } + $('body').delegate('.js-open-comment-form.dblclick-comment', 'dblclick', function () { + clearSelection(); + var curRow = $(this).parents('tr'); + openCommentForm(curRow); + }); + + //////////////////// moreline get_contexts + + // moreline + $('body').delegate('pre.skipped a', 'click', function() { + var curRow = $(this).parents('tr'); + var patch_data = curRow.parents('.file').children('.meta').find('.patch-data'); + var data = curRow.find('.expand-data'); + var url = patch_data.attr('data-context-url'); + $.get( + url, + { + old_sha : patch_data.attr('data-old-sha'), + old_path : patch_data.attr('data-old-path'), + old_start : data.attr('data-old-start'), + new_start : data.attr('data-new-start'), + old_end : data.attr('data-old-end'), + new_end : data.attr('data-new-end'), + type : $(this).attr('data-type'), + }, + function (r) { + curRow.after(r.html); + if (r.html.trim()) { + curRow.remove(); + } + } + ); + }); + + // full diff + $('body').delegate('.ellipsis', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj + }, + function(r){ + table.find('tbody').html(r.html); + }); + }); + + // TODO: modify this, after refactor diff api + // toggle whitespace diff + $('body').delegate('.toggle_whitespace', 'click', function() { + var $this = $(this); + var fpath = $this.attr('data-path'); + var new_fpath = $this.attr('data-new-path'); + + // for pull/new + var from_proj = $('.new-pull-request form input[name="from_proj"]').attr('value'); + var from_ref = $('.new-pull-request form input[name="from_ref"]').attr('value'); + var to_ref = $('.new-pull-request form input[name="to_ref"]').attr('value'); + var to_proj = $('.new-pull-request form input[name="to_proj"]').attr('value'); + + var url = $this.attr('data-url'); + var table = $this.parents('.data').find('.diff-table'); + var whitespace = $this.attr('data-w'); + + $.get(url, + { + filepath: fpath, + new_filepath: new_fpath, + from_proj: from_proj, + from_ref: from_ref, + to_ref: to_ref, + to_proj: to_proj, + w: whitespace + }, + function(r){ + table.find('tbody').html(r.html); + $this.attr('data-w', (1 - parseInt(whitespace)).toString()); + }); + }); + + //////////////////// no use ?? + function convertDiff(name, table, pre) { + var inline = $(table).hasClass('inline'); + var ths = table.tHead.rows[0].cells; + var afile, bfile; + if ( inline ) { + afile = ths[0].title; + bfile = ths[1].title; + } else { + afile = $(ths[0]).find('a').text(); + bfile = $(ths[1]).find('a').text(); + } + if ( afile.match(/^Revision /) ) { + afile = 'a/' + name; + bfile = 'b/' + name; + } + var lines = [ + "Index: " + name, + "===================================================================", + "--- " + afile.replace(/File /, ''), + "+++ " + bfile.replace(/File /, ''), + ]; + var sepIndex = 0; + var oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + var title = ""; + if (inline) + title = $(ths[2]).text(); + for (var i = 0; i < table.tBodies.length; i++) { + var tBody = table.tBodies[i]; + if (i == 0 || tBody.className == "skipped") { + if (i > 0) { + if (!oldOffset && oldLength) oldOffset = 1 + if (!newOffset && newLength) newOffset = 1 + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + } + sepIndex = lines.length; + lines.push("@@ -{1},{2} +{3},{4} @@{5}"); + oldOffset = 0, oldLength = 0, newOffset = 0, newLength = 0; + if (tBody.className == "skipped") { + if (inline) + title = $(tBody.rows[0].cells[2]).text(); + continue; + } + } + var tmpLines = []; + for (var j = 0; j < tBody.rows.length; j++) { + var cells = tBody.rows[j].cells; + var oldLineNo = parseInt($(cells[0]).text()); + var newLineNo = parseInt($(cells[inline ? 1 : 2]).text()); + if (tBody.className == 'unmod') { + lines.push(" " + $(cells[inline ? 2 : 1]).text()); + oldLength += 1; + newLength += 1; + if (!oldOffset) oldOffset = oldLineNo; + if (!newOffset) newOffset = newLineNo; + } else { + var oldLine; + var newLine; + var oldTag = "-"; + var newTag = "+"; + if (inline) { + oldLine = newLine = $(cells[2]).text(); + if ($('em', cells[2]).length) oldTag = newTag = "\\"; + } else { + oldLine = $(cells[1]).text(); + if ($('em', cells[1]).length) oldTag = "\\"; + newLine = $(cells[3]).text(); + if ($('em', cells[3]).length) newTag = "\\"; + } + if (!isNaN(oldLineNo)) { + lines.push(oldTag + oldLine); + oldLength += 1; + } + if (!isNaN(newLineNo)) { + tmpLines.push(newTag + newLine); + newLength += 1; + } + } + } + if (tmpLines.length > 0) { + lines = lines.concat(tmpLines); + } + } + if (!oldOffset && oldLength) oldOffset = 1; + if (!newOffset && newLength) newOffset = 1; + lines[sepIndex] = lines[sepIndex] + .replace("{1}", oldOffset).replace("{2}", oldLength) + .replace("{3}", newOffset).replace("{4}", newLength) + .replace("{5}", title); + /* remove trailing   and join lines (with CR for IExplorer) */ + var sep = $.browser.msie ? "\r" : "\n"; + for ( var i = 0; i < lines.length; i++ ) + if ( lines[i] ) + { + var line = lines[i].replace(/\xa0$/, '') + sep; + if ( lines[i][0] == '+' ) + pre.append($('').text(line)); + else if ( lines[i][0] == '-' ) + pre.append($('').text(line)); + else + pre.append($('').text(line)); + } + } + // no use ?? + $("div.diff h2").each(function() { + console.log('call div.diff h2 !!!'); + var switcher = $("").prependTo(this); + var name = $.trim($(this).text()); + var table = $(this).siblings("table").get(0); + if (! table) return; + var pre = $('
    ').hide().insertAfter(table);
    +          $("" + _("Tabular") + "").click(function() {
    +            $(pre).hide();
    +            $(table).show();
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).addClass("active").appendTo(switcher);
    +          $("" + _("Unified") + "").click(function() {
    +            $(table).hide();
    +            if (!pre.get(0).firstChild) convertDiff(name, table, pre);
    +            $(pre).fadeIn("fast")
    +            $(this).addClass("active").siblings("span").removeClass("active");
    +            return false;
    +          }).appendTo(switcher);
    +        });
    +
    +
    +        colorcube.init({target:'body'});
    +});
    +
    +/* @source mod/zclip.js */;
    +
    +define('mod/zclip', [
    +  "jquery",
    +  "jquery-zclip"
    +], function($, _) {
    +  $(function () {
    +    $('input.git-url').focus(function(e) {
    +      var elem = this;
    +      setTimeout(function() {
    +        elem.select();
    +      }, 0);
    +    });
    +    $('.copy-git-url').zclip({
    +      path: '/static/js/lib/ZeroClipboard.swf',
    +      copy: function() {
    +        return $('.copy-git-url').attr('data-clipboard-text');
    +      },
    +      afterCopy: function() {}
    +    });
    +  });
    +});
    +
    +/* @source mod/compare.js */;
    +
    +define('mod/compare', [
    +  "jquery",
    +  "jquery-tmpl"
    +], function($){
    +
    +    var popup;
    +    var project_name = $('.history a').text();
    +    $('.compare-button').click(function (e) {
    +        var curRef = $(this).attr('data-ref'), allRef = [], curIdx = 0;
    +        $('.compare-button').each(function (i, el){
    +              var ref = $(el).attr('data-ref');
    +              allRef.push(ref);
    +              (ref == curRef) && (curIdx = i);
    +        });
    +        select_ref = allRef.slice(0, curIdx);
    +        e.preventDefault();
    +        var start_ref = $(this).attr('data-ref');
    +        if (!popup) {
    +            popup = $('
    ').appendTo('body'); + popup.delegate('.close', 'click', function () {popup.hide();}); + popup.delegate('#start-submit', 'click', function () { + var ref = popup.find('.ref-autocompleter').val(); + var link = ''; + location.href = link; + }) + .delegate('#end-submit', 'click', function () { + var ref = popup.find('.ref-autocompleter').val(); + if (ref == "" || ref == undefined || ref != null ||!ref.match('/^[0-9a-bA-B]+$/')){ + var link = '/' + project_name + '/compare/'+start_ref+'...'+ref; + location.href = link; + } else { + popup.remove(); + alert('wrong revision'); + } + }); + } + var data = {}; + if ($(this).hasClass('from')) { + data.mode = 'start'; + } else { + data.mode = 'end'; + } + data.rev = $($('.sha')[0]).text(); + data.revisions = JSON.stringify(select_ref); + popup.empty().append($.tmpl($('#templ-compare-chooser'), data)).show(); + scrollTo(0, 0); + // load commit_preview when sha given + $('.ref-autocompleter').change(function (){ + var ref = $(this).val(); + $('.place_preview').empty(); + var url = '/' + project_name +'/pull/commit_preview/' + project_name+':'+ref; + $.get(url, function(data){ + $('.place_preview').html(data); + }); + }); + }); + + popup = null; + $('.commit-ref').click(function () { + if (!popup) { + popup = $('
    ').appendTo('body'); + popup.delegate('.close', 'click', function () {popup.hide();}); + popup.delegate('#start-submit', 'click', function () { + var ref = popup.find('.ref-autocompleter').val(); + var link = '/' + project_name + '/compare/'+ref+'...' + '${sha2}'; + location.href = link; + + }) + .delegate('#end-submit', 'click', function () { + var ref = popup.find('.ref-autocompleter').val(); + var link = '/' + project_name + '/compare/'+'${sha1}'+'...' + ref; + location.href = link; + }); + } + var data = {}; + if ($(this).hasClass('from')) { + data.mode = 'start'; + } else { + data.mode = 'end'; + } + popup.empty().append($.tmpl($('#templ-compare-chooser'), data)).show(); + }); + +}); + +/* @source */; + +require(['mod/compare' +, 'mod/zclip' +, 'mod/diff' // no use yet +], function(){ + //do any thing? +}); diff --git a/dist/js/app/src/editor.js b/dist/js/app/src/editor.js new file mode 100644 index 0000000..d0ca264 --- /dev/null +++ b/dist/js/app/src/editor.js @@ -0,0 +1,4744 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/zclip.js */; + +define('mod/zclip', [ + "jquery", + "jquery-zclip" +], function($, _) { + $(function () { + $('input.git-url').focus(function(e) { + var elem = this; + setTimeout(function() { + elem.select(); + }, 0); + }); + $('.copy-git-url').zclip({ + path: '/static/js/lib/ZeroClipboard.swf', + copy: function() { + return $('.copy-git-url').attr('data-clipboard-text'); + }, + afterCopy: function() {} + }); + }); +}); + +/* @source lib/codemirror.js */; + +// CodeMirror version 3.0 +// +// CodeMirror is the only global var we claim +window.CodeMirror = (function() { + "use strict"; + + // BROWSER SNIFFING + + // Crude, but necessary to handle a number of hard-to-feature-detect + // bugs and behavior differences. + var gecko = /gecko\/\d/i.test(navigator.userAgent); + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt8 = /MSIE [1-7]\b/.test(navigator.userAgent); + var ie_lt9 = /MSIE [1-8]\b/.test(navigator.userAgent); + var webkit = /WebKit\//.test(navigator.userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); + var chrome = /Chrome\//.test(navigator.userAgent); + var opera = /Opera\//.test(navigator.userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var khtml = /KHTML\//.test(navigator.userAgent); + var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); + var phantom = /PhantomJS/.test(navigator.userAgent); + + var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|IEMobile/i.test(navigator.userAgent); + var mac = ios || /Mac/.test(navigator.platform); + + // Optimize some code when these features are not used + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // CONSTRUCTOR + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options || {}; + // Determine effective options based on given values and defaults. + for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt)) + options[opt] = defaults[opt]; + setGuttersForLineNumbers(options); + + var display = this.display = makeDisplay(place); + display.wrapper.CodeMirror = this; + updateGutters(this); + if (options.autofocus && !mobile) focusInput(this); + + this.view = makeView(new BranchChunk([new LeafChunk([makeLine("", null, textHeight(display))])])); + this.nextOpId = 0; + loadMode(this); + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + + // Initialize the content. + this.setValue(options.value || ""); + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie) setTimeout(bind(resetInput, this, true), 20); + this.view.history = makeHistory(); + + registerEventHandlers(this); + // IE throws unspecified error in certain cases, when + // trying to access activeElement before onload + var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { } + if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20); + else onBlur(this); + + operation(this, function() { + for (var opt in optionHandlers) + if (optionHandlers.propertyIsEnumerable(opt)) + optionHandlers[opt](this, options[opt], Init); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); + })(); + } + + // DISPLAY CONSTRUCTOR + + function makeDisplay(place) { + var d = {}; + var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none;"); + input.setAttribute("wrap", "off"); input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); + // Wraps and hides input textarea + d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The actual fake scrollbars. + d.scrollbarH = elt("div", [elt("div", null, null, "height: 1px")], "CodeMirror-hscrollbar"); + d.scrollbarV = elt("div", [elt("div", null, null, "width: 1px")], "CodeMirror-vscrollbar"); + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + // DIVs containing the selection and the actual code + d.lineDiv = elt("div"); + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + // Blinky cursor, and element used to ensure cursor fits at the end of a line + d.cursor = elt("pre", "\u00a0", "CodeMirror-cursor"); + // Secondary cursor, shown when on a 'jump' in bi-directional text + d.otherCursor = elt("pre", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"); + // Used to measure text size + d.measure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the text, causes scrolling + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + // D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers + d.heightForcer = elt("div", "\u00a0", null, "position: absolute; height: " + scrollerCutOff + "px"); + // Will contain the gutters, if any + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Helper element to properly size the gutter backgrounds + var scrollerInner = elt("div", [d.sizer, d.heightForcer, d.gutters], null, "position: relative; min-height: 100%"); + // Provides scrolling + d.scroller = elt("div", [scrollerInner], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV, + d.scrollbarFiller, d.scroller], "CodeMirror"); + // Work around IE7 z-index bug + if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); + + // Needed to hide big blue blinking cursor on Mobile Safari + if (ios) input.style.width = "0px"; + if (!webkit) d.scroller.draggable = true; + // Needed to handle Tab key in KHTML + if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = "18px"; + + // Current visible range (may be bigger than the view window). + d.viewOffset = d.showingFrom = d.showingTo = d.lastSizeC = 0; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // See readInput and resetInput + d.prevInput = ""; + // Set to true when a non-horizontal-scrolling widget is added. As + // an optimization, widget aligning is skipped when d is false. + d.alignWidgets = false; + // Flag that indicates whether we currently expect input to appear + // (after some event like 'keypress' or 'input') and are polling + // intensively. + d.pollingFast = false; + // Self-resetting timeout for the poller + d.poll = new Delayed(); + // True when a drag from the editor is active + d.draggingText = false; + + d.cachedCharWidth = d.cachedTextHeight = null; + d.measureLineCache = []; + d.measureLineCachePos = 0; + + // Tracks when resetInput has punted to just putting a short + // string instead of the (large) selection. + d.inaccurateSelection = false; + + // Used to adjust overwrite behaviour when a paste has been + // detected + d.pasteIncoming = false; + + return d; + } + + // VIEW CONSTRUCTOR + + function makeView(doc) { + var selPos = {line: 0, ch: 0}; + return { + doc: doc, + // frontier is the point up to which the content has been parsed, + frontier: 0, highlight: new Delayed(), + sel: {from: selPos, to: selPos, head: selPos, anchor: selPos, shift: false, extend: false}, + scrollTop: 0, scrollLeft: 0, + overwrite: false, focused: false, + // Tracks the maximum line length so that + // the horizontal scrollbar can be kept + // static when scrolling. + maxLine: getLine(doc, 0), + maxLineLength: 0, + maxLineChanged: false, + suppressEdits: false, + goalColumn: null, + cantEdit: false, + keyMaps: [] + }; + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + var doc = cm.view.doc; + cm.view.mode = CodeMirror.getMode(cm.options, cm.options.mode); + doc.iter(0, doc.size, function(line) { line.stateAfter = null; }); + cm.view.frontier = 0; + startWorker(cm, 100); + } + + function wrappingChanged(cm) { + var doc = cm.view.doc, th = textHeight(cm.display); + if (cm.options.lineWrapping) { + cm.display.wrapper.className += " CodeMirror-wrap"; + var perLine = cm.display.scroller.clientWidth / charWidth(cm.display) - 3; + doc.iter(0, doc.size, function(line) { + if (line.height == 0) return; + var guess = Math.ceil(line.text.length / perLine) || 1; + if (guess != 1) updateLineHeight(line, guess * th); + }); + cm.display.sizer.style.minWidth = ""; + } else { + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", ""); + computeMaxLength(cm.view); + doc.iter(0, doc.size, function(line) { + if (line.height != 0) updateLineHeight(line, th); + }); + } + regChange(cm, 0, doc.size); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm.display, cm.view.doc.height);}, 100); + } + + function keyMapChanged(cm) { + var style = keyMap[cm.options.keyMap].style; + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + updateDisplay(cm, true); + } + + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + } + + function lineLength(doc, line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(); + cur = getLine(doc, found.from.line); + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(); + len -= cur.text.length - found.from.ch; + cur = getLine(doc, found.to.line); + len += cur.text.length - found.to.ch; + } + return len; + } + + function computeMaxLength(view) { + view.maxLine = getLine(view.doc, 0); + view.maxLineLength = lineLength(view.doc, view.maxLine); + view.maxLineChanged = true; + view.doc.iter(1, view.doc.size, function(line) { + var len = lineLength(view.doc, line); + if (len > view.maxLineLength) { + view.maxLineLength = len; + view.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = false; + for (var i = 0; i < options.gutters.length; ++i) { + if (options.gutters[i] == "CodeMirror-linenumbers") { + if (options.lineNumbers) found = true; + else options.gutters.splice(i--, 1); + } + } + if (!found && options.lineNumbers) + options.gutters.push("CodeMirror-linenumbers"); + } + + // SCROLLBARS + + // Re-synchronize the fake scrollbars with the actual size of the + // content. Optionally force a scrollTop. + function updateScrollbars(d /* display */, docHeight) { + var totalHeight = docHeight + 2 * paddingTop(d); + d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + "px"; + var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight); + var needsH = d.scroller.scrollWidth > d.scroller.clientWidth; + var needsV = scrollHeight > d.scroller.clientHeight; + if (needsV) { + d.scrollbarV.style.display = "block"; + d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarV.firstChild.style.height = + (scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px"; + } else d.scrollbarV.style.display = ""; + if (needsH) { + d.scrollbarH.style.display = "block"; + d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarH.firstChild.style.width = + (d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px"; + } else d.scrollbarH.style.display = ""; + if (needsH && needsV) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px"; + } else d.scrollbarFiller.style.display = ""; + + if (mac_geLion && scrollbarWidth(d.measure) === 0) + d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px"; + } + + function visibleLines(display, doc, viewPort) { + var top = display.scroller.scrollTop, height = display.wrapper.clientHeight; + if (typeof viewPort == "number") top = viewPort; + else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;} + top = Math.floor(top - paddingTop(display)); + var bottom = Math.ceil(top + height); + return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)}; + } + + // LINE NUMBERS + + function alignHorizontally(cm) { + var display = cm.display; + if (!display.alignWidgets && !display.gutters.firstChild) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.view.scrollLeft; + var gutterW = display.gutters.offsetWidth, l = comp + "px"; + for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) { + for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l; + } + display.gutters.style.left = (comp + gutterW) + "px"; + } + + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.view.doc, last = lineNumberFor(cm.options, doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // DISPLAY DRAWING + + function updateDisplay(cm, changes, viewPort) { + var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo; + var updated = updateDisplayInner(cm, changes, viewPort); + if (updated) { + signalLater(cm, cm, "update", cm); + if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo) + signalLater(cm, cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo); + } + updateSelection(cm); + updateScrollbars(cm.display, cm.view.doc.height); + + return updated; + } + + // Uses a set of changes plus the current scroll position to + // determine which DOM updates have to be made, and makes the + // updates. + function updateDisplayInner(cm, changes, viewPort) { + var display = cm.display, doc = cm.view.doc; + if (!display.wrapper.clientWidth) { + display.showingFrom = display.showingTo = display.viewOffset = 0; + return; + } + + // Compute the new visible window + // If scrollTop is specified, use that to determine which lines + // to render instead of the current scrollbar position. + var visible = visibleLines(display, doc, viewPort); + // Bail out if the visible area is already rendered and nothing changed. + if (changes !== true && changes.length == 0 && + visible.from > display.showingFrom && visible.to < display.showingTo) + return; + + if (changes && maybeUpdateLineNumberWidth(cm)) + changes = true; + display.sizer.style.marginLeft = display.scrollbarH.style.left = display.gutters.offsetWidth + "px"; + + // When merged lines are present, the line that needs to be + // redrawn might not be the one that was changed. + if (changes !== true && sawCollapsedSpans) + for (var i = 0; i < changes.length; ++i) { + var ch = changes[i], merged; + while (merged = collapsedSpanAtStart(getLine(doc, ch.from))) { + var from = merged.find().from.line; + if (ch.diff) ch.diff -= ch.from - from; + ch.from = from; + } + } + + // Used to determine which lines need their line numbers updated + var positionsChangedFrom = changes === true ? 0 : Infinity; + if (cm.options.lineNumbers && changes && changes !== true) + for (var i = 0; i < changes.length; ++i) + if (changes[i].diff) { positionsChangedFrom = changes[i].from; break; } + + var from = Math.max(visible.from - cm.options.viewportMargin, 0); + var to = Math.min(doc.size, visible.to + cm.options.viewportMargin); + if (display.showingFrom < from && from - display.showingFrom < 20) from = display.showingFrom; + if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(doc.size, display.showingTo); + if (sawCollapsedSpans) { + from = lineNo(visualLine(doc, getLine(doc, from))); + while (to < doc.size && lineIsHidden(getLine(doc, to))) ++to; + } + + // Create a range of theoretically intact lines, and punch holes + // in that using the change info. + var intact = changes === true ? [] : + computeIntact([{from: display.showingFrom, to: display.showingTo}], changes); + // Clip off the parts that won't be visible + var intactLines = 0; + for (var i = 0; i < intact.length; ++i) { + var range = intact[i]; + if (range.from < from) range.from = from; + if (range.to > to) range.to = to; + if (range.from >= range.to) intact.splice(i--, 1); + else intactLines += range.to - range.from; + } + if (intactLines == to - from && from == display.showingFrom && to == display.showingTo) + return; + intact.sort(function(a, b) {return a.from - b.from;}); + + if (intactLines < (to - from) * .7) display.lineDiv.style.display = "none"; + patchDisplay(cm, from, to, intact, positionsChangedFrom); + display.lineDiv.style.display = ""; + + var different = from != display.showingFrom || to != display.showingTo || + display.lastSizeC != display.wrapper.clientHeight; + // This is just a bogus formula that detects when the editor is + // resized or the font size changes. + if (different) display.lastSizeC = display.wrapper.clientHeight; + display.showingFrom = from; display.showingTo = to; + startWorker(cm, 100); + + var prevBottom = display.lineDiv.offsetTop; + for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) { + if (ie_lt8) { + var bot = node.offsetTop + node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = node.getBoundingClientRect(); + height = box.bottom - box.top; + } + var diff = node.lineObj.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) + updateLineHeight(node.lineObj, height); + } + display.viewOffset = heightAtLine(cm, getLine(doc, from)); + // Position the mover div to align with the current virtual scroll position + display.mover.style.top = display.viewOffset + "px"; + return true; + } + + function computeIntact(intact, changes) { + for (var i = 0, l = changes.length || 0; i < l; ++i) { + var change = changes[i], intact2 = [], diff = change.diff || 0; + for (var j = 0, l2 = intact.length; j < l2; ++j) { + var range = intact[j]; + if (change.to <= range.from && change.diff) { + intact2.push({from: range.from + diff, to: range.to + diff}); + } else if (change.to <= range.from || change.from >= range.to) { + intact2.push(range); + } else { + if (change.from > range.from) + intact2.push({from: range.from, to: change.from}); + if (change.to < range.to) + intact2.push({from: change.to + diff, to: range.to + diff}); + } + } + intact = intact2; + } + return intact; + } + + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft; + width[cm.options.gutters[i]] = n.offsetWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + function patchDisplay(cm, from, to, intact, updateNumbersFrom) { + var dims = getDimensions(cm); + var display = cm.display, lineNumbers = cm.options.lineNumbers; + // IE does bad things to nodes when .innerHTML = "" is used on a parent + // we still need widgets and markers intact to add back to the new content later + if (!intact.length && !ie && (!webkit || !cm.display.currentWheelTarget)) + removeChildren(display.lineDiv); + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + if (webkit && mac && cm.display.currentWheelTarget == node) { + node.style.display = "none"; + node.lineObj = null; + } else { + container.removeChild(node); + } + return next; + } + + var nextIntact = intact.shift(), lineNo = from; + cm.view.doc.iter(from, to, function(line) { + if (nextIntact && nextIntact.to == lineNo) nextIntact = intact.shift(); + if (lineIsHidden(line)) { + if (line.height != 0) updateLineHeight(line, 0); + } else if (nextIntact && nextIntact.from <= lineNo && nextIntact.to > lineNo) { + // This line is intact. Skip to the actual node. Update its + // line number if needed. + while (cur.lineObj != line) cur = rm(cur); + if (lineNumbers && updateNumbersFrom <= lineNo && cur.lineNumber) + setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineNo)); + cur = cur.nextSibling; + } else { + // This line needs to be generated. + var lineNode = buildLineElement(cm, line, lineNo, dims); + container.insertBefore(lineNode, cur); + lineNode.lineObj = line; + } + ++lineNo; + }); + while (cur) cur = rm(cur); + } + + function buildLineElement(cm, line, lineNo, dims) { + var lineElement = lineContent(cm, line); + var markers = line.gutterMarkers, display = cm.display; + + if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && + (!line.widgets || !line.widgets.length)) return lineElement; + + // Lines with gutter elements or a background class need + // to be wrapped again, and have the extra elements added + // to the wrapper div + + var wrap = elt("div", null, line.wrapClass, "position: relative"); + if (cm.options.lineNumbers || markers) { + var gutterWrap = wrap.appendChild(elt("div", null, null, "position: absolute; left: " + + dims.fixedPos + "px")); + wrap.alignable = [gutterWrap]; + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + wrap.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineNo), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + display.lineNumInnerWidth + "px")); + if (markers) + for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + // Kludge to make sure the styled element lies behind the selection (by z-index) + if (line.bgClass) + wrap.appendChild(elt("div", "\u00a0", line.bgClass + " CodeMirror-linebackground")); + wrap.appendChild(lineElement); + if (line.widgets) + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + node.widget = widget; + if (widget.noHScroll) { + (wrap.alignable || (wrap.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + if (widget.above) + wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement); + else + wrap.appendChild(node); + } + + if (ie_lt8) wrap.style.zIndex = 2; + return wrap; + } + + // SELECTION / CURSOR + + function updateSelection(cm) { + var display = cm.display; + var collapsed = posEq(cm.view.sel.from, cm.view.sel.to); + if (collapsed || cm.options.showCursorWhenSelecting) + updateSelectionCursor(cm); + else + display.cursor.style.display = display.otherCursor.style.display = "none"; + if (!collapsed) + updateSelectionRange(cm); + else + display.selectionDiv.style.display = "none"; + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + var headPos = cursorCoords(cm, cm.view.sel.head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)) + "px"; + display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)) + "px"; + } + + // No selection, plain cursor + function updateSelectionCursor(cm) { + var display = cm.display, pos = cursorCoords(cm, cm.view.sel.head, "div"); + display.cursor.style.left = pos.left + "px"; + display.cursor.style.top = pos.top + "px"; + display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + display.cursor.style.display = ""; + + if (pos.other) { + display.otherCursor.style.display = ""; + display.otherCursor.style.left = pos.other.left + "px"; + display.otherCursor.style.top = pos.other.top + "px"; + display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } else { display.otherCursor.style.display = "none"; } + } + + // Highlight selection + function updateSelectionRange(cm) { + var display = cm.display, doc = cm.view.doc, sel = cm.view.sel; + var fragment = document.createDocumentFragment(); + var clientWidth = display.lineSpace.offsetWidth, pl = paddingLeft(cm.display); + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? clientWidth - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg, retTop) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length, rVal = retTop ? Infinity : -Infinity; + function coords(ch) { + return charCoords(cm, {line: line, ch: ch}, "div", lineObj); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(dir == "rtl" ? to - 1 : from); + var rightPos = coords(dir == "rtl" ? from : to - 1); + var left = leftPos.left, right = rightPos.right; + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = pl; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = clientWidth; + if (fromArg == null && from == 0) left = pl; + rVal = retTop ? Math.min(rightPos.top, rVal) : Math.max(rightPos.bottom, rVal); + if (left < pl + 1) left = pl; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return rVal; + } + + if (sel.from.line == sel.to.line) { + drawForLine(sel.from.line, sel.from.ch, sel.to.ch); + } else { + var fromObj = getLine(doc, sel.from.line); + var cur = fromObj, merged, path = [sel.from.line, sel.from.ch], singleLine; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(); + path.push(found.from.ch, found.to.line, found.to.ch); + if (found.to.line == sel.to.line) { + path.push(sel.to.ch); + singleLine = true; + break; + } + cur = getLine(doc, found.to.line); + } + + // This is a single, merged line + if (singleLine) { + for (var i = 0; i < path.length; i += 3) + drawForLine(path[i], path[i+1], path[i+2]); + } else { + var middleTop, middleBot, toObj = getLine(doc, sel.to.line); + if (sel.from.ch) + // Draw the first line of selection. + middleTop = drawForLine(sel.from.line, sel.from.ch, null, false); + else + // Simply include it in the middle block. + middleTop = heightAtLine(cm, fromObj) - display.viewOffset; + + if (!sel.to.ch) + middleBot = heightAtLine(cm, toObj) - display.viewOffset; + else + middleBot = drawForLine(sel.to.line, collapsedSpanAtStart(toObj) ? null : 0, sel.to.ch, true); + + if (middleTop < middleBot) add(pl, middleTop, null, middleBot); + } + } + + removeChildrenAndAdd(display.selectionDiv, fragment); + display.selectionDiv.style.display = ""; + } + + // Cursor-blinking + function restartBlink(cm) { + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursor.style.visibility = display.otherCursor.style.visibility = ""; + display.blinker = setInterval(function() { + if (!display.cursor.offsetHeight) return; + display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.view.frontier < cm.display.showingTo) + cm.view.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var view = cm.view, doc = view.doc; + if (view.frontier >= cm.display.showingTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(view.mode, getStateBefore(cm, view.frontier)); + var changed = [], prevChange; + doc.iter(view.frontier, Math.min(doc.size, cm.display.showingTo + 500), function(line) { + if (view.frontier >= cm.display.showingFrom) { // Visible + if (highlightLine(cm, line, state) && view.frontier >= cm.display.showingFrom) { + if (prevChange && prevChange.end == view.frontier) prevChange.end++; + else changed.push(prevChange = {start: view.frontier, end: view.frontier + 1}); + } + line.stateAfter = copyState(view.mode, state); + } else { + processLine(cm, line, state); + line.stateAfter = view.frontier % 5 == 0 ? copyState(view.mode, state) : null; + } + ++view.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + if (changed.length) + operation(cm, function() { + for (var i = 0; i < changed.length; ++i) + regChange(this, changed[i].start, changed[i].end); + })(); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n) { + var minindent, minline, doc = cm.view.doc; + for (var search = n, lim = n - 100; search > lim; --search) { + if (search == 0) return 0; + var line = getLine(doc, search-1); + if (line.stateAfter) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n) { + var view = cm.view; + var pos = findStartLine(cm, n), state = pos && getLine(view.doc, pos-1).stateAfter; + if (!state) state = startState(view.mode); + else state = copyState(view.mode, state); + view.doc.iter(pos, n, function(line) { + processLine(cm, line, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= view.showingFrom && pos < view.showingTo; + line.stateAfter = save ? copyState(view.mode, state) : null; + ++pos; + }); + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingLeft(display) { + var e = removeChildrenAndAdd(display.measure, elt("pre")).appendChild(elt("span", "x")); + return e.offsetLeft; + } + + function measureChar(cm, line, ch, data) { + var data = data || measureLine(cm, line), dir = -1; + for (var pos = ch;; pos += dir) { + var r = data[pos]; + if (r) break; + if (dir < 0 && pos == 0) dir = 1; + } + return {left: pos < ch ? r.right : r.left, + right: pos > ch ? r.left : r.right, + top: r.top, bottom: r.bottom}; + } + + function measureLine(cm, line) { + // First look in the cache + var display = cm.display, cache = cm.display.measureLineCache; + for (var i = 0; i < cache.length; ++i) { + var memo = cache[i]; + if (memo.text == line.text && memo.markedSpans == line.markedSpans && + display.scroller.clientWidth == memo.width) + return memo.measure; + } + + var measure = measureLineInner(cm, line); + // Store result in the cache + var memo = {text: line.text, width: display.scroller.clientWidth, + markedSpans: line.markedSpans, measure: measure}; + if (cache.length == 16) cache[++display.measureLineCachePos % 16] = memo; + else cache.push(memo); + return measure; + } + + function measureLineInner(cm, line) { + var display = cm.display, measure = emptyArray(line.text.length); + var pre = lineContent(cm, line, measure); + + // IE does not cache element positions of inline elements between + // calls to getBoundingClientRect. This makes the loop below, + // which gathers the positions of all the characters on the line, + // do an amount of layout work quadratic to the number of + // characters. When line wrapping is off, we try to improve things + // by first subdividing the line into a bunch of inline blocks, so + // that IE can reuse most of the layout information from caches + // for those blocks. This does interfere with line wrapping, so it + // doesn't work when wrapping is on, but in that case the + // situation is slightly better, since IE does cache line-wrapping + // information and only recomputes per-line. + if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) { + var fragment = document.createDocumentFragment(); + var chunk = 10, n = pre.childNodes.length; + for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) { + var wrap = elt("div", null, null, "display: inline-block"); + for (var j = 0; j < chunk && n; ++j) { + wrap.appendChild(pre.firstChild); + --n; + } + fragment.appendChild(wrap); + } + pre.appendChild(fragment); + } + + removeChildrenAndAdd(display.measure, pre); + + var outer = display.lineDiv.getBoundingClientRect(); + var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight; + for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) { + var size = cur.getBoundingClientRect(); + var top = Math.max(0, size.top - outer.top), bot = Math.min(size.bottom - outer.top, maxBot); + for (var j = 0; j < vranges.length; j += 2) { + var rtop = vranges[j], rbot = vranges[j+1]; + if (rtop > bot || rbot < top) continue; + if (rtop <= top && rbot >= bot || + top <= rtop && bot >= rbot || + Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) { + vranges[j] = Math.min(top, rtop); + vranges[j+1] = Math.max(bot, rbot); + break; + } + } + if (j == vranges.length) vranges.push(top, bot); + data[i] = {left: size.left - outer.left, right: size.right - outer.left, top: j}; + } + for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) { + var vr = cur.top; + cur.top = vranges[vr]; cur.bottom = vranges[vr+1]; + } + return data; + } + + function clearCaches(cm) { + cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0; + cm.display.cachedCharWidth = cm.display.cachedTextHeight = null; + cm.view.maxLineChanged = true; + } + + // Context is one of "line", "div" (display.lineDiv), "local"/null (editor), or "page" + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = lineObj.widgets[i].node.offsetHeight; + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(cm, lineObj); + if (context != "local") yOff -= cm.display.viewOffset; + if (context == "page") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (window.pageYOffset || (document.documentElement || document.body).scrollTop); + var xOff = lOff.left + (window.pageXOffset || (document.documentElement || document.body).scrollLeft); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + function charCoords(cm, pos, context, lineObj) { + if (!lineObj) lineObj = getLine(cm.view.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch), context); + } + + function cursorCoords(cm, pos, context, lineObj, measurement) { + lineObj = lineObj || getLine(cm.view.doc, pos.line); + if (!measurement) measurement = measureLine(cm, lineObj); + function get(ch, right) { + var m = measureChar(cm, lineObj, ch, measurement); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var main, other, linedir = order[0].level; + for (var i = 0; i < order.length; ++i) { + var part = order[i], rtl = part.level % 2, nb, here; + if (part.from < ch && part.to > ch) return get(ch, rtl); + var left = rtl ? part.to : part.from, right = rtl ? part.from : part.to; + if (left == ch) { + // Opera and IE return bogus offsets and widths for edges + // where the direction flips, but only for the side with the + // lower level. So we try to use the side with the higher + // level. + if (i && part.level < (nb = order[i-1]).level) here = get(nb.level % 2 ? nb.from : nb.to - 1, true); + else here = get(rtl && part.from != part.to ? ch - 1 : ch); + if (rtl == linedir) main = here; else other = here; + } else if (right == ch) { + var nb = i < order.length - 1 && order[i+1]; + if (!rtl && nb && nb.from == nb.to) continue; + if (nb && part.level < nb.level) here = get(nb.level % 2 ? nb.to - 1 : nb.from); + else here = get(rtl ? ch : ch - 1, true); + if (rtl == linedir) main = here; else other = here; + } + } + if (linedir && !ch) other = get(order[0].to - 1); + if (!main) return other; + if (other) main.other = other; + return main; + } + + // Coords must be lineSpace-local + function coordsChar(cm, x, y) { + var doc = cm.view.doc; + y += cm.display.viewOffset; + if (y < 0) return {line: 0, ch: 0, outside: true}; + var lineNo = lineAtHeight(doc, y); + if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc, doc.size - 1).text.length}; + if (x < 0) x = 0; + + for (;;) { + var lineObj = getLine(doc, lineNo); + var found = coordsCharInner(cm, lineObj, lineNo, x, y); + var merged = collapsedSpanAtEnd(lineObj); + if (merged && found.ch == lineRight(lineObj)) + lineNo = merged.find().to.line; + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(cm, lineObj); + var wrongLine = false, cWidth = cm.display.wrapper.clientWidth; + var measurement = measureLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, {line: lineNo, ch: ch}, "line", + lineObj, measurement); + wrongLine = true; + if (innerOff > sp.bottom) return Math.max(0, sp.left - cWidth); + else if (innerOff < sp.top) return sp.left + cWidth; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = paddingLeft(cm.display), toX = getX(to); + + if (x > toX) return {line: lineNo, ch: to, outside: wrongLine}; + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var after = x - fromX < toX - x, ch = after ? from : to; + while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch; + return {line: lineNo, ch: ch, after: after, outside: wrongLine}; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (wrongLine) toX += 1000; dist -= step;} + else {from = middle; fromX = middleX; dist = step;} + } + } + + var measureText; + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "x"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var width = anchor.offsetWidth; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap changes in such a way that each + // change won't have to update the cursor and display (which would + // be awkward, slow, and error-prone), but instead updates are + // batched and then all combined and executed at once. + + function startOperation(cm) { + if (cm.curOp) ++cm.curOp.depth; + else cm.curOp = { + // Nested operations delay update until the outermost one + // finishes. + depth: 1, + // An array of ranges of lines that have to be updated. See + // updateDisplay. + changes: [], + delayedCallbacks: [], + updateInput: null, + userSelChange: null, + textChanged: null, + selectionChanged: false, + updateMaxLine: false, + id: ++cm.nextOpId + }; + } + + function endOperation(cm) { + var op = cm.curOp; + if (--op.depth) return; + cm.curOp = null; + var view = cm.view, display = cm.display; + if (op.updateMaxLine) computeMaxLength(view); + if (view.maxLineChanged && !cm.options.lineWrapping) { + var width = measureChar(cm, view.maxLine, view.maxLine.text.length).right; + display.sizer.style.minWidth = (width + 3 + scrollerCutOff) + "px"; + view.maxLineChanged = false; + } + var newScrollPos, updated; + if (op.selectionChanged) { + var coords = cursorCoords(cm, view.sel.head); + newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom); + } + if (op.changes.length || newScrollPos && newScrollPos.scrollTop != null) + updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop); + if (!updated && op.selectionChanged) updateSelection(cm); + if (newScrollPos) scrollCursorIntoView(cm); + if (op.selectionChanged) restartBlink(cm); + + if (view.focused && op.updateInput) + resetInput(cm, op.userSelChange); + + if (op.textChanged) + signal(cm, "change", cm, op.textChanged); + if (op.selectionChanged) signal(cm, "cursorActivity", cm); + for (var i = 0; i < op.delayedCallbacks.length; ++i) op.delayedCallbacks[i](cm); + } + + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm1, f) { + return function() { + var cm = cm1 || this; + startOperation(cm); + try {var result = f.apply(cm, arguments);} + finally {endOperation(cm);} + return result; + }; + } + + function regChange(cm, from, to, lendiff) { + cm.curOp.changes.push({from: from, to: to, diff: lendiff}); + } + + // INPUT HANDLING + + function slowPoll(cm) { + if (cm.view.pollingFast) return; + cm.display.poll.set(cm.options.pollInterval, function() { + readInput(cm); + if (cm.view.focused) slowPoll(cm); + }); + } + + function fastPoll(cm) { + var missed = false; + cm.display.pollingFast = true; + function p() { + var changed = readInput(cm); + if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);} + else {cm.display.pollingFast = false; slowPoll(cm);} + } + cm.display.poll.set(20, p); + } + + // prevInput is a hack to work with IME. If we reset the textarea + // on every change, that breaks IME. So we look for changes + // compared to the previous content instead. (Modern browsers have + // events that indicate IME taking place, but these are not widely + // supported or compatible enough yet to rely on.) + function readInput(cm) { + var input = cm.display.input, prevInput = cm.display.prevInput, view = cm.view, sel = view.sel; + if (!view.focused || hasSelection(input) || isReadOnly(cm)) return false; + var text = input.value; + if (text == prevInput && posEq(sel.from, sel.to)) return false; + startOperation(cm); + view.sel.shift = false; + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput[same] == text[same]) ++same; + var from = sel.from, to = sel.to; + if (same < prevInput.length) + from = {line: from.line, ch: from.ch - (prevInput.length - same)}; + else if (view.overwrite && posEq(from, to) && !cm.display.pasteIncoming) + to = {line: to.line, ch: Math.min(getLine(cm.view.doc, to.line).text.length, to.ch + (text.length - same))}; + var updateInput = cm.curOp.updateInput; + updateDoc(cm, from, to, splitLines(text.slice(same)), "end", + cm.display.pasteIncoming ? "paste" : "input", {from: from, to: to}); + cm.curOp.updateInput = updateInput; + if (text.length > 1000) input.value = cm.display.prevInput = ""; + else cm.display.prevInput = text; + endOperation(cm); + cm.display.pasteIncoming = false; + return true; + } + + function resetInput(cm, user) { + var view = cm.view, minimal, selected; + if (!posEq(view.sel.from, view.sel.to)) { + cm.display.prevInput = ""; + minimal = hasCopyEvent && + (view.sel.to.line - view.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000); + if (minimal) cm.display.input.value = "-"; + else cm.display.input.value = selected || cm.getSelection(); + if (view.focused) selectInput(cm.display.input); + } else if (user) cm.display.prevInput = cm.display.input.value = ""; + cm.display.inaccurateSelection = minimal; + } + + function focusInput(cm) { + if (cm.options.readOnly != "nocursor" && (ie || document.activeElement != cm.display.input)) + cm.display.input.focus(); + } + + function isReadOnly(cm) { + return cm.options.readOnly || cm.view.cantEdit; + } + + // EVENT HANDLERS + + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + on(d.scroller, "dblclick", operation(cm, e_preventDefault)); + on(d.lineSpace, "selectstart", function(e) { + if (!mouseEventInWidget(d, e)) e_preventDefault(e); + }); + // Gecko browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for Gecko. + if (!gecko) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + on(d.scroller, "scroll", function() { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + }); + on(d.scrollbarV, "scroll", function() { + setScrollTop(cm, d.scrollbarV.scrollTop); + }); + on(d.scrollbarH, "scroll", function() { + setScrollLeft(cm, d.scrollbarH.scrollLeft); + }); + + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + function reFocus() { if (cm.view.focused) setTimeout(bind(focusInput, cm), 0); } + on(d.scrollbarH, "mousedown", reFocus); + on(d.scrollbarV, "mousedown", reFocus); + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + on(window, "resize", function resizeHandler() { + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = null; + clearCaches(cm); + if (d.wrapper.parentNode) updateDisplay(cm, true); + else off(window, "resize", resizeHandler); + }); + + on(d.input, "keyup", operation(cm, function(e) { + if (cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + if (e_prop(e, "keyCode") == 16) cm.view.sel.shift = false; + })); + on(d.input, "input", bind(fastPoll, cm)); + on(d.input, "keydown", operation(cm, onKeyDown)); + on(d.input, "keypress", operation(cm, onKeyPress)); + on(d.input, "focus", bind(onFocus, cm)); + on(d.input, "blur", bind(onBlur, cm)); + + function drag_(e) { + if (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return; + e_stop(e); + } + if (cm.options.dragDrop) { + on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); + on(d.scroller, "dragenter", drag_); + on(d.scroller, "dragover", drag_); + on(d.scroller, "drop", operation(cm, onDrop)); + } + on(d.scroller, "paste", function(){focusInput(cm); fastPoll(cm);}); + on(d.input, "paste", function() { + d.pasteIncoming = true; + fastPoll(cm); + }); + + function prepareCopy() { + if (d.inaccurateSelection) { + d.prevInput = ""; + d.inaccurateSelection = false; + d.input.value = cm.getSelection(); + selectInput(d.input); + } + } + on(d.input, "cut", prepareCopy); + on(d.input, "copy", prepareCopy); + + // Needed to handle Tab key in KHTML + if (khtml) on(d.sizer, "mouseup", function() { + if (document.activeElement == d.input) d.input.blur(); + focusInput(cm); + }); + } + + function mouseEventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) + if (/\bCodeMirror-(?:line)?widget\b/.test(n.className) || + n.parentNode == display.sizer && n != display.mover) return true; + } + + function posFromMouse(cm, e, liberal) { + var display = cm.display; + if (!liberal) { + var target = e_target(e); + if (target == display.scrollbarH || target == display.scrollbarH.firstChild || + target == display.scrollbarV || target == display.scrollbarV.firstChild || + target == display.scrollbarFiller) return null; + } + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX; y = e.clientY; } catch (e) { return null; } + return coordsChar(cm, x - space.left, y - space.top); + } + + var lastClick, lastDoubleClick; + function onMouseDown(e) { + var cm = this, display = cm.display, view = cm.view, sel = view.sel, doc = view.doc; + sel.shift = e_prop(e, "shiftKey"); + + if (mouseEventInWidget(display, e)) { + if (!webkit) { + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + + switch (e_button(e)) { + case 3: + if (gecko) onContextMenu.call(cm, cm, e); + return; + case 2: + if (start) extendSelection(cm, start); + setTimeout(bind(focusInput, cm), 20); + e_preventDefault(e); + return; + } + // For button 1, if it was clicked inside the editor + // (posFromMouse returning non-null), we have to adjust the + // selection. + if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;} + + if (!view.focused) onFocus(cm); + + var now = +new Date, type = "single"; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) { + type = "triple"; + e_preventDefault(e); + setTimeout(bind(focusInput, cm), 20); + selectLine(cm, start.line); + } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + e_preventDefault(e); + var word = findWordAt(getLine(doc, start.line).text, start); + extendSelection(cm, word.from, word.to); + } else { lastClick = {time: now, pos: start}; } + + var last = start; + if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) && + !posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") { + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + view.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + extendSelection(cm, start); + focusInput(cm); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + view.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + return; + } + e_preventDefault(e); + if (type == "single") extendSelection(cm, clipPos(doc, start)); + + var startstart = sel.from, startend = sel.to; + + function doSelect(cur) { + if (type == "single") { + extendSelection(cm, clipPos(doc, start), cur); + return; + } + + startstart = clipPos(doc, startstart); + startend = clipPos(doc, startend); + if (type == "double") { + var word = findWordAt(getLine(doc, cur.line).text, cur); + if (posLess(cur, startstart)) extendSelection(cm, word.from, startend); + else extendSelection(cm, startstart, word.to); + } else if (type == "triple") { + if (posLess(cur, startstart)) extendSelection(cm, startend, clipPos(doc, {line: cur.line, ch: 0})); + else extendSelection(cm, startstart, clipPos(doc, {line: cur.line + 1, ch: 0})); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true); + if (!cur) return; + if (!posEq(cur, last)) { + if (!view.focused) onFocus(cm); + last = cur; + doSelect(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + counter = Infinity; + var cur = posFromMouse(cm, e); + if (cur) doSelect(cur); + e_preventDefault(e); + focusInput(cm); + off(document, "mousemove", move); + off(document, "mouseup", up); + } + + var move = operation(cm, function(e) { + if (!ie && !e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + function onDrop(e) { + var cm = this; + if (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return; + e_preventDefault(e); + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || isReadOnly(cm)) return; + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(cm.view.doc, pos); + operation(cm, function() { + var end = replaceRange(cm, text.join(""), pos, pos, "paste"); + setSelection(cm, pos, end); + })(); + } + }; + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { + // Don't do a replace if the drop happened inside of the selected text. + if (cm.view.draggingText && !(posLess(pos, cm.view.sel.from) || posLess(cm.view.sel.to, pos))) { + cm.view.draggingText(e); + if (ie) setTimeout(bind(focusInput, cm), 50); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + var curFrom = cm.view.sel.from, curTo = cm.view.sel.to; + setSelection(cm, pos, pos); + if (cm.view.draggingText) replaceRange(cm, "", curFrom, curTo, "paste"); + cm.replaceSelection(text, null, "paste"); + focusInput(cm); + onFocus(cm); + } + } + catch(e){} + } + } + + function clickInGutter(cm, e) { + var display = cm.display; + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + + if (mX >= Math.floor(display.gutters.getBoundingClientRect().right)) return false; + e_preventDefault(e); + if (!hasHandler(cm, "gutterClick")) return true; + + var lineBox = display.lineDiv.getBoundingClientRect(); + if (mY > lineBox.bottom) return true; + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.view.doc, mY); + var gutter = cm.options.gutters[i]; + signalLater(cm, cm, "gutterClick", cm, line, gutter, e); + break; + } + } + return true; + } + + function onDragStart(cm, e) { + var txt = cm.getSelection(); + e.dataTransfer.setData("Text", txt); + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) + e.dataTransfer.setDragImage(elt('img'), 0, 0); + } + + function setScrollTop(cm, val) { + if (Math.abs(cm.view.scrollTop - val) < 2) return; + cm.view.scrollTop = val; + if (!gecko) updateDisplay(cm, [], val); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val; + if (gecko) updateDisplay(cm, []); + } + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.view.scrollLeft : Math.abs(cm.view.scrollLeft - val) < 2) return; + cm.view.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val; + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelDX, wheelDY, wheelStartX, wheelStartY, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + function onScrollWheel(cm, e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + for (var cur = e.target; cur != scroll; cur = cur.parentNode) { + if (cur.lineObj) { + cm.display.currentWheelTarget = cur; + break; + } + } + } + + var scroll = cm.display.scroller; + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !opera && wheelPixelsPerUnit != null) { + if (dy) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + e_preventDefault(e); + wheelStartX = null; // Abort measurement, if in progress + return; + } + + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.view.scrollTop, bot = top + cm.display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.view.doc.height, bot + pixels + 50); + updateDisplay(cm, [], {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (wheelStartX == null) { + wheelStartX = scroll.scrollLeft; wheelStartY = scroll.scrollTop; + wheelDX = dx; wheelDY = dy; + setTimeout(function() { + if (wheelStartX == null) return; + var movedX = scroll.scrollLeft - wheelStartX; + var movedY = scroll.scrollTop - wheelStartY; + var sample = (movedY && wheelDY && movedY / wheelDY) || + (movedX && wheelDX && movedX / wheelDX); + wheelStartX = wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + wheelDX += dx; wheelDY += dy; + } + } + } + + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false; + var view = cm.view, prevShift = view.sel.shift; + try { + if (isReadOnly(cm)) view.suppressEdits = true; + if (dropShift) view.sel.shift = false; + bound(cm); + } catch(e) { + if (e != Pass) throw e; + return false; + } finally { + view.sel.shift = prevShift; + view.suppressEdits = false; + } + return true; + } + + function allKeyMaps(cm) { + var maps = cm.view.keyMaps.slice(0); + maps.push(cm.options.keyMap); + if (cm.options.extraKeys) maps.unshift(cm.options.extraKeys); + return maps; + } + + var maybeTransition; + function handleKeyBinding(cm, e) { + // Handle auto keymap transitions + var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(cm.options.keyMap) == startMap) + cm.options.keyMap = (next.call ? next.call(null, cm) : next); + }, 50); + + var name = keyNames[e_prop(e, "keyCode")], handled = false; + var flipCtrlCmd = mac && (opera || qtwebkit); + if (name == null || e.altGraphKey) return false; + if (e_prop(e, "altKey")) name = "Alt-" + name; + if (e_prop(e, flipCtrlCmd ? "metaKey" : "ctrlKey")) name = "Ctrl-" + name; + if (e_prop(e, flipCtrlCmd ? "ctrlKey" : "metaKey")) name = "Cmd-" + name; + + var stopped = false; + function stop() { stopped = true; } + var keymaps = allKeyMaps(cm); + + if (e_prop(e, "shiftKey")) { + handled = lookupKey("Shift-" + name, keymaps, + function(b) {return doHandleBinding(cm, b, true);}, stop) + || lookupKey(name, keymaps, function(b) { + if (typeof b == "string" && /^go[A-Z]/.test(b)) return doHandleBinding(cm, b); + }, stop); + } else { + handled = lookupKey(name, keymaps, + function(b) { return doHandleBinding(cm, b); }, stop); + } + if (stopped) handled = false; + if (handled) { + e_preventDefault(e); + restartBlink(cm); + if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } + } + return handled; + } + + function handleCharBinding(cm, e, ch) { + var handled = lookupKey("'" + ch + "'", allKeyMaps(cm), + function(b) { return doHandleBinding(cm, b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(cm); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (!cm.view.focused) onFocus(cm); + if (ie && e.keyCode == 27) { e.returnValue = false; } + if (cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + var code = e_prop(e, "keyCode"); + // IE does strange things with escape. + cm.view.sel.shift = code == 16 || e_prop(e, "shiftKey"); + // First give onKeyEvent option a chance to handle this. + var handled = handleKeyBinding(cm, e); + if (opera) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && e_prop(e, mac ? "metaKey" : "ctrlKey")) + cm.replaceSelection(""); + } + } + + function onKeyPress(e) { + var cm = this; + if (cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + var keyCode = e_prop(e, "keyCode"), charCode = e_prop(e, "charCode"); + if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (this.options.electricChars && this.view.mode.electricChars && + this.options.smartIndent && !isReadOnly(this) && + this.view.mode.electricChars.indexOf(ch) > -1) + setTimeout(operation(cm, function() {indentLine(cm, cm.view.sel.to.line, "smart");}), 75); + if (handleCharBinding(cm, e, ch)) return; + fastPoll(cm); + } + + function onFocus(cm) { + if (cm.options.readOnly == "nocursor") return; + if (!cm.view.focused) { + signal(cm, "focus", cm); + cm.view.focused = true; + if (cm.display.scroller.className.search(/\bCodeMirror-focused\b/) == -1) + cm.display.scroller.className += " CodeMirror-focused"; + resetInput(cm, true); + } + slowPoll(cm); + restartBlink(cm); + } + function onBlur(cm) { + if (cm.view.focused) { + signal(cm, "blur", cm); + cm.view.focused = false; + cm.display.scroller.className = cm.display.scroller.className.replace(" CodeMirror-focused", ""); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.view.focused) cm.view.sel.shift = false;}, 150); + } + + var detectingSelectAll; + function onContextMenu(cm, e) { + var display = cm.display, sel = cm.view.sel; + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || opera) return; // Opera is difficult. + if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)) + operation(cm, setSelection)(cm, pos, pos); + + var oldCSS = display.input.style.cssText; + display.inputDiv.style.position = "absolute"; + display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" + + "border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + focusInput(cm); + resetInput(cm, true); + // Adds "Select all" to context menu in FF + if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = " "; + + function rehide() { + display.inputDiv.style.position = "relative"; + display.input.style.cssText = oldCSS; + if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos; + slowPoll(cm); + + // Try to detect the user choosing select-all + if (display.input.selectionStart != null) { + clearTimeout(detectingSelectAll); + var extval = display.input.value = " " + (posEq(sel.from, sel.to) ? "" : display.input.value), i = 0; + display.prevInput = " "; + display.input.selectionStart = 1; display.input.selectionEnd = extval.length; + detectingSelectAll = setTimeout(function poll(){ + if (display.prevInput == " " && display.input.selectionStart == 0) + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500); + else resetInput(cm); + }, 200); + } + } + + if (gecko) { + e_stop(e); + on(window, "mouseup", function mouseup() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }); + } else { + setTimeout(rehide, 50); + } + } + + // UPDATING + + // Replace the range from from to to by the strings in newText. + // Afterwards, set the selection to selFrom, selTo. + function updateDoc(cm, from, to, newText, selUpdate, origin) { + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && + removeReadOnlyRanges(cm.view.doc, from, to); + if (split) { + for (var i = split.length - 1; i >= 1; --i) + updateDocInner(cm, split[i].from, split[i].to, [""], origin); + if (split.length) + return updateDocInner(cm, split[0].from, split[0].to, newText, selUpdate, origin); + } else { + return updateDocInner(cm, from, to, newText, selUpdate, origin); + } + } + + function updateDocInner(cm, from, to, newText, selUpdate, origin) { + if (cm.view.suppressEdits) return; + + var view = cm.view, doc = view.doc, old = []; + doc.iter(from.line, to.line + 1, function(line) { + old.push(newHL(line.text, line.markedSpans)); + }); + var startSelFrom = view.sel.from, startSelTo = view.sel.to; + var lines = updateMarkedSpans(hlSpans(old[0]), hlSpans(lst(old)), from.ch, to.ch, newText); + var retval = updateDocNoUndo(cm, from, to, lines, selUpdate, origin); + if (view.history) addChange(cm, from.line, newText.length, old, origin, + startSelFrom, startSelTo, view.sel.from, view.sel.to); + return retval; + } + + function unredoHelper(cm, type) { + var doc = cm.view.doc, hist = cm.view.history; + var set = (type == "undo" ? hist.done : hist.undone).pop(); + if (!set) return; + var anti = {events: [], fromBefore: set.fromAfter, toBefore: set.toAfter, + fromAfter: set.fromBefore, toAfter: set.toBefore}; + for (var i = set.events.length - 1; i >= 0; i -= 1) { + hist.dirtyCounter += type == "undo" ? -1 : 1; + var change = set.events[i]; + var replaced = [], end = change.start + change.added; + doc.iter(change.start, end, function(line) { replaced.push(newHL(line.text, line.markedSpans)); }); + anti.events.push({start: change.start, added: change.old.length, old: replaced}); + var selPos = i ? null : {from: set.fromBefore, to: set.toBefore}; + updateDocNoUndo(cm, {line: change.start, ch: 0}, {line: end - 1, ch: getLine(doc, end-1).text.length}, + change.old, selPos, type); + } + (type == "undo" ? hist.undone : hist.done).push(anti); + } + + function updateDocNoUndo(cm, from, to, lines, selUpdate, origin) { + var view = cm.view, doc = view.doc, display = cm.display; + if (view.suppressEdits) return; + + var nlines = to.line - from.line, firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(doc, firstLine)); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (lineLength(doc, line) == view.maxLineLength) { + recomputeMaxLength = true; + return true; + } + }); + } + + var lastHL = lst(lines), th = textHeight(display); + + // First adjust the line structure + if (from.ch == 0 && to.ch == 0 && hlText(lastHL) == "") { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = []; + for (var i = 0, e = lines.length - 1; i < e; ++i) + added.push(makeLine(hlText(lines[i]), hlSpans(lines[i]), th)); + updateLine(cm, lastLine, lastLine.text, hlSpans(lastHL)); + if (nlines) doc.remove(from.line, nlines, cm); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (lines.length == 1) { + updateLine(cm, firstLine, firstLine.text.slice(0, from.ch) + hlText(lines[0]) + + firstLine.text.slice(to.ch), hlSpans(lines[0])); + } else { + for (var added = [], i = 1, e = lines.length - 1; i < e; ++i) + added.push(makeLine(hlText(lines[i]), hlSpans(lines[i]), th)); + added.push(makeLine(hlText(lastHL) + firstLine.text.slice(to.ch), hlSpans(lastHL), th)); + updateLine(cm, firstLine, firstLine.text.slice(0, from.ch) + hlText(lines[0]), hlSpans(lines[0])); + doc.insert(from.line + 1, added); + } + } else if (lines.length == 1) { + updateLine(cm, firstLine, firstLine.text.slice(0, from.ch) + hlText(lines[0]) + + lastLine.text.slice(to.ch), hlSpans(lines[0])); + doc.remove(from.line + 1, nlines, cm); + } else { + var added = []; + updateLine(cm, firstLine, firstLine.text.slice(0, from.ch) + hlText(lines[0]), hlSpans(lines[0])); + updateLine(cm, lastLine, hlText(lastHL) + lastLine.text.slice(to.ch), hlSpans(lastHL)); + for (var i = 1, e = lines.length - 1; i < e; ++i) + added.push(makeLine(hlText(lines[i]), hlSpans(lines[i]), th)); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1, cm); + doc.insert(from.line + 1, added); + } + + if (cm.options.lineWrapping) { + var perLine = Math.max(5, display.scroller.clientWidth / charWidth(display) - 3); + doc.iter(from.line, from.line + lines.length, function(line) { + if (line.height == 0) return; + var guess = (Math.ceil(line.text.length / perLine) || 1) * th; + if (guess != line.height) updateLineHeight(line, guess); + }); + } else { + doc.iter(checkWidthStart, from.line + lines.length, function(line) { + var len = lineLength(doc, line); + if (len > view.maxLineLength) { + view.maxLine = line; + view.maxLineLength = len; + view.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + view.frontier = Math.min(view.frontier, from.line); + startWorker(cm, 400); + + var lendiff = lines.length - nlines - 1; + // Remember that these lines changed, for updating the display + regChange(cm, from.line, to.line + 1, lendiff); + if (hasHandler(cm, "change")) { + // Normalize lines to contain only strings, since that's what + // the change event handler expects + for (var i = 0; i < lines.length; ++i) + if (typeof lines[i] != "string") lines[i] = lines[i].text; + var changeObj = {from: from, to: to, text: lines, origin: origin}; + if (cm.curOp.textChanged) { + for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {} + cur.next = changeObj; + } else cm.curOp.textChanged = changeObj; + } + + // Update the selection + var newSelFrom, newSelTo, end = {line: from.line + lines.length - 1, + ch: hlText(lastHL).length + (lines.length == 1 ? from.ch : 0)}; + if (selUpdate && typeof selUpdate != "string") { + if (selUpdate.from) { newSelFrom = selUpdate.from; newSelTo = selUpdate.to; } + else newSelFrom = newSelTo = selUpdate; + } else if (selUpdate == "end") { + newSelFrom = newSelTo = end; + } else if (selUpdate == "start") { + newSelFrom = newSelTo = from; + } else if (selUpdate == "around") { + newSelFrom = from; newSelTo = end; + } else { + var adjustPos = function(pos) { + if (posLess(pos, from)) return pos; + if (!posLess(to, pos)) return end; + var line = pos.line + lendiff; + var ch = pos.ch; + if (pos.line == to.line) + ch += hlText(lastHL).length - (to.ch - (to.line == from.line ? from.ch : 0)); + return {line: line, ch: ch}; + }; + newSelFrom = adjustPos(view.sel.from); + newSelTo = adjustPos(view.sel.to); + } + setSelection(cm, newSelFrom, newSelTo, null, true); + return end; + } + + function replaceRange(cm, code, from, to, origin) { + if (!to) to = from; + if (posLess(to, from)) { var tmp = to; to = from; from = tmp; } + return updateDoc(cm, from, to, splitLines(code), null, origin); + } + + // SELECTION + + function posEq(a, b) {return a.line == b.line && a.ch == b.ch;} + function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);} + function copyPos(x) {return {line: x.line, ch: x.ch};} + + function clipLine(doc, n) {return Math.max(0, Math.min(n, doc.size-1));} + function clipPos(doc, pos) { + if (pos.line < 0) return {line: 0, ch: 0}; + if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc, doc.size-1).text.length}; + var ch = pos.ch, linelen = getLine(doc, pos.line).text.length; + if (ch == null || ch > linelen) return {line: pos.line, ch: linelen}; + else if (ch < 0) return {line: pos.line, ch: 0}; + else return pos; + } + function isLine(doc, l) {return l >= 0 && l < doc.size;} + + // If shift is held, this will move the selection anchor. Otherwise, + // it'll set the whole selection. + function extendSelection(cm, pos, other, bias) { + var sel = cm.view.sel; + if (sel.shift || sel.extend) { + var anchor = sel.anchor; + if (other) { + var posBefore = posLess(pos, anchor); + if (posBefore != posLess(other, anchor)) { + anchor = pos; + pos = other; + } else if (posBefore != posLess(pos, other)) { + pos = other; + } + } + setSelection(cm, anchor, pos, bias); + } else { + setSelection(cm, pos, other || pos, bias); + } + cm.curOp.userSelChange = true; + } + + // Update the selection. Last two args are only used by + // updateDoc, since they have to be expressed in the line + // numbers before the update. + function setSelection(cm, anchor, head, bias, checkAtomic) { + cm.view.goalColumn = null; + var sel = cm.view.sel; + // Skip over atomic spans. + if (checkAtomic || !posEq(anchor, sel.anchor)) + anchor = skipAtomic(cm, anchor, bias, checkAtomic != "push"); + if (checkAtomic || !posEq(head, sel.head)) + head = skipAtomic(cm, head, bias, checkAtomic != "push"); + + if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return; + + sel.anchor = anchor; sel.head = head; + var inv = posLess(head, anchor); + sel.from = inv ? head : anchor; + sel.to = inv ? anchor : head; + + cm.curOp.updateInput = true; + cm.curOp.selectionChanged = true; + } + + function reCheckSelection(cm) { + setSelection(cm, cm.view.sel.from, cm.view.sel.to, null, "push"); + } + + function skipAtomic(cm, pos, bias, mayClear) { + var doc = cm.view.doc, flipped = false, curPos = pos; + var dir = bias || 1; + cm.view.cantEdit = false; + search: for (;;) { + var line = getLine(doc, curPos.line), toClear; + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { + if (mayClear && m.clearOnEnter) { + (toClear || (toClear = [])).push(m); + continue; + } else if (!m.atomic) continue; + var newPos = m.find()[dir < 0 ? "from" : "to"]; + if (posEq(newPos, curPos)) { + newPos.ch += dir; + if (newPos.ch < 0) { + if (newPos.line) newPos = clipPos(doc, {line: newPos.line - 1}); + else newPos = null; + } else if (newPos.ch > line.text.length) { + if (newPos.line < doc.size - 1) newPos = {line: newPos.line + 1, ch: 0}; + else newPos = null; + } + if (!newPos) { + if (flipped) { + // Driven in a corner -- no valid cursor position found at all + // -- try again *with* clearing, if we didn't already + if (!mayClear) return skipAtomic(cm, pos, bias, true); + // Otherwise, turn off editing until further notice, and return the start of the doc + cm.view.cantEdit = true; + return {line: 0, ch: 0}; + } + flipped = true; newPos = pos; dir = -dir; + } + } + curPos = newPos; + continue search; + } + } + if (toClear) for (var i = 0; i < toClear.length; ++i) toClear[i].clear(); + } + return curPos; + } + } + + // SCROLLING + + function scrollCursorIntoView(cm) { + var view = cm.view; + var coords = scrollPosIntoView(cm, view.sel.head); + if (!view.focused) return; + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (coords.top + box.top < 0) doScroll = true; + else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var hidden = display.cursor.style.display == "none"; + if (hidden) { + display.cursor.style.display = ""; + display.cursor.style.left = coords.left + "px"; + display.cursor.style.top = (coords.top - display.viewOffset) + "px"; + } + display.cursor.scrollIntoView(doScroll); + if (hidden) display.cursor.style.display = "none"; + } + } + + function scrollPosIntoView(cm, pos) { + for (;;) { + var changed = false, coords = cursorCoords(cm, pos); + var scrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom); + var startTop = cm.view.scrollTop, startLeft = cm.view.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.view.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.view.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) return coords; + } + } + + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, pt = paddingTop(display); + y1 += pt; y2 += pt; + var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {}; + var docBottom = cm.view.doc.height + 2 * pt; + var atTop = y1 < pt + 10, atBottom = y2 + pt > docBottom - 10; + if (y1 < screentop) result.scrollTop = atTop ? 0 : Math.max(0, y1); + else if (y2 > screentop + screen) result.scrollTop = (atBottom ? docBottom : y2) - screen; + + var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft; + x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth; + var gutterw = display.gutters.offsetWidth; + var atLeft = x1 < gutterw + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + // API UTILITIES + + function indentLine(cm, n, how, aggressive) { + var doc = cm.view.doc; + if (!how) how = "add"; + if (how == "smart") { + if (!cm.view.mode.indent) how = "prev"; + else var state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (how == "smart") { + indentation = cm.view.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } + else if (how == "add") indentation = curSpace + cm.options.indentUnit; + else if (how == "subtract") indentation = curSpace - cm.options.indentUnit; + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) + replaceRange(cm, indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length}, "input"); + line.stateAfter = null; + } + + function changeLine(cm, handle, op) { + var no = handle, line = handle, doc = cm.view.doc; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) regChange(cm, no, no + 1); + else return null; + return line; + } + + function findPosH(cm, dir, unit, visually) { + var doc = cm.view.doc, end = cm.view.sel.head, line = end.line, ch = end.ch; + var lineObj = getLine(doc, line); + function findNextLine() { + var l = line + dir; + if (l < 0 || l == doc.size) return false; + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return false; + } else ch = next; + return true; + } + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word") { + var sawWord = false; + for (;;) { + if (dir < 0) if (!moveOnce()) break; + if (isWordChar(lineObj.text.charAt(ch))) sawWord = true; + else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;} + if (dir > 0) if (!moveOnce()) break; + } + } + return skipAtomic(cm, {line: line, ch: ch}, dir, true); + } + + function findWordAt(line, pos) { + var start = pos.ch, end = pos.ch; + if (line) { + if (pos.after === false || end == line.length) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar : + /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : + function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return {from: {line: pos.line, ch: start}, to: {line: pos.line, ch: end}}; + } + + function selectLine(cm, line) { + extendSelection(cm, {line: line, ch: 0}, clipPos(cm.view.doc, {line: line + 1, ch: 0})); + } + + // PROTOTYPE + + // The publicly visible API. Note that operation(null, f) means + // 'wrap f in an operation, performed on its `this` parameter' + + CodeMirror.prototype = { + getValue: function(lineSep) { + var text = [], doc = this.view.doc; + doc.iter(0, doc.size, function(line) { text.push(line.text); }); + return text.join(lineSep || "\n"); + }, + + setValue: operation(null, function(code) { + var doc = this.view.doc, top = {line: 0, ch: 0}, lastLen = getLine(doc, doc.size-1).text.length; + updateDocInner(this, top, {line: doc.size - 1, ch: lastLen}, splitLines(code), top, top, "setValue"); + }), + + getSelection: function(lineSep) { return this.getRange(this.view.sel.from, this.view.sel.to, lineSep); }, + + replaceSelection: operation(null, function(code, collapse, origin) { + var sel = this.view.sel; + updateDoc(this, sel.from, sel.to, splitLines(code), collapse || "around", origin); + }), + + focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + + getMode: function() {return this.view.mode;}, + + addKeyMap: function(map) { + this.view.keyMaps.push(map); + }, + + removeKeyMap: function(map) { + var maps = this.view.keyMaps; + for (var i = 0; i < maps.length; ++i) + if ((typeof map == "string" ? maps[i].name : maps[i]) == map) { + maps.splice(i, 1); + return true; + } + }, + + undo: operation(null, function() {unredoHelper(this, "undo");}), + redo: operation(null, function() {unredoHelper(this, "redo");}), + + indentLine: operation(null, function(n, dir, aggressive) { + if (typeof dir != "string") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.view.doc, n)) indentLine(this, n, dir, aggressive); + }), + + indentSelection: operation(null, function(how) { + var sel = this.view.sel; + if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how); + var e = sel.to.line - (sel.to.ch ? 0 : 1); + for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how); + }), + + historySize: function() { + var hist = this.view.history; + return {undo: hist.done.length, redo: hist.undone.length}; + }, + + clearHistory: function() {this.view.history = makeHistory();}, + + markClean: function() { + this.view.history.dirtyCounter = 0; + this.view.history.lastOp = this.view.history.lastOrigin = null; + }, + + isClean: function () {return this.view.history.dirtyCounter == 0;}, + + getHistory: function() { + var hist = this.view.history; + function cp(arr) { + for (var i = 0, nw = [], nwelt; i < arr.length; ++i) { + var set = arr[i]; + nw.push({events: nwelt = [], fromBefore: set.fromBefore, toBefore: set.toBefore, + fromAfter: set.fromAfter, toAfter: set.toAfter}); + for (var j = 0, elt = set.events; j < elt.length; ++j) { + var old = [], cur = elt[j]; + nwelt.push({start: cur.start, added: cur.added, old: old}); + for (var k = 0; k < cur.old.length; ++k) old.push(hlText(cur.old[k])); + } + } + return nw; + } + return {done: cp(hist.done), undone: cp(hist.undone)}; + }, + + setHistory: function(histData) { + var hist = this.view.history = makeHistory(); + hist.done = histData.done; + hist.undone = histData.undone; + }, + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos) { + var doc = this.view.doc; + pos = clipPos(doc, pos); + var state = getStateBefore(this, pos.line), mode = this.view.mode; + var line = getLine(doc, pos.line); + var stream = new StringStream(line.text, this.options.tabSize); + while (stream.pos < pos.ch && !stream.eol()) { + stream.start = stream.pos; + var style = mode.token(stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + className: style || null, // Deprecated, use 'type' instead + type: style || null, + state: state}; + }, + + getStateAfter: function(line) { + var doc = this.view.doc; + line = clipLine(doc, line == null ? doc.size - 1: line); + return getStateBefore(this, line + 1); + }, + + cursorCoords: function(start, mode) { + var pos, sel = this.view.sel; + if (start == null) pos = sel.head; + else if (typeof start == "object") pos = clipPos(this.view.doc, start); + else pos = start ? sel.from : sel.to; + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.view.doc, pos), mode || "page"); + }, + + coordsChar: function(coords) { + var off = this.display.lineSpace.getBoundingClientRect(); + return coordsChar(this, coords.left - off.left, coords.top - off.top); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + + markText: operation(null, function(from, to, options) { + return markText(this, clipPos(this.view.doc, from), clipPos(this.view.doc, to), + options, "range"); + }), + + setBookmark: operation(null, function(pos, widget) { + pos = clipPos(this.view.doc, pos); + return markText(this, pos, pos, widget ? {replacedWith: widget} : {}, "bookmark"); + }), + + findMarksAt: function(pos) { + var doc = this.view.doc; + pos = clipPos(doc, pos); + var markers = [], spans = getLine(doc, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker); + } + return markers; + }, + + setGutterMarker: operation(null, function(line, gutterID, value) { + return changeLine(this, line, function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: operation(null, function(gutterID) { + var i = 0, cm = this, doc = cm.view.doc; + doc.iter(0, doc.size, function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regChange(cm, i, i + 1); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + addLineClass: operation(null, function(handle, where, cls) { + return changeLine(this, handle, function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (new RegExp("\\b" + cls + "\\b").test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + + removeLineClass: operation(null, function(handle, where, cls) { + return changeLine(this, handle, function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var upd = cur.replace(new RegExp("^" + cls + "\\b\\s*|\\s*\\b" + cls + "\\b"), ""); + if (upd == cur) return false; + line[prop] = upd || null; + } + return true; + }); + }), + + addLineWidget: operation(null, function(handle, node, options) { + var widget = options || {}; + widget.node = node; + if (widget.noHScroll) this.display.alignWidgets = true; + changeLine(this, handle, function(line) { + (line.widgets || (line.widgets = [])).push(widget); + widget.line = line; + return true; + }); + return widget; + }), + + removeLineWidget: operation(null, function(widget) { + var ws = widget.line.widgets, no = lineNo(widget.line); + if (no == null) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == widget) ws.splice(i--, 1); + regChange(this, no, no + 1); + }), + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.view.doc, line)) return null; + var n = line; + line = getLine(this.view.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.view.doc, pos)); + var top = pos.top, left = pos.left; + node.style.position = "absolute"; + display.sizer.appendChild(node); + if (vert == "over") top = pos.top; + else if (vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.view.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + if (pos.bottom + node.offsetHeight > vspace && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = (top + paddingTop(display)) + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + lineCount: function() {return this.view.doc.size;}, + + clipPos: function(pos) {return clipPos(this.view.doc, pos);}, + + getCursor: function(start) { + var sel = this.view.sel, pos; + if (start == null || start == "head") pos = sel.head; + else if (start == "anchor") pos = sel.anchor; + else if (start == "end" || start === false) pos = sel.to; + else pos = sel.from; + return copyPos(pos); + }, + + somethingSelected: function() {return !posEq(this.view.sel.from, this.view.sel.to);}, + + setCursor: operation(null, function(line, ch, extend) { + var pos = clipPos(this.view.doc, typeof line == "number" ? {line: line, ch: ch || 0} : line); + if (extend) extendSelection(this, pos); + else setSelection(this, pos, pos); + }), + + setSelection: operation(null, function(anchor, head) { + var doc = this.view.doc; + setSelection(this, clipPos(doc, anchor), clipPos(doc, head || anchor)); + }), + + extendSelection: operation(null, function(from, to) { + var doc = this.view.doc; + extendSelection(this, clipPos(doc, from), to && clipPos(doc, to)); + }), + + setExtending: function(val) {this.view.sel.extend = val;}, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + + getLineHandle: function(line) { + var doc = this.view.doc; + if (isLine(doc, line)) return getLine(doc, line); + }, + + getLineNumber: function(line) {return lineNo(line);}, + + setLine: operation(null, function(line, text) { + if (isLine(this.view.doc, line)) + replaceRange(this, text, {line: line, ch: 0}, {line: line, ch: getLine(this.view.doc, line).text.length}); + }), + + removeLine: operation(null, function(line) { + if (isLine(this.view.doc, line)) + replaceRange(this, "", {line: line, ch: 0}, clipPos(this.view.doc, {line: line+1, ch: 0})); + }), + + replaceRange: operation(null, function(code, from, to) { + var doc = this.view.doc; + from = clipPos(doc, from); + to = to ? clipPos(doc, to) : from; + return replaceRange(this, code, from, to); + }), + + getRange: function(from, to, lineSep) { + var doc = this.view.doc; + from = clipPos(doc, from); to = clipPos(doc, to); + var l1 = from.line, l2 = to.line; + if (l1 == l2) return getLine(doc, l1).text.slice(from.ch, to.ch); + var code = [getLine(doc, l1).text.slice(from.ch)]; + doc.iter(l1 + 1, l2, function(line) { code.push(line.text); }); + code.push(getLine(doc, l2).text.slice(0, to.ch)); + return code.join(lineSep || "\n"); + }, + + triggerOnKeyDown: operation(null, onKeyDown), + + execCommand: function(cmd) {return commands[cmd](this);}, + + // Stuff used by commands, probably not much use to outside code. + moveH: operation(null, function(dir, unit) { + var sel = this.view.sel, pos = dir < 0 ? sel.from : sel.to; + if (sel.shift || sel.extend || posEq(sel.from, sel.to)) pos = findPosH(this, dir, unit, true); + extendSelection(this, pos, pos, dir); + }), + + deleteH: operation(null, function(dir, unit) { + var sel = this.view.sel; + if (!posEq(sel.from, sel.to)) replaceRange(this, "", sel.from, sel.to, "delete"); + else replaceRange(this, "", sel.from, findPosH(this, dir, unit, false), "delete"); + this.curOp.userSelChange = true; + }), + + moveV: operation(null, function(dir, unit) { + var view = this.view, doc = view.doc, display = this.display; + var cur = view.sel.head, pos = cursorCoords(this, cur, "div"); + var x = pos.left, y; + if (view.goalColumn != null) x = view.goalColumn; + if (unit == "page") { + var pageSize = Math.min(display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * pageSize; + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + do { + var target = coordsChar(this, x, y); + y += dir * 5; + } while (target.outside && (dir < 0 ? y > 0 : y < doc.height)); + + if (unit == "page") display.scrollbarV.scrollTop += charCoords(this, target, "div").top - pos.top; + extendSelection(this, target, target, dir); + view.goalColumn = x; + }), + + toggleOverwrite: function() { + if (this.view.overwrite = !this.view.overwrite) + this.display.cursor.className += " CodeMirror-overwrite"; + else + this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", ""); + }, + + posFromIndex: function(off) { + var lineNo = 0, ch, doc = this.view.doc; + doc.iter(0, doc.size, function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(doc, {line: lineNo, ch: ch}); + }, + indexFromPos: function (coords) { + if (coords.line < 0 || coords.ch < 0) return 0; + var index = coords.ch; + this.view.doc.iter(0, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + + scrollTo: function(x, y) { + if (x != null) this.display.scrollbarH.scrollLeft = this.display.scroller.scrollLeft = x; + if (y != null) this.display.scrollbarV.scrollTop = this.display.scroller.scrollTop = y; + updateDisplay(this, []); + }, + getScrollInfo: function() { + var scroller = this.display.scroller, co = scrollerCutOff; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - co, width: scroller.scrollWidth - co, + clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co}; + }, + + scrollIntoView: function(pos) { + if (typeof pos == "number") pos = {line: pos, ch: 0}; + pos = pos ? clipPos(this.view.doc, pos) : this.view.sel.head; + scrollPosIntoView(this, pos); + }, + + setSize: function(width, height) { + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) this.display.wrapper.style.width = interpret(width); + if (height != null) this.display.wrapper.style.height = interpret(height); + this.refresh(); + }, + + on: function(type, f) {on(this, type, f);}, + off: function(type, f) {off(this, type, f);}, + + operation: function(f){return operation(this, f)();}, + + refresh: function() { + clearCaches(this); + if (this.display.scroller.scrollHeight > this.view.scrollTop) + this.display.scrollbarV.scrollTop = this.display.scroller.scrollTop = this.view.scrollTop; + updateDisplay(this, true); + }, + + getInputField: function(){return this.display.input;}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + + // OPTION DEFAULTS + + var optionHandlers = CodeMirror.optionHandlers = {}; + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) {cm.setValue(val);}, true); + option("mode", null, loadMode, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + loadMode(cm); + clearCaches(cm); + updateDisplay(cm, true); + }, true); + option("electricChars", true); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", keyMapChanged); + option("extraKeys", null); + + option("onKeyEvent", null); + option("onDragEvent", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") {onBlur(cm); cm.display.input.blur();} + else if (!val) resetInput(cm, true); + }); + option("dragDrop", true); + + option("cursorBlinkRate", 530); + option("cursorHeight", 1); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true); + option("pollInterval", 100); + option("undoDepth", 40); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + + option("tabindex", null, function(cm, val) { + cm.display.input.tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) + spec = mimeModes[spec]; + else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) + return CodeMirror.resolveMode("application/xml"); + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + return modeObj; + }; + + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + for (var prop in properties) if (properties.hasOwnProperty(prop)) + exts[prop] = properties[prop]; + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because modes + // sometimes need to do this. + function copyState(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + } + CodeMirror.copyState = copyState; + + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + CodeMirror.startState = startState; + + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});}, + killLine: function(cm) { + var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to); + if (!sel && cm.getLine(from.line).length == from.ch) + cm.replaceRange("", from, {line: from.line + 1, ch: 0}, "delete"); + else cm.replaceRange("", from, sel ? to : {line: from.line}, "delete"); + }, + deleteLine: function(cm) { + var l = cm.getCursor().line; + cm.replaceRange("", {line: l, ch: 0}, {line: l}, "delete"); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + goDocStart: function(cm) {cm.extendSelection({line: 0, ch: 0});}, + goDocEnd: function(cm) {cm.extendSelection({line: cm.lineCount() - 1});}, + goLineStart: function(cm) { + cm.extendSelection(lineStart(cm, cm.getCursor().line)); + }, + goLineStartSmart: function(cm) { + var cur = cm.getCursor(), start = lineStart(cm, cur.line); + var line = cm.getLineHandle(start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch; + cm.extendSelection({line: start.line, ch: inWS ? 0 : firstNonWS}); + } else cm.extendSelection(start); + }, + goLineEnd: function(cm) { + cm.extendSelection(lineEnd(cm, cm.getCursor().line)); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t", "end", "input");}, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.replaceSelection("\t", "end", "input"); + }, + transposeChars: function(cm) { + var cur = cm.getCursor(), line = cm.getLine(cur.line); + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1}); + }, + newlineAndIndent: function(cm) { + operation(cm, function() { + cm.replaceSelection("\n", "end", "input"); + cm.indentLine(cm.getCursor().line, null, true); + })(); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite" + }; + // Note that the save and find-related commands aren't defined by + // default. Unknown commands are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goWordLeft", "Ctrl-Right": "goWordRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delWordBefore", "Ctrl-Delete": "delWordAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goWordLeft", + "Alt-Right": "goWordRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delWordBefore", + "Ctrl-Alt-Backspace": "delWordAfter", "Alt-Delete": "delWordAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + + // KEYMAP DISPATCH + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + + function lookupKey(name, maps, handle, stop) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) { + if (stop) stop(); + return true; + } + if (found != null && handle(found)) return true; + if (map.nofallthrough) { + if (stop) stop(); + return true; + } + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0, e = fallthrough.length; i < e; ++i) { + if (lookup(fallthrough[i])) return true; + } + return false; + } + + for (var i = 0; i < maps.length; ++i) + if (lookup(maps[i])) return true; + } + function isModifierKey(event) { + var name = keyNames[e_prop(event, "keyCode")]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + CodeMirror.isModifierKey = isModifierKey; + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = document.body; + // doc.activeElement occasionally throws on IE + try { hasFocus = document.activeElement; } catch(e) {} + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + // Deplorable hack to make the submit method do the right thing. + on(textarea.form, "submit", save); + var form = textarea.form, realSubmit = form.submit; + try { + form.submit = function wrappedSubmit() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + // The character stream used by a mode's parser. + function StringStream(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + } + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() {return countColumn(this.string, this.start, this.tabSize);}, + indentation: function() {return countColumn(this.string, null, this.tabSize);}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);} + }; + CodeMirror.StringStream = StringStream; + + // TEXTMARKERS + + function TextMarker(cm, type) { + this.lines = []; + this.type = type; + this.cm = cm; + } + + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + startOperation(this.cm); + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.to != null) max = lineNo(line); + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from != null) + min = lineNo(line); + else if (this.collapsed && !lineIsHidden(line)) + updateLineHeight(line, textHeight(this.cm.display)); + } + if (min != null) regChange(this.cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.collapsed && this.cm.view.cantEdit) { + this.cm.view.cantEdit = false; + reCheckSelection(this.cm); + } + endOperation(this.cm); + signalLater(this.cm, this, "clear"); + }; + + TextMarker.prototype.find = function() { + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null || span.to != null) { + var found = lineNo(line); + if (span.from != null) from = {line: found, ch: span.from}; + if (span.to != null) to = {line: found, ch: span.to}; + } + } + if (this.type == "bookmark") return from; + return from && {from: from, to: to}; + }; + + function markText(cm, from, to, options, type) { + var doc = cm.view.doc; + var marker = new TextMarker(cm, type); + if (type == "range" && !posLess(from, to)) return marker; + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + marker[opt] = options[opt]; + if (marker.replacedWith) { + marker.collapsed = true; + marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget"); + } + if (marker.collapsed) sawCollapsedSpans = true; + + var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd; + doc.iter(curLine, to.line + 1, function(line) { + var span = {from: null, to: null, marker: marker}; + size += line.text.length; + if (curLine == from.line) {span.from = from.ch; size -= from.ch;} + if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;} + if (marker.collapsed) { + if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch); + if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch); + else updateLineHeight(line, 0); + } + addMarkedSpan(line, span); + if (marker.collapsed && curLine == from.line && lineIsHidden(line)) + updateLineHeight(line, 0); + ++curLine; + }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (cm.view.history.done.length || cm.view.history.undone.length) + cm.clearHistory(); + } + if (marker.collapsed) { + if (collapsedAtStart != collapsedAtEnd) + throw new Error("Inserting collapsed marker overlapping an existing one"); + marker.size = size; + marker.atomic = true; + } + if (marker.className || marker.startStyle || marker.endStyle || marker.collapsed) + regChange(cm, from.line, to.line + 1); + if (marker.atomic) reCheckSelection(cm); + return marker; + } + + // TEXTMARKER SPANS + + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.lines.push(line); + } + + function markedSpansBefore(old, startCh) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || marker.type == "bookmark" && span.from == startCh) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push({from: span.from, + to: endsAfter ? null : span.to, + marker: marker}); + } + } + return nw; + } + + function markedSpansAfter(old, startCh, endCh) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || marker.type == "bookmark" && span.from == endCh && span.from != startCh) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh, + to: span.to == null ? null : span.to - endCh, + marker: marker}); + } + } + return nw; + } + + function updateMarkedSpans(oldFirst, oldLast, startCh, endCh, newText) { + if (!oldFirst && !oldLast) return newText; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh); + var last = markedSpansAfter(oldLast, startCh, endCh); + + // Next, merge those two ends + var sameLine = newText.length == 1, offset = lst(newText).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + + var newMarkers = [newHL(newText[0], first)]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = newText.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker}); + for (var i = 0; i < gap; ++i) + newMarkers.push(newHL(newText[i+1], gapMarkers)); + newMarkers.push(newHL(lst(newText), last)); + } + return newMarkers; + } + + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var m = markers[i].find(); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (!posLess(m.from, p.to) || posLess(m.to, p.from)) continue; + var newParts = [j, 1]; + if (posLess(p.from, m.from)) newParts.push({from: p.from, to: m.from}); + if (posLess(m.to, p.to)) newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + function collapsedSpanAt(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if ((sp.from == null || sp.from < ch) && + (sp.to == null || sp.to > ch) && + (!found || found.width < sp.marker.width)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); } + function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); } + + function visualLine(doc, line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = getLine(doc, merged.find().from.line); + return line; + } + + function lineIsHidden(line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(line, sp)) + return true; + } + } + window.lineIsHidden = lineIsHidden; + function lineIsHiddenInner(line, span) { + if (span.to == null || span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && sp.from == span.to && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(line, sp)) return true; + } + } + + // hl stands for history-line, a data structure that can be either a + // string (line without markers) or a {text, markedSpans} object. + function hlText(val) { return typeof val == "string" ? val : val.text; } + function hlSpans(val) { + if (typeof val == "string") return null; + var spans = val.markedSpans, out = null; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + function newHL(text, spans) { return spans ? {text: text, markedSpans: spans} : text; } + + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) { + var lines = spans[i].marker.lines; + var ix = indexOf(lines, line); + lines.splice(ix, 1); + } + line.markedSpans = null; + } + + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.lines.push(line); + line.markedSpans = spans; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + function makeLine(text, markedSpans, height) { + var line = {text: text, height: height}; + attachMarkedSpans(line, markedSpans); + if (lineIsHidden(line)) line.height = 0; + return line; + } + + function updateLine(cm, line, text, markedSpans) { + line.text = text; + line.stateAfter = line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + if (lineIsHidden(line)) line.height = 0; + else if (!line.height) line.height = textHeight(cm.display); + signalLater(cm, line, "change"); + } + + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Run the given mode's parser over a line, update the styles + // array, which contains alternating fragments of text and CSS + // classes. + function highlightLine(cm, line, state) { + var mode = cm.view.mode, flattenSpans = cm.options.flattenSpans; + var changed = !line.styles, pos = 0, curText = "", curStyle = null; + var stream = new StringStream(line.text, cm.options.tabSize), st = line.styles || (line.styles = []); + if (line.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state), substr = stream.current(); + stream.start = stream.pos; + if (!flattenSpans || curStyle != style) { + if (curText) { + changed = changed || pos >= st.length || curText != st[pos] || curStyle != st[pos+1]; + st[pos++] = curText; st[pos++] = curStyle; + } + curText = substr; curStyle = style; + } else curText = curText + substr; + // Give up when line is ridiculously long + if (stream.pos > 5000) break; + } + if (curText) { + changed = changed || pos >= st.length || curText != st[pos] || curStyle != st[pos+1]; + st[pos++] = curText; st[pos++] = curStyle; + } + if (stream.pos > 5000) { st[pos++] = line.text.slice(stream.pos); st[pos++] = null; } + if (pos != st.length) { st.length = pos; changed = true; } + return changed; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. + function processLine(cm, line, state) { + var mode = cm.view.mode; + var stream = new StringStream(line.text, cm.options.tabSize); + if (line.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol() && stream.pos <= 5000) { + mode.token(stream, state); + stream.start = stream.pos; + } + } + + var styleToClassCache = {}; + function styleToClass(style) { + if (!style) return null; + return styleToClassCache[style] || + (styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-")); + } + + function lineContent(cm, realLine, measure) { + var merged, line = realLine, lineBefore, sawBefore, simple = true; + while (merged = collapsedSpanAtStart(line)) { + simple = false; + line = getLine(cm.view.doc, merged.find().from.line); + if (!lineBefore) lineBefore = line; + } + + var builder = {pre: elt("pre"), col: 0, pos: 0, display: !measure, + measure: null, addedOne: false, cm: cm}; + if (line.textClass) builder.pre.className = line.textClass; + + do { + if (!line.styles) + highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); + builder.measure = line == realLine && measure; + builder.pos = 0; + builder.addToken = builder.measure ? buildTokenMeasure : buildToken; + if (measure && sawBefore && line != realLine && !builder.addedOne) { + measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure)); + builder.addedOne = true; + } + var next = insertLineContent(line, builder); + sawBefore = line == lineBefore; + if (next) { + line = getLine(cm.view.doc, next.to.line); + simple = false; + } + } while (next); + + if (measure && !builder.addedOne) + measure[0] = builder.pre.appendChild(simple ? elt("span", "\u00a0") : zeroWidthElement(cm.display.measure)); + if (!builder.pre.firstChild && !lineIsHidden(realLine)) + builder.pre.appendChild(document.createTextNode("\u00a0")); + + return builder.pre; + } + + var tokenSpecialChars = /[\t\u0000-\u0019\u200b\u2028\u2029\uFEFF]/g; + function buildToken(builder, text, style, startStyle, endStyle) { + if (!text) return; + if (!tokenSpecialChars.test(text)) { + builder.col += text.length; + var content = document.createTextNode(text); + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + tokenSpecialChars.lastIndex = pos; + var m = tokenSpecialChars.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + content.appendChild(document.createTextNode(text.slice(pos, pos + skipped))); + builder.col += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + builder.col += tabWidth; + } else { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + m[0].charCodeAt(0).toString(16); + content.appendChild(token); + builder.col += 1; + } + } + } + if (style || startStyle || endStyle || builder.measure) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + return builder.pre.appendChild(elt("span", [content], fullStyle)); + } + builder.pre.appendChild(content); + } + + function buildTokenMeasure(builder, text, style, startStyle, endStyle) { + for (var i = 0; i < text.length; ++i) { + if (i && i < text.length - 1 && + builder.cm.options.lineWrapping && + spanAffectsWrapping.test(text.slice(i - 1, i + 1))) + builder.pre.appendChild(elt("wbr")); + builder.measure[builder.pos++] = + buildToken(builder, text.charAt(i), style, + i == 0 && startStyle, i == text.length - 1 && endStyle); + } + if (text.length) builder.addedOne = true; + } + + function buildCollapsedSpan(builder, size, widget) { + if (widget) { + if (!builder.display) widget = widget.cloneNode(true); + builder.pre.appendChild(widget); + if (builder.measure && size) { + builder.measure[builder.pos] = widget; + builder.addedOne = true; + } + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder) { + var st = line.styles, spans = line.markedSpans; + if (!spans) { + for (var i = 0; i < st.length; i+=2) + builder.addToken(builder, st[i], styleToClass(st[i+1])); + return; + } + + var allText = line.text, len = allText.length; + var pos = 0, i = 0, text = "", style; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = ""; + collapsed = null; nextChange = Infinity; + var foundBookmark = null; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (sp.from <= pos && (sp.to == null || sp.to > pos)) { + if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } + if (m.className) spanStyle += " " + m.className; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; + if (m.collapsed && (!collapsed || collapsed.marker.width < m.width)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + if (m.type == "bookmark" && sp.from == pos && m.replacedWith) + foundBookmark = m.replacedWith; + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos, + collapsed.from != null && collapsed.marker.replacedWith); + if (collapsed.to == null) return collapsed.marker.find(); + } + if (foundBookmark && !collapsed) buildCollapsedSpan(builder, 0, foundBookmark); + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style + spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : ""); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = st[i++]; style = styleToClass(st[i++]); + } + } + } + + // DOCUMENT DATA STRUCTURE + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, e = lines.length, height = 0; i < e; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + remove: function(at, n, cm) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(cm, line, "delete"); + } + this.lines.splice(at, n); + }, + collapse: function(lines) { + lines.splice.apply(lines, [lines.length, 0].concat(this.lines)); + }, + insertHeight: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this; + }, + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0, e = children.length; i < e; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + remove: function(at, n, callbacks) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.remove(at, rm, callbacks); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + if (this.size - n < 25) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines); + }, + insert: function(at, lines) { + var height = 0; + for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height; + this.insertHeight(at, lines, height); + }, + insertHeight: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertHeight(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iter: function(from, to, op) { this.iterN(from, to - from, op); }, + iterN: function(at, n, op) { + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + // LINE UTILITIES + + function getLine(chunk, n) { + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + function updateLineHeight(line, height) { + var diff = height - line.height; + for (var n = line; n; n = n.parent) n.height += diff; + } + + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no; + } + + function lineAtHeight(chunk, h) { + var n = 0; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0, e = chunk.lines.length; i < e; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + function heightAtLine(cm, lineObj) { + lineObj = visualLine(cm.view.doc, lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function makeHistory() { + return { + // Arrays of history events. Doing something adds an event to + // done and clears undo. Undoing moves events from done to + // undone, redoing moves them in the other direction. + done: [], undone: [], + // Used to track when changes can be merged into a single undo + // event + lastTime: 0, lastOp: null, lastOrigin: null, + // Used by the isClean() method + dirtyCounter: 0 + }; + } + + function addChange(cm, start, added, old, origin, fromBefore, toBefore, fromAfter, toAfter) { + var history = cm.view.history; + history.undone.length = 0; + var time = +new Date, cur = lst(history.done); + + if (cur && + (history.lastOp == cm.curOp.id || + history.lastOrigin == origin && (origin == "input" || origin == "delete") && + history.lastTime > time - 600)) { + // Merge this change into the last event + var last = lst(cur.events); + if (last.start > start + old.length || last.start + last.added < start) { + // Doesn't intersect with last sub-event, add new sub-event + cur.events.push({start: start, added: added, old: old}); + } else { + // Patch up the last sub-event + var startBefore = Math.max(0, last.start - start), + endAfter = Math.max(0, (start + old.length) - (last.start + last.added)); + for (var i = startBefore; i > 0; --i) last.old.unshift(old[i - 1]); + for (var i = endAfter; i > 0; --i) last.old.push(old[old.length - i]); + if (startBefore) last.start = start; + last.added += added - (old.length - startBefore - endAfter); + } + cur.fromAfter = fromAfter; cur.toAfter = toAfter; + } else { + // Can not be merged, start a new event. + cur = {events: [{start: start, added: added, old: old}], + fromBefore: fromBefore, toBefore: toBefore, fromAfter: fromAfter, toAfter: toAfter}; + history.done.push(cur); + while (history.done.length > cm.options.undoDepth) + history.done.shift(); + if (history.dirtyCounter < 0) + // The user has made a change after undoing past the last clean state. + // We can never get back to a clean state now until markClean() is called. + history.dirtyCounter = NaN; + else + history.dirtyCounter++; + } + history.lastTime = time; + history.lastOp = cm.curOp.id; + history.lastOrigin = origin; + } + + // EVENT OPERATORS + + function stopMethod() {e_stop(this);} + // Ensure an event has a stop method. + function addStop(event) { + if (!event.stop) event.stop = stopMethod; + return event; + } + + function e_preventDefault(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + function e_stopPropagation(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + CodeMirror.e_stop = e_stop; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // Allow 3rd-party code to override event properties by adding an override + // object to an event object. + function e_prop(e, prop) { + var overridden = e.override && e.override.hasOwnProperty(prop); + return overridden ? e.override[prop] : e[prop]; + } + + // EVENT HANDLING + + function on(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + } + + function off(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + for (var i = 0; i < arr.length; ++i) + if (arr[i] == f) { arr.splice(i, 1); break; } + } + } + + function signal(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); + } + + function signalLater(cm, emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 3), flist = cm.curOp && cm.curOp.delayedCallbacks; + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + if (flist) flist.push(bnd(arr[i])); + else arr[i].apply(null, args); + } + + function hasHandler(emitter, type) { + var arr = emitter._handlers && emitter._handlers[type]; + return arr && arr.length > 0; + } + + CodeMirror.on = on; CodeMirror.off = off; CodeMirror.signal = signal; + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerCutOff = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + function Delayed() {this.id = null;} + Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}}; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = 0, n = 0; i < end; ++i) { + if (string.charAt(i) == "\t") n += tabSize - (n % tabSize); + else ++n; + } + return n; + } + CodeMirror.countColumn = countColumn; + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + function selectInput(node) { + if (ios) { // Mobile Safari apparently has a bug where select() is broken. + node.selectionStart = 0; + node.selectionEnd = node.value.length; + } else node.select(); + } + + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + + function emptyArray(size) { + for (var a = [], i = 0; i < size; ++i) a.push(undefined); + return a; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc]/; + function isWordChar(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + } + + function isEmpty(obj) { + var c = 0; + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) ++c; + return !c; + } + + var isExtendingChar = /[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F]/; + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") setTextContent(e, content); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + function removeChildren(e) { + e.innerHTML = ""; + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + function setTextContent(e, str) { + if (ie_lt9) { + e.innerHTML = ""; + e.appendChild(document.createTextNode(str)); + } else e.textContent = str; + } + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_lt9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + // For a reason I have yet to figure out, some browsers disallow + // word wrapping between certain characters *only* if a new inline + // element is started between them. This makes it hard to reliably + // measure the position of things, since that requires inserting an + // extra span. This terribly fragile set of regexps matches the + // character combinations that suffer from this phenomenon on the + // various browsers. + var spanAffectsWrapping = /^$/; // Won't match any two-character string + if (gecko) spanAffectsWrapping = /$'/; + else if (safari) spanAffectsWrapping = /\-[^ \-?]|\?[^ !'\"\),.\-\/:;\?\]\}]/; + else if (chrome) spanAffectsWrapping = /\-[^ \-\.?]|\?[^ \-\.?\]\}:;!'\"\),\/]|[\.!\"#&%\)*+,:;=>\]|\}~][\(\{\[<]|\$'/; + + var knownScrollbarWidth; + function scrollbarWidth(measure) { + if (knownScrollbarWidth != null) return knownScrollbarWidth; + var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll"); + removeChildrenAndAdd(measure, test); + if (test.offsetWidth) + knownScrollbarWidth = test.offsetHeight - test.clientHeight; + return knownScrollbarWidth || 0; + } + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_lt8; + } + if (zwspSupported) return elt("span", "\u200b"); + else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + CodeMirror.splitLines = splitLines; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == 'function'; + })(); + + // KEY NAMING + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete", + 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home", + 63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from) + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + } + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.view.doc, lineN); + var visual = visualLine(cm.view.doc, line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return {line: lineN, ch: ch}; + } + function lineEnd(cm, lineNo) { + var merged, line; + while (merged = collapsedSpanAtEnd(line = getLine(cm.view.doc, lineNo))) + lineNo = merged.find().to.line; + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return {line: lineNo, ch: ch}; + } + + // This is somewhat involved. It is needed in order to move + // 'visually' through bi-directional text -- i.e., pressing left + // should make the cursor go left, even when in RTL text. The + // tricky part is the 'jumps', where RTL and LTR text touch each + // other. This often requires the cursor offset to move more than + // one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var moveOneUnit = byUnit ? function(pos, dir) { + do pos += dir; + while (pos > 0 && isExtendingChar.test(line.text.charAt(pos))); + return pos; + } : function(pos, dir) { return pos + dir; }; + var linedir = bidi[0].level; + for (var i = 0; i < bidi.length; ++i) { + var part = bidi[i], sticky = part.level % 2 == linedir; + if ((part.from < start && part.to > start) || + (sticky && (part.from == start || part.to == start))) break; + } + var target = moveOneUnit(start, part.level % 2 ? -dir : dir); + + while (target != null) { + if (part.level % 2 == linedir) { + if (target < part.from || target > part.to) { + part = bidi[i += dir]; + target = part && (dir > 0 == part.level % 2 ? moveOneUnit(part.to, -1) : moveOneUnit(part.from, 1)); + } else break; + } else { + if (target == bidiLeft(part)) { + part = bidi[--i]; + target = part && bidiRight(part); + } else if (target == bidiRight(part)) { + part = bidi[++i]; + target = part && bidiLeft(part); + } else break; + } + } + + return target < 0 || target > line.text.length ? null : target; + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar.test(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr"; + function charType(code) { + if (code <= 0xff) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600); + else if (0x700 <= code && code <= 0x8ac) return "r"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + + return function charOrdering(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = [], startType = null; + for (var i = 0, type; i < len; ++i) { + types.push(type = charType(str.charCodeAt(i))); + if (startType == null) { + if (type == "L") startType = "L"; + else if (type == "R" || type == "r") startType = "R"; + } + } + if (startType == null) startType = "L"; + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = startType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = startType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len - 1 && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = startType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : startType) == "L"; + var after = (end < len - 1 ? types[end] : startType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push({from: start, to: i, level: 0}); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, {from: pos, to: j, level: 1}); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, {from: nstart, to: j, level: 2}); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, {from: pos, to: i, level: 1}); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift({from: 0, to: m[0].length, level: 0}); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push({from: len - m[0].length, to: len, level: 0}); + } + if (order[0].level != lst(order).level) + order.push({from: len, to: len, level: order[0].level}); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "3.0"; + + return CodeMirror; +})(); + +/* autogeneration */ +define("lib/codemirror.js", [], function(){}); + +/* @source mod/overlay.js */; + +// Utility function that allows modes to be combined. The mode given +// as the base argument takes care of most of the normal mode +// functionality, but a second (typically simple) mode is used, which +// can override the style of text. Both modes get to parse all of the +// text, but when both assign a non-null style to a piece of code, the +// overlay wins, unless the combine argument was true, in which case +// the styles are combined. + +// overlayParser is the old, deprecated name +define('mod/overlay', [ + "codemirror" +], function(CodeMirror){ +CodeMirror.overlayMode = CodeMirror.overlayParser = function(base, overlay, combine) { + return { + startState: function() { + return { + base: CodeMirror.startState(base), + overlay: CodeMirror.startState(overlay), + basePos: 0, baseCur: null, + overlayPos: 0, overlayCur: null + }; + }, + copyState: function(state) { + return { + base: CodeMirror.copyState(base, state.base), + overlay: CodeMirror.copyState(overlay, state.overlay), + basePos: state.basePos, baseCur: null, + overlayPos: state.overlayPos, overlayCur: null + }; + }, + + token: function(stream, state) { + if (stream.start == state.basePos) { + state.baseCur = base.token(stream, state.base); + state.basePos = stream.pos; + } + if (stream.start == state.overlayPos) { + stream.pos = stream.start; + state.overlayCur = overlay.token(stream, state.overlay); + state.overlayPos = stream.pos; + } + stream.pos = Math.min(state.basePos, state.overlayPos); + if (stream.eol()) state.basePos = state.overlayPos = 0; + + if (state.overlayCur == null) return state.baseCur; + if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur; + else return state.overlayCur; + }, + + indent: base.indent && function(state, textAfter) { + return base.indent(state.base, textAfter); + }, + electricChars: base.electricChars, + + innerMode: function(state) { return {state: state.base, mode: base}; }, + + blankLine: function(state) { + if (base.blankLine) base.blankLine(state.base); + if (overlay.blankLine) overlay.blankLine(state.overlay); + } + }; +}; +}); + +/* @source mod/loadmode.js */; + +define('mod/loadmode', [ + "codemirror" +], function(CodeMirror){ +(function() { + if (!CodeMirror.modeURL) CodeMirror.modeURL = "/static/js/lib/mode/%N.js"; + + var loading = {}; + function splitCallback(cont, n) { + var countDown = n; + return function() { if (--countDown == 0) cont(); }; + } + function ensureDeps(mode, cont) { + var deps = CodeMirror.modes[mode].dependencies; + if (!deps) return cont(); + var missing = []; + for (var i = 0; i < deps.length; ++i) { + if (!CodeMirror.modes.hasOwnProperty(deps[i])) + missing.push(deps[i]); + } + if (!missing.length) return cont(); + var split = splitCallback(cont, missing.length); + for (var i = 0; i < missing.length; ++i) + CodeMirror.requireMode(missing[i], split); + } + + CodeMirror.requireMode = function(mode, cont) { + if (typeof mode != "string") mode = mode.name; + if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); + if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); + + var script = document.createElement("script"); + script.src = CodeMirror.modeURL.replace(/%N/g, mode); + var others = document.getElementsByTagName("script")[0]; + others.parentNode.insertBefore(script, others); + var list = loading[mode] = [cont]; + var count = 0, poll = setInterval(function() { + if (++count > 100) return clearInterval(poll); + if (CodeMirror.modes.hasOwnProperty(mode)) { + clearInterval(poll); + loading[mode] = null; + ensureDeps(mode, function() { + for (var i = 0; i < list.length; ++i) list[i](); + }); + } + }, 200); + }; + + CodeMirror.autoLoadMode = function(instance, mode) { + if (!CodeMirror.modes.hasOwnProperty(mode)) + CodeMirror.requireMode(mode, function() { + //instance.setOption("mode", instance.getOption("mode")); + instance.setOption("mode", mode); + }); + }; +}()); + +}); + +/* @source mod/editor.js */; + +define('mod/editor', [ + "jquery", + "codemirror", + "mod/loadmode", + "mod/overlay" +], function ($, CodeMirror) { + + $(function(){ + var editor = CodeMirror.fromTextArea($('.commit_form textarea[name="code"]')[0], { + mode: {name: "python", version: 2, singleLineStringErrors: false}, + lineNumbers: true, + indentUnit: 4, + tabMode: "shift", + matchBrackets: true + }); + CodeMirror.autoLoadMode(editor, 'python'); + + return editor + }); +}); + +/* @source */; + +define('codemirror', ['lib/codemirror.js'], function(none){ + return CodeMirror; +}); + +require(['codemirror', 'mod/editor', 'mod/zclip'], function(){ + //do any thing? +}); diff --git a/dist/js/app/src/src.js b/dist/js/app/src/src.js new file mode 100644 index 0000000..db733c0 --- /dev/null +++ b/dist/js/app/src/src.js @@ -0,0 +1,2582 @@ + +require.config({ enable_ozma: true }); + + +/* @source lib/jquery.commits-graph.js */; + +/* + * jQuery Commits Graph - v0.1.3 + * A jQuery plugin to display git commits graph using HTML5/Canvas. + * https://github.com/tclh123/commits-graph + * + * Copyright (c) 2014 + * MIT License + */ + +// -- Route -------------------------------------------------------- + +function Route( commit, data, options ) { + var self = this; + + self._data = data; + self.commit = commit; + self.options = options; + self.from = data[0]; + self.to = data[1]; + self.branch = data[2]; +} + +Route.prototype.drawRoute = function ( ctx ) { + var self = this; + + var from_x = self.options.width * self.options.scaleFactor - (self.from + 1) * self.options.x_step * self.options.scaleFactor; + var from_y = (self.commit.idx + 0.5) * self.options.y_step * self.options.scaleFactor; + + var to_x = self.options.width * self.options.scaleFactor - (self.to + 1) * self.options.x_step * self.options.scaleFactor; + var to_y = (self.commit.idx + 0.5 + 1) * self.options.y_step * self.options.scaleFactor; + + + ctx.strokeStyle = self.commit.graph.get_color(self.branch); + ctx.beginPath(); + ctx.moveTo(from_x, from_y); + if (from_x == to_x) { + ctx.lineTo(to_x, to_y); + } else { + ctx.bezierCurveTo(from_x - self.options.x_step * self.options.scaleFactor / 4, + from_y + self.options.y_step * self.options.scaleFactor / 3 * 2, + to_x + self.options.x_step * self.options.scaleFactor / 4, + to_y - self.options.y_step * self.options.scaleFactor / 3 * 2, + to_x, to_y); + } + ctx.stroke(); +} + +// -- Commit Node -------------------------------------------------------- + +function Commit(graph, idx, data, options ) { + var self = this; + + self._data = data; + self.graph = graph; + self.idx = idx; + self.options = options; + self.sha = data[0]; + self.dot = data[1]; + self.dot_offset = self.dot[0]; + self.dot_branch = self.dot[1]; + self.routes = $.map(data[2], function(e) { return new Route(self, e, options) }); +} + +Commit.prototype.drawDot = function ( ctx ) { + var self = this; + + var x = self.options.width * self.options.scaleFactor - (self.dot_offset + 1) * self.options.x_step * self.options.scaleFactor; + var y = (self.idx + 0.5) * self.options.y_step * self.options.scaleFactor; + + // ctx.strokeStyle = self.graph.get_color(self.dot_branch); + ctx.fillStyle = self.graph.get_color(self.dot_branch); + ctx.beginPath(); + var radius = 3; + ctx.arc(x, y, radius * self.options.scaleFactor, 0, 2 * Math.PI, true); + // ctx.stroke(); + ctx.fill(); +} + +// -- Graph Canvas -------------------------------------------------------- + +function backingScale() { + if ('devicePixelRatio' in window) { + if (window.devicePixelRatio > 1) { + return window.devicePixelRatio; + } + } + return 1; +} + +function GraphCanvas( data, options ) { + var self = this; + + self.data = data; + self.options = options; + self.canvas = document.createElement("canvas"); + self.canvas.style.height = options.height + "px"; + self.canvas.style.width = options.width + "px"; + self.canvas.height = options.height; + self.canvas.width = options.width; + + var scaleFactor = backingScale(); + if (scaleFactor > 1) { + self.canvas.width = self.canvas.width * scaleFactor; + self.canvas.height = self.canvas.height * scaleFactor; + } + self.options.scaleFactor = scaleFactor + + // or use context.scale(2,2) // not tested + + self.colors = [ + "#e11d21" + //, "#eb6420" + , "#fbca04" + , "#009800" + , "#006b75" + , "#207de5" + , "#0052cc" + , "#5319e7" + , "#f7c6c7" + , "#fad8c7" + , "#fef2c0" + , "#bfe5bf" + , "#c7def8" + , "#bfdadc" + , "#bfd4f2" + , "#d4c5f9" + , "#cccccc" + , "#84b6eb" + , "#e6e6e6" + , "#ffffff" + , "#cc317c" + ] + // self.branch_color = {}; +} + +GraphCanvas.prototype.toHTML = function () { + var self = this; + + self.draw(); + + return $(self.canvas); +}; + +GraphCanvas.prototype.get_color = function (branch) { + var self = this; + + var n = self.colors.length; + return self.colors[branch % n]; +}; + +/* + +[ + sha, + [offset, branch], //dot + [ + [from, to, branch], // route1 + [from, to, branch], // route2 + [from, to, branch], + ] // routes +], + +*/ +// draw +GraphCanvas.prototype.draw = function () { + var self = this, + ctx = self.canvas.getContext("2d"); + + ctx.lineWidth = 2; + console.log(self.data); + + var n_commits = self.data.length; + for (var i=0; i
    ').append(this); + $div.data('media.origHTML', $temp.html()); // store original markup + } + + // post-conversion callback, passes original element, new div element and fully populated options + if (typeof f2 == 'function') f2(this, $div[0], o, player.name); + break; + } + }); +}; + +/** + * Non-chainable method for adding or changing file format / player mapping + * @name mapFormat + * @param String format File format extension (ie: mov, wav, mp3) + * @param String player Player name to use for the format (one of: flash, quicktime, realplayer, winmedia, silverlight or iframe + */ +$.fn.media.mapFormat = function(format, player) { + if (!format || !player || !$.fn.media.defaults.players[player]) return; // invalid + format = format.toLowerCase(); + if (isDigit(format[0])) format = 'fn' + format; + $.fn.media[format] = $.fn.media[player]; + $.fn.media[format+'_player'] = $.fn.media.defaults.players[player]; +}; + +// global defautls; override as needed +$.fn.media.defaults = { + standards: true, // use object tags only (no embeds for non-IE browsers) + canUndo: true, // tells plugin to store the original markup so it can be reverted via: $(sel).mediaUndo() + width: 400, + height: 400, + autoplay: 0, // normalized cross-player setting + bgColor: '#ffffff', // background color + params: { wmode: 'transparent'}, // added to object element as param elements; added to embed element as attrs + attrs: {}, // added to object and embed elements as attrs + flvKeyName: 'file', // key used for object src param (thanks to Andrea Ercolino) + flashvars: {}, // added to flash content as flashvars param/attr + flashVersion: '7', // required flash version + expressInstaller: null, // src for express installer + + // default flash video and mp3 player (@see: http://jeroenwijering.com/?item=Flash_Media_Player) + flvPlayer: 'mediaplayer.swf', + mp3Player: 'mediaplayer.swf', + + // @see http://msdn2.microsoft.com/en-us/library/bb412401.aspx + silverlight: { + inplaceInstallPrompt: 'true', // display in-place install prompt? + isWindowless: 'true', // windowless mode (false for wrapping markup) + framerate: '24', // maximum framerate + version: '0.9', // Silverlight version + onError: null, // onError callback + onLoad: null, // onLoad callback + initParams: null, // object init params + userContext: null // callback arg passed to the load callback + } +}; + +// Media Players; think twice before overriding +$.fn.media.defaults.players = { + flash: { + name: 'flash', + title: 'Flash', + types: 'flv,mp3,swf', + mimetype: 'application/x-shockwave-flash', + pluginspage: 'http://www.adobe.com/go/getflashplayer', + ieAttrs: { + classid: 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000', + type: 'application/x-oleobject', + codebase: 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + $.fn.media.defaults.flashVersion + } + }, + quicktime: { + name: 'quicktime', + title: 'QuickTime', + mimetype: 'video/quicktime', + pluginspage: 'http://www.apple.com/quicktime/download/', + types: 'aif,aiff,aac,au,bmp,gsm,mov,mid,midi,mpg,mpeg,mp4,m4a,psd,qt,qtif,qif,qti,snd,tif,tiff,wav,3g2,3gp', + ieAttrs: { + classid: 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', + codebase: 'http://www.apple.com/qtactivex/qtplugin.cab' + } + }, + realplayer: { + name: 'real', + title: 'RealPlayer', + types: 'ra,ram,rm,rpm,rv,smi,smil', + mimetype: 'audio/x-pn-realaudio-plugin', + pluginspage: 'http://www.real.com/player/', + autoplayAttr: 'autostart', + ieAttrs: { + classid: 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA' + } + }, + winmedia: { + name: 'winmedia', + title: 'Windows Media', + types: 'asx,asf,avi,wma,wmv', + mimetype: isFirefoxWMPPluginInstalled() ? 'application/x-ms-wmp' : 'application/x-mplayer2', + pluginspage: 'http://www.microsoft.com/Windows/MediaPlayer/', + autoplayAttr: 'autostart', + oUrl: 'url', + ieAttrs: { + classid: 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6', + type: 'application/x-oleobject' + } + }, + // special cases + img: { + name: 'img', + title: 'Image', + types: 'gif,png,jpg' + }, + iframe: { + name: 'iframe', + types: 'html,pdf' + }, + silverlight: { + name: 'silverlight', + types: 'xaml' + } +}; + +// +// everything below here is private +// + + +// detection script for FF WMP plugin (http://www.therossman.org/experiments/wmp_play.html) +// (hat tip to Mark Ross for this script) +function isFirefoxWMPPluginInstalled() { + var plugs = navigator.plugins || []; + for (var i = 0; i < plugs.length; i++) { + var plugin = plugs[i]; + if (plugin['filename'] == 'np-mswmp.dll') + return true; + } + return false; +} + +var counter = 1; + +for (var player in $.fn.media.defaults.players) { + var types = $.fn.media.defaults.players[player].types; + $.each(types.split(','), function(i,o) { + if (isDigit(o[0])) o = 'fn' + o; + $.fn.media[o] = $.fn.media[player] = getGenerator(player); + $.fn.media[o+'_player'] = $.fn.media.defaults.players[player]; + }); +}; + +function getTypesRegExp() { + var types = ''; + for (var player in $.fn.media.defaults.players) { + if (types.length) types += ','; + types += $.fn.media.defaults.players[player].types; + }; + return new RegExp('\\.(' + types.replace(/,/ig,'|') + ')\\b'); +}; + +function getGenerator(player) { + return function(el, options) { + return generate(el, options, player); + }; +}; + +function isDigit(c) { + return '0123456789'.indexOf(c) > -1; +}; + +// flatten all possible options: global defaults, meta, option obj +function getSettings(el, options) { + options = options || {}; + var $el = $(el); + var cls = el.className || ''; + // support metadata plugin (v1.0 and v2.0) + var meta = $.metadata ? $el.metadata() : $.meta ? $el.data() : {}; + meta = meta || {}; + var w = meta.width || parseInt(((cls.match(/\bw:(\d+)/)||[])[1]||0)) || parseInt(((cls.match(/\bwidth:(\d+)/)||[])[1]||0)); + var h = meta.height || parseInt(((cls.match(/\bh:(\d+)/)||[])[1]||0)) || parseInt(((cls.match(/\bheight:(\d+)/)||[])[1]||0)) + + if (w) meta.width = w; + if (h) meta.height = h; + if (cls) meta.cls = cls; + + // crank html5 style data attributes + var dataName = 'data-'; + for (var i=0; i < el.attributes.length; i++) { + var a = el.attributes[i], n = $.trim(a.name); + var index = n.indexOf(dataName); + if (index === 0) { + n = n.substring(dataName.length); + meta[n] = a.value; + } + } + + var a = $.fn.media.defaults; + var b = options; + var c = meta; + + var p = { params: { bgColor: options.bgColor || $.fn.media.defaults.bgColor } }; + var opts = $.extend({}, a, b, c); + $.each(['attrs','params','flashvars','silverlight'], function(i,o) { + opts[o] = $.extend({}, p[o] || {}, a[o] || {}, b[o] || {}, c[o] || {}); + }); + + if (typeof opts.caption == 'undefined') opts.caption = $el.text(); + + // make sure we have a source! + opts.src = opts.src || $el.attr('href') || $el.attr('src') || 'unknown'; + return opts; +}; + +// +// Flash Player +// + +// generate flash using SWFObject library if possible +$.fn.media.swf = function(el, opts) { + if (!window.SWFObject && !window.swfobject) { + // roll our own + if (opts.flashvars) { + var a = []; + for (var f in opts.flashvars) + a.push(f + '=' + opts.flashvars[f]); + if (!opts.params) opts.params = {}; + opts.params.flashvars = a.join('&'); + } + return generate(el, opts, 'flash'); + } + + var id = el.id ? (' id="'+el.id+'"') : ''; + var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; + var $div = $(''); + + // swfobject v2+ + if (window.swfobject) { + $(el).after($div).appendTo($div); + if (!el.id) el.id = 'movie_player_' + counter++; + + // replace el with swfobject content + swfobject.embedSWF(opts.src, el.id, opts.width, opts.height, opts.flashVersion, + opts.expressInstaller, opts.flashvars, opts.params, opts.attrs); + } + // swfobject < v2 + else { + $(el).after($div).remove(); + var so = new SWFObject(opts.src, 'movie_player_' + counter++, opts.width, opts.height, opts.flashVersion, opts.bgColor); + if (opts.expressInstaller) so.useExpressInstall(opts.expressInstaller); + + for (var p in opts.params) + if (p != 'bgColor') so.addParam(p, opts.params[p]); + for (var f in opts.flashvars) + so.addVariable(f, opts.flashvars[f]); + so.write($div[0]); + } + + if (opts.caption) $('
    ').appendTo($div).html(opts.caption); + return $div; +}; + +// map flv and mp3 files to the swf player by default +$.fn.media.flv = $.fn.media.mp3 = function(el, opts) { + var src = opts.src; + var player = /\.mp3\b/i.test(src) ? opts.mp3Player : opts.flvPlayer; + var key = opts.flvKeyName; + src = encodeURIComponent(src); + opts.src = player; + opts.src = opts.src + '?'+key+'=' + (src); + var srcObj = {}; + srcObj[key] = src; + opts.flashvars = $.extend({}, srcObj, opts.flashvars ); + return $.fn.media.swf(el, opts); +}; + +// +// Silverlight +// +$.fn.media.xaml = function(el, opts) { + if (!window.Sys || !window.Sys.Silverlight) { + if ($.fn.media.xaml.warning) return; + $.fn.media.xaml.warning = 1; + alert('You must include the Silverlight.js script.'); + return; + } + + var props = { + width: opts.width, + height: opts.height, + background: opts.bgColor, + inplaceInstallPrompt: opts.silverlight.inplaceInstallPrompt, + isWindowless: opts.silverlight.isWindowless, + framerate: opts.silverlight.framerate, + version: opts.silverlight.version + }; + var events = { + onError: opts.silverlight.onError, + onLoad: opts.silverlight.onLoad + }; + + var id1 = el.id ? (' id="'+el.id+'"') : ''; + var id2 = opts.id || 'AG' + counter++; + // convert element to div + var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; + var $div = $(''); + $(el).after($div).remove(); + + Sys.Silverlight.createObjectEx({ + source: opts.src, + initParams: opts.silverlight.initParams, + userContext: opts.silverlight.userContext, + id: id2, + parentElement: $div[0], + properties: props, + events: events + }); + + if (opts.caption) $('
    ').appendTo($div).html(opts.caption); + return $div; +}; + +// +// generate object/embed markup +// +function generate(el, opts, player) { + var $el = $(el); + var o = $.fn.media.defaults.players[player]; + + if (player == 'iframe') { + o = $(''); + o.attr('src', opts.src); + o.css('backgroundColor', o.bgColor); + } + else if (player == 'img') { + o = $(''); + o.attr('src', opts.src); + opts.width && o.attr('width', opts.width); + opts.height && o.attr('height', opts.height); + o.css('backgroundColor', o.bgColor); + } + else if (lameIE) { + var a = [''); + var p = ['']; + for (var key in opts.params) + p.push(''); + var o = document.createElement(a.join('')); + for (var i=0; i < p.length; i++) + o.appendChild(document.createElement(p[i])); + } + else if (opts.standards) { + // Rewritten to be standards compliant by Richard Connamacher + var a = [''); + a.push(''); + for (var key in opts.params) { + if (key == 'wmode' && player != 'flash') // FF3/Quicktime borks on wmode + continue; + a.push(''); + } + // Alternate HTML + a.push('

    '+o.title+' Required

    '+o.title+' is required to view this media. Download Here.

    '); + a.push(''); + } + else { + var a = [''); + } + // convert element to div + var id = el.id ? (' id="'+el.id+'"') : ''; + var cls = opts.cls ? (' class="' + opts.cls + '"') : ''; + var $div = $(''); + $el.after($div).remove(); + (lameIE || player == 'iframe' || player == 'img') ? $div.append(o) : $div.html(a.join('')); + if (opts.caption) $('
    ').appendTo($div).html(opts.caption); + return $div; +}; + + +})(jQuery); + +/* autogeneration */ +define("jquery-media", [], function(){}); + +/* @source lib/jquery.pjax.js */; + +// jquery.pjax.js +// copyright chris wanstrath +// https://github.com/defunkt/jquery-pjax + +(function($){ + +// When called on a container with a selector, fetches the href with +// ajax into the container or with the data-pjax attribute on the link +// itself. +// +// Tries to make sure the back button and ctrl+click work the way +// you'd expect. +// +// Exported as $.fn.pjax +// +// Accepts a jQuery ajax options object that may include these +// pjax specific options: +// +// +// container - Where to stick the response body. Usually a String selector. +// $(container).html(xhr.responseBody) +// (default: current jquery context) +// push - Whether to pushState the URL. Defaults to true (of course). +// replace - Want to use replaceState instead? That's cool. +// +// For convenience the second parameter can be either the container or +// the options object. +// +// Returns the jQuery object +function fnPjax(selector, container, options) { + var context = this + return this.on('click.pjax', selector, function(event) { + var opts = $.extend({}, optionsFor(container, options)) + if (!opts.container) + opts.container = $(this).attr('data-pjax') || context + handleClick(event, opts) + }) +} + +// Public: pjax on click handler +// +// Exported as $.pjax.click. +// +// event - "click" jQuery.Event +// options - pjax options +// +// Examples +// +// $(document).on('click', 'a', $.pjax.click) +// // is the same as +// $(document).pjax('a') +// +// $(document).on('click', 'a', function(event) { +// var container = $(this).closest('[data-pjax-container]') +// $.pjax.click(event, container) +// }) +// +// Returns nothing. +function handleClick(event, container, options) { + options = optionsFor(container, options) + + var link = event.currentTarget + + if (link.tagName.toUpperCase() !== 'A') + throw "$.fn.pjax or $.pjax.click requires an anchor element" + + // Middle click, cmd click, and ctrl click should open + // links in a new tab as normal. + if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ) + return + + // Ignore cross origin links + if ( location.protocol !== link.protocol || location.hostname !== link.hostname ) + return + + // Ignore anchors on the same page + if (link.hash && link.href.replace(link.hash, '') === + location.href.replace(location.hash, '')) + return + + // Ignore empty anchor "foo.html#" + if (link.href === location.href + '#') + return + + // Ignore event with default prevented + if (event.isDefaultPrevented()) + return + + var defaults = { + url: link.href, + container: $(link).attr('data-pjax'), + target: link + } + + var opts = $.extend({}, defaults, options) + var clickEvent = $.Event('pjax:click') + $(link).trigger(clickEvent, [opts]) + + if (!clickEvent.isDefaultPrevented()) { + pjax(opts) + event.preventDefault() + $(link).trigger('pjax:clicked', [opts]) + } +} + +// Public: pjax on form submit handler +// +// Exported as $.pjax.submit +// +// event - "click" jQuery.Event +// options - pjax options +// +// Examples +// +// $(document).on('submit', 'form', function(event) { +// var container = $(this).closest('[data-pjax-container]') +// $.pjax.submit(event, container) +// }) +// +// Returns nothing. +function handleSubmit(event, container, options) { + options = optionsFor(container, options) + + var form = event.currentTarget + + if (form.tagName.toUpperCase() !== 'FORM') + throw "$.pjax.submit requires a form element" + + var defaults = { + type: form.method.toUpperCase(), + url: form.action, + data: $(form).serializeArray(), + container: $(form).attr('data-pjax'), + target: form + } + + pjax($.extend({}, defaults, options)) + + event.preventDefault() +} + +// Loads a URL with ajax, puts the response body inside a container, +// then pushState()'s the loaded URL. +// +// Works just like $.ajax in that it accepts a jQuery ajax +// settings object (with keys like url, type, data, etc). +// +// Accepts these extra keys: +// +// container - Where to stick the response body. +// $(container).html(xhr.responseBody) +// push - Whether to pushState the URL. Defaults to true (of course). +// replace - Want to use replaceState instead? That's cool. +// +// Use it just like $.ajax: +// +// var xhr = $.pjax({ url: this.href, container: '#main' }) +// console.log( xhr.readyState ) +// +// Returns whatever $.ajax returns. +function pjax(options) { + options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options) + + if ($.isFunction(options.url)) { + options.url = options.url() + } + + var target = options.target + + var hash = parseURL(options.url).hash + + var context = options.context = findContainerFor(options.container) + + // We want the browser to maintain two separate internal caches: one + // for pjax'd partial page loads and one for normal page loads. + // Without adding this secret parameter, some browsers will often + // confuse the two. + if (!options.data) options.data = {} + options.data._pjax = context.selector + + function fire(type, args, props) { + if (!props) props = {} + props.relatedTarget = target + var event = $.Event(type, props) + context.trigger(event, args) + return !event.isDefaultPrevented() + } + + var timeoutTimer + + options.beforeSend = function(xhr, settings) { + // No timeout for non-GET requests + // Its not safe to request the resource again with a fallback method. + if (settings.type !== 'GET') { + settings.timeout = 0 + } + + xhr.setRequestHeader('X-PJAX', 'true') + xhr.setRequestHeader('X-PJAX-Container', context.selector) + + if (!fire('pjax:beforeSend', [xhr, settings])) + return false + + if (settings.timeout > 0) { + timeoutTimer = setTimeout(function() { + if (fire('pjax:timeout', [xhr, options])) + xhr.abort('timeout') + }, settings.timeout) + + // Clear timeout setting so jquerys internal timeout isn't invoked + settings.timeout = 0 + } + + options.requestUrl = parseURL(settings.url).href + } + + options.complete = function(xhr, textStatus) { + if (timeoutTimer) + clearTimeout(timeoutTimer) + + fire('pjax:complete', [xhr, textStatus, options]) + + fire('pjax:end', [xhr, options]) + } + + options.error = function(xhr, textStatus, errorThrown) { + var container = extractContainer("", xhr, options) + + var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options]) + if (options.type == 'GET' && textStatus !== 'abort' && allowed) { + locationReplace(container.url) + } + } + + options.success = function(data, status, xhr) { + var previousState = pjax.state; + + // If $.pjax.defaults.version is a function, invoke it first. + // Otherwise it can be a static string. + var currentVersion = (typeof $.pjax.defaults.version === 'function') ? + $.pjax.defaults.version() : + $.pjax.defaults.version + + var latestVersion = xhr.getResponseHeader('X-PJAX-Version') + + var container = extractContainer(data, xhr, options) + + // If there is a layout version mismatch, hard load the new url + if (currentVersion && latestVersion && currentVersion !== latestVersion) { + locationReplace(container.url) + return + } + + // If the new response is missing a body, hard load the page + if (!container.contents) { + locationReplace(container.url) + return + } + + pjax.state = { + id: options.id || uniqueId(), + url: container.url, + title: container.title, + container: context.selector, + fragment: options.fragment, + timeout: options.timeout + } + + if (options.push || options.replace) { + window.history.replaceState(pjax.state, container.title, container.url) + } + + // Clear out any focused controls before inserting new page contents. + try { + document.activeElement.blur() + } catch (e) { } + + if (container.title) document.title = container.title + + fire('pjax:beforeReplace', [container.contents, options], { + state: pjax.state, + previousState: previousState + }) + context.html(container.contents) + + // FF bug: Won't autofocus fields that are inserted via JS. + // This behavior is incorrect. So if theres no current focus, autofocus + // the last field. + // + // http://www.w3.org/html/wg/drafts/html/master/forms.html + var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0] + if (autofocusEl && document.activeElement !== autofocusEl) { + autofocusEl.focus(); + } + + executeScriptTags(container.scripts) + + // Scroll to top by default + if (typeof options.scrollTo === 'number') + $(window).scrollTop(options.scrollTo) + + // If the URL has a hash in it, make sure the browser + // knows to navigate to the hash. + if ( hash !== '' ) { + // Avoid using simple hash set here. Will add another history + // entry. Replace the url with replaceState and scroll to target + // by hand. + // + // window.location.hash = hash + var url = parseURL(container.url) + url.hash = hash + + pjax.state.url = url.href + window.history.replaceState(pjax.state, container.title, url.href) + + var target = $(url.hash) + if (target.length) $(window).scrollTop(target.offset().top) + } + + fire('pjax:success', [data, status, xhr, options]) + } + + + // Initialize pjax.state for the initial page load. Assume we're + // using the container and options of the link we're loading for the + // back button to the initial page. This ensures good back button + // behavior. + if (!pjax.state) { + pjax.state = { + id: uniqueId(), + url: window.location.href, + title: document.title, + container: context.selector, + fragment: options.fragment, + timeout: options.timeout + } + window.history.replaceState(pjax.state, document.title) + } + + // Cancel the current request if we're already pjaxing + var xhr = pjax.xhr + if ( xhr && xhr.readyState < 4) { + xhr.onreadystatechange = $.noop + xhr.abort() + } + + pjax.options = options + var xhr = pjax.xhr = $.ajax(options) + + if (xhr.readyState > 0) { + if (options.push && !options.replace) { + // Cache current container element before replacing it + cachePush(pjax.state.id, context.clone().contents()) + + window.history.pushState(null, "", stripPjaxParam(options.requestUrl)) + } + + fire('pjax:start', [xhr, options]) + fire('pjax:send', [xhr, options]) + } + + return pjax.xhr +} + +// Public: Reload current page with pjax. +// +// Returns whatever $.pjax returns. +function pjaxReload(container, options) { + var defaults = { + url: window.location.href, + push: false, + replace: true, + scrollTo: false + } + + return pjax($.extend(defaults, optionsFor(container, options))) +} + +// Internal: Hard replace current state with url. +// +// Work for around WebKit +// https://bugs.webkit.org/show_bug.cgi?id=93506 +// +// Returns nothing. +function locationReplace(url) { + window.history.replaceState(null, "", "#") + window.location.replace(url) +} + + +var initialPop = true +var initialURL = window.location.href +var initialState = window.history.state + +// Initialize $.pjax.state if possible +// Happens when reloading a page and coming forward from a different +// session history. +if (initialState && initialState.container) { + pjax.state = initialState +} + +// Non-webkit browsers don't fire an initial popstate event +if ('state' in window.history) { + initialPop = false +} + +// popstate handler takes care of the back and forward buttons +// +// You probably shouldn't use pjax on pages with other pushState +// stuff yet. +function onPjaxPopstate(event) { + var previousState = pjax.state; + var state = event.state + + if (state && state.container) { + // When coming forward from a separate history session, will get an + // initial pop with a state we are already at. Skip reloading the current + // page. + if (initialPop && initialURL == state.url) return + + // If popping back to the same state, just skip. + // Could be clicking back from hashchange rather than a pushState. + if (pjax.state && pjax.state.id === state.id) return + + var container = $(state.container) + if (container.length) { + var direction, contents = cacheMapping[state.id] + + if (pjax.state) { + // Since state ids always increase, we can deduce the history + // direction from the previous state. + direction = pjax.state.id < state.id ? 'forward' : 'back' + + // Cache current container before replacement and inform the + // cache which direction the history shifted. + cachePop(direction, pjax.state.id, container.clone().contents()) + } + + var popstateEvent = $.Event('pjax:popstate', { + state: state, + direction: direction + }) + container.trigger(popstateEvent) + + var options = { + id: state.id, + url: state.url, + container: container, + push: false, + fragment: state.fragment, + timeout: state.timeout, + scrollTo: false + } + + if (contents) { + container.trigger('pjax:start', [null, options]) + + pjax.state = state + if (state.title) document.title = state.title + var beforeReplaceEvent = $.Event('pjax:beforeReplace', { + state: state, + previousState: previousState + }) + container.trigger(beforeReplaceEvent, [contents, options]) + container.html(contents) + + container.trigger('pjax:end', [null, options]) + } else { + pjax(options) + } + + // Force reflow/relayout before the browser tries to restore the + // scroll position. + container[0].offsetHeight + } else { + locationReplace(location.href) + } + } + initialPop = false +} + +// Fallback version of main pjax function for browsers that don't +// support pushState. +// +// Returns nothing since it retriggers a hard form submission. +function fallbackPjax(options) { + var url = $.isFunction(options.url) ? options.url() : options.url, + method = options.type ? options.type.toUpperCase() : 'GET' + + var form = $('
    ', { + method: method === 'GET' ? 'GET' : 'POST', + action: url, + style: 'display:none' + }) + + if (method !== 'GET' && method !== 'POST') { + form.append($('', { + type: 'hidden', + name: '_method', + value: method.toLowerCase() + })) + } + + var data = options.data + if (typeof data === 'string') { + $.each(data.split('&'), function(index, value) { + var pair = value.split('=') + form.append($('', {type: 'hidden', name: pair[0], value: pair[1]})) + }) + } else if (typeof data === 'object') { + for (key in data) + form.append($('', {type: 'hidden', name: key, value: data[key]})) + } + + $(document.body).append(form) + form.submit() +} + +// Internal: Generate unique id for state object. +// +// Use a timestamp instead of a counter since ids should still be +// unique across page loads. +// +// Returns Number. +function uniqueId() { + return (new Date).getTime() +} + +// Internal: Strips _pjax param from url +// +// url - String +// +// Returns String. +function stripPjaxParam(url) { + return url + .replace(/\?_pjax=[^&]+&?/, '?') + .replace(/_pjax=[^&]+&?/, '') + .replace(/[\?&]$/, '') +} + +// Internal: Parse URL components and returns a Locationish object. +// +// url - String URL +// +// Returns HTMLAnchorElement that acts like Location. +function parseURL(url) { + var a = document.createElement('a') + a.href = url + return a +} + +// Internal: Build options Object for arguments. +// +// For convenience the first parameter can be either the container or +// the options object. +// +// Examples +// +// optionsFor('#container') +// // => {container: '#container'} +// +// optionsFor('#container', {push: true}) +// // => {container: '#container', push: true} +// +// optionsFor({container: '#container', push: true}) +// // => {container: '#container', push: true} +// +// Returns options Object. +function optionsFor(container, options) { + // Both container and options + if ( container && options ) + options.container = container + + // First argument is options Object + else if ( $.isPlainObject(container) ) + options = container + + // Only container + else + options = {container: container} + + // Find and validate container + if (options.container) + options.container = findContainerFor(options.container) + + return options +} + +// Internal: Find container element for a variety of inputs. +// +// Because we can't persist elements using the history API, we must be +// able to find a String selector that will consistently find the Element. +// +// container - A selector String, jQuery object, or DOM Element. +// +// Returns a jQuery object whose context is `document` and has a selector. +function findContainerFor(container) { + container = $(container) + + if ( !container.length ) { + throw "no pjax container for " + container.selector + } else if ( container.selector !== '' && container.context === document ) { + return container + } else if ( container.attr('id') ) { + return $('#' + container.attr('id')) + } else { + throw "cant get selector for pjax container!" + } +} + +// Internal: Filter and find all elements matching the selector. +// +// Where $.fn.find only matches descendants, findAll will test all the +// top level elements in the jQuery object as well. +// +// elems - jQuery object of Elements +// selector - String selector to match +// +// Returns a jQuery object. +function findAll(elems, selector) { + return elems.filter(selector).add(elems.find(selector)); +} + +function parseHTML(html) { + return $.parseHTML(html, document, true) +} + +// Internal: Extracts container and metadata from response. +// +// 1. Extracts X-PJAX-URL header if set +// 2. Extracts inline tags +// 3. Builds response Element and extracts fragment if set +// +// data - String response data +// xhr - XHR response +// options - pjax options Object +// +// Returns an Object with url, title, and contents keys. +function extractContainer(data, xhr, options) { + var obj = {} + + // Prefer X-PJAX-URL header if it was set, otherwise fallback to + // using the original requested url. + obj.url = stripPjaxParam(xhr.getResponseHeader('X-PJAX-URL') || options.requestUrl) + + // Attempt to parse response html into elements + if (/<html/i.test(data)) { + var $head = $(parseHTML(data.match(/<head[^>]*>([\s\S.]*)<\/head>/i)[0])) + var $body = $(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0])) + } else { + var $head = $body = $(parseHTML(data)) + } + + // If response data is empty, return fast + if ($body.length === 0) + return obj + + // If there's a <title> tag in the header, use it as + // the page's title. + obj.title = findAll($head, 'title').last().text() + + if (options.fragment) { + // If they specified a fragment, look for it in the response + // and pull it out. + if (options.fragment === 'body') { + var $fragment = $body + } else { + var $fragment = findAll($body, options.fragment).first() + } + + if ($fragment.length) { + obj.contents = $fragment.contents() + + // If there's no title, look for data-title and title attributes + // on the fragment + if (!obj.title) + obj.title = $fragment.attr('title') || $fragment.data('title') + } + + } else if (!/<html/i.test(data)) { + obj.contents = $body + } + + // Clean up any <title> tags + if (obj.contents) { + // Remove any parent title elements + obj.contents = obj.contents.not(function() { return $(this).is('title') }) + + // Then scrub any titles from their descendants + obj.contents.find('title').remove() + + // Gather all script[src] elements + obj.scripts = findAll(obj.contents, 'script[src]').remove() + obj.contents = obj.contents.not(obj.scripts) + } + + // Trim any whitespace off the title + if (obj.title) obj.title = $.trim(obj.title) + + return obj +} + +// Load an execute scripts using standard script request. +// +// Avoids jQuery's traditional $.getScript which does a XHR request and +// globalEval. +// +// scripts - jQuery object of script Elements +// +// Returns nothing. +function executeScriptTags(scripts) { + if (!scripts) return + + var existingScripts = $('script[src]') + + scripts.each(function() { + var src = this.src + var matchedScripts = existingScripts.filter(function() { + return this.src === src + }) + if (matchedScripts.length) return + + var script = document.createElement('script') + script.type = $(this).attr('type') + script.src = $(this).attr('src') + document.head.appendChild(script) + }) +} + +// Internal: History DOM caching class. +var cacheMapping = {} +var cacheForwardStack = [] +var cacheBackStack = [] + +// Push previous state id and container contents into the history +// cache. Should be called in conjunction with `pushState` to save the +// previous container contents. +// +// id - State ID Number +// value - DOM Element to cache +// +// Returns nothing. +function cachePush(id, value) { + cacheMapping[id] = value + cacheBackStack.push(id) + + // Remove all entires in forward history stack after pushing + // a new page. + while (cacheForwardStack.length) + delete cacheMapping[cacheForwardStack.shift()] + + // Trim back history stack to max cache length. + while (cacheBackStack.length > pjax.defaults.maxCacheLength) + delete cacheMapping[cacheBackStack.shift()] +} + +// Shifts cache from directional history cache. Should be +// called on `popstate` with the previous state id and container +// contents. +// +// direction - "forward" or "back" String +// id - State ID Number +// value - DOM Element to cache +// +// Returns nothing. +function cachePop(direction, id, value) { + var pushStack, popStack + cacheMapping[id] = value + + if (direction === 'forward') { + pushStack = cacheBackStack + popStack = cacheForwardStack + } else { + pushStack = cacheForwardStack + popStack = cacheBackStack + } + + pushStack.push(id) + if (id = popStack.pop()) + delete cacheMapping[id] +} + +// Public: Find version identifier for the initial page load. +// +// Returns String version or undefined. +function findVersion() { + return $('meta').filter(function() { + var name = $(this).attr('http-equiv') + return name && name.toUpperCase() === 'X-PJAX-VERSION' + }).attr('content') +} + +// Install pjax functions on $.pjax to enable pushState behavior. +// +// Does nothing if already enabled. +// +// Examples +// +// $.pjax.enable() +// +// Returns nothing. +function enable() { + $.fn.pjax = fnPjax + $.pjax = pjax + $.pjax.enable = $.noop + $.pjax.disable = disable + $.pjax.click = handleClick + $.pjax.submit = handleSubmit + $.pjax.reload = pjaxReload + $.pjax.defaults = { + timeout: 650, + push: true, + replace: false, + type: 'GET', + dataType: 'html', + scrollTo: 0, + maxCacheLength: 20, + version: findVersion + } + $(window).on('popstate.pjax', onPjaxPopstate) +} + +// Disable pushState behavior. +// +// This is the case when a browser doesn't support pushState. It is +// sometimes useful to disable pushState for debugging on a modern +// browser. +// +// Examples +// +// $.pjax.disable() +// +// Returns nothing. +function disable() { + $.fn.pjax = function() { return this } + $.pjax = fallbackPjax + $.pjax.enable = enable + $.pjax.disable = $.noop + $.pjax.click = $.noop + $.pjax.submit = $.noop + $.pjax.reload = function() { window.location.reload() } + + $(window).off('popstate.pjax', onPjaxPopstate) +} + + +// Add the state property to jQuery's event object so we can use it in +// $(window).bind('popstate') +if ( $.inArray('state', $.event.props) < 0 ) + $.event.props.push('state') + +// Is pjax supported by this browser? +$.support.pjax = + window.history && window.history.pushState && window.history.replaceState && + // pushState isn't reliable on iOS until 5. + !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/) + +$.support.pjax ? enable() : disable() + +})(jQuery); + +/* autogeneration */ +define("pjax", [], function(){}); + +/* @source lib/string_score.js */; + +/*! + * string_score.js: String Scoring Algorithm 0.1.10 + * + * http://joshaven.com/string_score + * https://github.com/joshaven/string_score + * + * Copyright (C) 2009-2011 Joshaven Potter <yourtech@gmail.com> + * Special thanks to all of the contributors listed here https://github.com/joshaven/string_score + * MIT license: http://www.opensource.org/licenses/mit-license.php + * + * Date: Tue Mar 1 2011 +*/ + +/** + * Scores a string against another string. + * 'Hello World'.score('he'); //=> 0.5931818181818181 + * 'Hello World'.score('Hello'); //=> 0.7318181818181818 + */ +String.prototype.score = function(abbreviation, fuzziness) { + // If the string is equal to the abbreviation, perfect match. + if (this == abbreviation) {return 1;} + //if it's not a perfect match and is empty return 0 + if(abbreviation == "") {return 0;} + + var total_character_score = 0, + abbreviation_length = abbreviation.length, + string = this, + string_length = string.length, + start_of_string_bonus, + abbreviation_score, + fuzzies=1, + final_score; + + // Walk through abbreviation and add up scores. + for (var i = 0, + character_score/* = 0*/, + index_in_string/* = 0*/, + c/* = ''*/, + index_c_lowercase/* = 0*/, + index_c_uppercase/* = 0*/, + min_index/* = 0*/; + i < abbreviation_length; + ++i) { + + // Find the first case-insensitive match of a character. + c = abbreviation.charAt(i); + + index_c_lowercase = string.indexOf(c.toLowerCase()); + index_c_uppercase = string.indexOf(c.toUpperCase()); + min_index = Math.min(index_c_lowercase, index_c_uppercase); + index_in_string = (min_index > -1) ? min_index : Math.max(index_c_lowercase, index_c_uppercase); + + if (index_in_string === -1) { + if (fuzziness) { + fuzzies += 1-fuzziness; + continue; + } else { + return 0; + } + } else { + character_score = 0.1; + } + + // Set base score for matching 'c'. + + // Same case bonus. + if (string[index_in_string] === c) { + character_score += 0.1; + } + + // Consecutive letter & start-of-string Bonus + if (index_in_string === 0) { + // Increase the score when matching first character of the remainder of the string + character_score += 0.6; + if (i === 0) { + // If match is the first character of the string + // & the first character of abbreviation, add a + // start-of-string match bonus. + start_of_string_bonus = 1 //true; + } + } + else { + // Acronym Bonus + // Weighing Logic: Typing the first character of an acronym is as if you + // preceded it with two perfect character matches. + if (string.charAt(index_in_string - 1) === ' ') { + character_score += 0.8; // * Math.min(index_in_string, 5); // Cap bonus at 0.4 * 5 + } + } + + // Left trim the already matched part of the string + // (forces sequential matching). + string = string.substring(index_in_string + 1, string_length); + + total_character_score += character_score; + } // end of for loop + + // Uncomment to weigh smaller words higher. + // return total_character_score / string_length; + + abbreviation_score = total_character_score / abbreviation_length; + //percentage_of_matched_string = abbreviation_length / string_length; + //word_score = abbreviation_score * percentage_of_matched_string; + + // Reduce penalty for longer strings. + //final_score = (word_score + abbreviation_score) / 2; + final_score = ((abbreviation_score * (abbreviation_length / string_length)) + abbreviation_score) / 2; + + final_score = final_score / fuzzies; + + if (start_of_string_bonus && (final_score + 0.15 < 1)) { + final_score += 0.15; + } + + return final_score; +}; + +/* autogeneration */ +define("string-score", [], function(){}); + +/* @source lib/keymaster.js */; + +// keymaster.js +// (c) 2011-2012 Thomas Fuchs +// keymaster.js may be freely distributed under the MIT license. + +;(function(global){ + var k, + _handlers = {}, + _mods = { 16: false, 18: false, 17: false, 91: false }, + _scope = 'all', + // modifier keys + _MODIFIERS = { + '⇧': 16, shift: 16, + '⌥': 18, alt: 18, option: 18, + '⌃': 17, ctrl: 17, control: 17, + '⌘': 91, command: 91 + }, + // special keys + _MAP = { + backspace: 8, tab: 9, clear: 12, + enter: 13, 'return': 13, + esc: 27, escape: 27, space: 32, + left: 37, up: 38, + right: 39, down: 40, + del: 46, 'delete': 46, + home: 36, end: 35, + pageup: 33, pagedown: 34, + ',': 188, '.': 190, '/': 191, + '`': 192, '-': 189, '=': 187, + ';': 186, '\'': 222, + '[': 219, ']': 221, '\\': 220 + }, + _downKeys = []; + + for(k=1;k<20;k++) _MODIFIERS['f'+k] = 111+k; + + // IE doesn't support Array#indexOf, so have a simple replacement + function index(array, item){ + var i = array.length; + while(i--) if(array[i]===item) return i; + return -1; + } + + // handle keydown event + function dispatch(event, scope){ + var key, handler, k, i, modifiersMatch; + key = event.keyCode; + + if (index(_downKeys, key) == -1) { + _downKeys.push(key); + } + + // if a modifier key, set the key.<modifierkeyname> property to true and return + if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko + if(key in _mods) { + _mods[key] = true; + // 'assignKey' from inside this closure is exported to window.key + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true; + return; + } + + // see if we need to ignore the keypress (filter() can can be overridden) + // by default ignore key presses if a select, textarea, or input is focused + if(!assignKey.filter.call(this, event)) return; + + // abort if no potentially matching shortcuts found + if (!(key in _handlers)) return; + + // for each potential shortcut + for (i = 0; i < _handlers[key].length; i++) { + handler = _handlers[key][i]; + + // see if it's in the current scope + if(handler.scope == scope || handler.scope == 'all'){ + // check if modifiers match if any + modifiersMatch = handler.mods.length > 0; + for(k in _mods) + if((!_mods[k] && index(handler.mods, +k) > -1) || + (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false; + // call the handler and stop the event if neccessary + if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ + if(handler.method(event, handler)===false){ + if(event.preventDefault) event.preventDefault(); + else event.returnValue = false; + if(event.stopPropagation) event.stopPropagation(); + if(event.cancelBubble) event.cancelBubble = true; + } + } + } + } + }; + + // unset modifier keys on keyup + function clearModifier(event){ + var key = event.keyCode, k, + i = index(_downKeys, key); + + // remove key from _downKeys + if (i >= 0) { + _downKeys.splice(i, 1); + } + + if(key == 93 || key == 224) key = 91; + if(key in _mods) { + _mods[key] = false; + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false; + } + }; + + function resetModifiers() { + for(k in _mods) _mods[k] = false; + for(k in _MODIFIERS) assignKey[k] = false; + } + + // parse and assign shortcut + function assignKey(key, scope, method){ + var keys, mods, i, mi; + if (method === undefined) { + method = scope; + scope = 'all'; + } + key = key.replace(/\s/g,''); + keys = key.split(','); + + if((keys[keys.length-1])=='') + keys[keys.length-2] += ','; + // for each shortcut + for (i = 0; i < keys.length; i++) { + // set modifier keys if any + mods = []; + key = keys[i].split('+'); + if(key.length > 1){ + mods = key.slice(0,key.length-1); + for (mi = 0; mi < mods.length; mi++) + mods[mi] = _MODIFIERS[mods[mi]]; + key = [key[key.length-1]]; + } + // convert to keycode and... + key = key[0] + key = _MAP[key] || key.toUpperCase().charCodeAt(0); + // ...store handler + if (!(key in _handlers)) _handlers[key] = []; + _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods }); + } + }; + + // Returns true if the key with code 'keyCode' is currently down + // Converts strings into key codes. + function isPressed(keyCode) { + if (typeof(keyCode)=='string') { + if (keyCode.length == 1) { + keyCode = (keyCode.toUpperCase()).charCodeAt(0); + } else { + return false; + } + } + return index(_downKeys, keyCode) != -1; + } + + function getPressedKeyCodes() { + return _downKeys; + } + + function filter(event){ + var tagName = (event.target || event.srcElement).tagName; + // ignore keypressed in any elements that support keyboard data input + return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA'); + } + + // initialize key.<modifier> to false + for(k in _MODIFIERS) assignKey[k] = false; + + // set current scope (default 'all') + function setScope(scope){ _scope = scope || 'all' }; + function getScope(){ return _scope || 'all' }; + + // delete all handlers for a given scope + function deleteScope(scope){ + var key, handlers, i; + + for (key in _handlers) { + handlers = _handlers[key]; + for (i = 0; i < handlers.length; ) { + if (handlers[i].scope === scope) handlers.splice(i, 1); + else i++; + } + } + }; + + // cross-browser events + function addEvent(object, event, method) { + if (object.addEventListener) + object.addEventListener(event, method, false); + else if(object.attachEvent) + object.attachEvent('on'+event, function(){ method(window.event) }); + }; + + // set the handlers globally on document + addEvent(document, 'keydown', function(event) { dispatch(event, _scope) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 + addEvent(document, 'keyup', clearModifier); + + // reset modifiers to false whenever the window is (re)focused. + addEvent(window, 'focus', resetModifiers); + + // store previously defined key + var previousKey = global.key; + + // restore previously defined key and return reference to our key object + function noConflict() { + var k = global.key; + global.key = previousKey; + return k; + } + + // set window.key and window.key.set/get/deleteScope, and the default filter + global.key = assignKey; + global.key.setScope = setScope; + global.key.getScope = getScope; + global.key.deleteScope = deleteScope; + global.key.filter = filter; + global.key.isPressed = isPressed; + global.key.getPressedKeyCodes = getPressedKeyCodes; + global.key.noConflict = noConflict; + + if(typeof module !== 'undefined') module.exports = key; + +})(this); + +/* autogeneration */ +define("lib/keymaster.js", [], function(){}); + +/* @source mod/zclip.js */; + +define('mod/zclip', [ + "jquery", + "jquery-zclip" +], function($, _) { + $(function () { + $('input.git-url').focus(function(e) { + var elem = this; + setTimeout(function() { + elem.select(); + }, 0); + }); + $('.copy-git-url').zclip({ + path: '/static/js/lib/ZeroClipboard.swf', + copy: function() { + return $('.copy-git-url').attr('data-clipboard-text'); + }, + afterCopy: function() {} + }); + }); +}); + +/* @source mod/shortcut.js */; + +define('mod/shortcut', [ + "jquery", + "key" +], function($, key){ + // add shortcut key + var forkBtn = $('#fork-btn'), pullreqBtn = $('#pullrequest-btn'); + /* + if (forkBtn) { + forkBtn.click(function () { + window.location.href = forkBtn.attr("href"); + }); + key('f', function () {forkBtn.click();}); + } + */ + if (pullreqBtn) { + pullreqBtn.click(function () { + window.location.href = pullreqBtn.attr("href"); + }); + key('p', function () {pullreqBtn.click();}); + } +}); + +/* @source mod/fetch.js */; + +define('mod/fetch', [ + "jquery" +], function($){ + + $(function() { + var fetch_btn = $("#fetch-btn"); + var proj_id = fetch_btn.attr("proj_id"); + + fetch_btn.click(function() { + $.ajax("/fetch/"+proj_id, { + type: "POST", + success: function(data) { + if (!data.error) { + show_success("后台已经开始更新仓库,请耐心等待."); + } else { + show_error("仓库更新失败."); + } + }, + error: function(e) { + show_error("仓库更新失败."); + } + }); + }); + + function show_success(msg) { + var successDiv = $(".navbar .success"); + if (successDiv.size() === 0 ) { + successDiv= $("<div>").addClass("success").addClass("alert-success").addClass("alert"); + $("div.pagehead").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(5000, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("<div>").addClass("error").addClass("alert-error").addClass("alert"); + $("div.pagehead").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); + +/* @source mod/watch.js */; + +define('mod/watch', [ + "jquery" +], function($){ + + $(function() { + var watch_btn = $("#watch-btn"); + var countLabel = $('#watched-count'); + var proj_id = watch_btn.attr("proj_id"); + + var updateLabelBy = function (n) { + var count = Number(countLabel.text()) || 0; + if (count === 0 && n <= 0) { return; } + + count += n; + countLabel.text(count.toString()); + }; + + watch_btn.click(function() { + + if(watch_btn.hasClass('watch')) { + $.post("/watch/"+proj_id, function(data) { + if (!data.error) { + watch_btn.text('Unwatch'); + watch_btn.addClass('unwatch'); + watch_btn.removeClass('watch'); + updateLabelBy(1); + } else { + // show error notification to user + show_error("关注失败"); + } + }); + } + else{ + $.ajax("/watch/"+proj_id, { + type: "DELETE", + success: function(data) { + if (!data.error) { + watch_btn.text('Watch'); + watch_btn.addClass('watch'); + watch_btn.removeClass('unwatch'); + updateLabelBy(-1); + } else { + show_error("取消关注失败"); + } + }, + error: function(e) { + show_error("取消关注失败"); + } + }); + } + }); + + function show_success(msg) { + var successDiv = $(".navbar .success"); + if (successDiv.size() === 0 ) { + successDiv= $("<div>").addClass("success").addClass("alert-success"); + $("div.navbar").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(1500, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("<div>").addClass("error").addClass("alert-error"); + $("div.navbar").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); + +/* @source mod/type_search.js */; + +define('mod/type_search',[ + "jquery", + "string-score" +], function() { + var typeSearching = false, + projectName = $('#project_name').val(), + currentBranch = $('#current_branch').val(), + fileList, + fileListContainer, + fileListContainerBody, + searchInput = $('<input class="typing-search-input" type="text" autocomplete="off" spellcheck="false">'), + subPathsEle = $('#J_SubPaths'), + FILE_PATH_PREFIX = ['', projectName, 'blob', currentBranch, ''].join('/'), + TAG_MARK = 'mark', + TPL_FILE_LIST_WRAP = '\ + <div class="span12">\ + <table class="tree-browser finder" cellspacing="0" cellpadding="0">\ + <tbody>{ITEMS}</tbody>\ + </table>\ + </div>', + TPL_FILE_LIST_ITEM = '<tr class="tree-item"><td><a href="' + FILE_PATH_PREFIX + '{URL}">{NAME}</td></tr>', + CSS = '\ + input.typing-search-input { display:none; border:none; box-shadow:none; border-radius:none; padding:0; margin-bottom:0; font-size:100%; vertical-align:top; transition:none; }\ + input.typing-search-input:focus { box-shadow:none; }\ + .tree-browser.finder td { padding-left:20px; }\ + .tree-browser.finder tr.hover td { background:#fffeeb; }', + + SCROLLING_HOVER_LOCK = false, + CLICK_LOCK = false, + BLACK_LIST = { 'INPUT': 1, 'TEXTAREA': 1 }; + LOCK_TIMEOUT = 150; + + $('<style>' + CSS + '</style>').appendTo('head'); + + // insert search input + searchInput.insertAfter(subPathsEle); + $(document) + .keydown(function(evt) { + if (typeSearching && evt.keyCode === 27) { + searchInput.blur(); + + evt.preventDefault(); + } + }) + + .keypress(function(evt) { + if (typeSearching || evt.target.nodeName in BLACK_LIST ) return; + + if (!evt.metaKey && evt.charCode === 't'.charCodeAt(0)) { + + typeSearching = true; + + var def = $.Deferred(); + + if (!fileList) { + $.get('/api/' + projectName + '/git/allfiles', {'branch': currentBranch}, function(res) { + fileList = res; + fileListContainer = $(TPL_FILE_LIST_WRAP.replace('{ITEMS}', buildFileListHtml(fileList))).appendTo('.raw'); + fileListContainerBody = fileListContainer.find('tbody'); + + fileListContainerBody + .bind('mouseover mouseout', function(evt) { + // console.log('mouse') + if (SCROLLING_HOVER_LOCK) return; + + var target = evt.target, + ele; + + if (target.nodeName === 'TR') { + ele = $(target); + } else { + ele = $(target).parents('tr'); + } + + if (ele) { + $(this).find('tr').removeClass('hover'); + + if (evt.type === 'mouseover') { + ele.addClass('hover'); + } else { + ele.removeClass('hover'); + } + } + + }) + + .click(function(evt) { + var target = evt.target; + + if (target.nodeName !== 'A') { + window.location = $(target).find('a').attr('href'); + } + + CLICK_LOCK = true; + }); + + def.resolve(); + }, 'json'); + } else { + def.resolve(); + } + + def.done(function() { + searchInput.focus(); + }); + + evt.preventDefault(); + } + }); + + searchInput + .focus(function(evt) { + $(this).show(); + + subPathsEle.hide(); + + fileListContainerBody.html(buildFileListHtml(fileList)); + fileListContainer.show(); + $('#tree').hide(); + $('#readme').hide(); + }) + + .blur(function(evt) { + var self = this; + + setTimeout(function() { + if (CLICK_LOCK) return; + + $(self).hide().val(''); + + subPathsEle.show(); + + fileListContainer && fileListContainer.hide(); + $('#tree').show(); + $('#readme').show(); + + typeSearching = false; + }, LOCK_TIMEOUT); + }) + + .keydown(function(evt) { + var keyCode, item; + + if ((keyCode = evt.keyCode) === 27 || !typeSearching || !fileList) { + return; + } + + switch (keyCode) { + // UP + case 38: + fileSelect(-1); + evt.preventDefault(); + return; + // DOWN + case 40: + fileSelect(1); + evt.preventDefault(); + return; + // ENTER + case 13: + item = fileListContainerBody.find('tr.hover'); + item.click(); + return; + } + + var ele = this; + + setTimeout(function() { + var value = $.trim(ele.value), + result; + + if (!value) { + result = fileList; + } else { + // match + result = matchFileList(fileList, value); + + // sort + result = sortFileList(result); + + // get final fileList + result = $.map(result, function(item) { + return item.file; + }); + + } + + // fileListContainerBody.html(buildFileListHtml(result)); + fileListContainerBody[0].innerHTML = buildFileListHtml(result, value); + + }, 0); + + evt.stopPropagation(); + }); + + function buildFileListHtml(fileList, keyword) { + var html = ''; + + fileList.forEach(function(fileName) { + var name = fileName; + if (keyword) { + name = name.replace(keyword, '<' + TAG_MARK + '>' + keyword + '</' + TAG_MARK + '>'); + } + html += TPL_FILE_LIST_ITEM.replace(/\{URL\}/g, fileName).replace(/\{NAME\}/g, name); + }); + + return html; + } + + function matchFileList(fileList, keyword) { + var result = []; + + fileList.forEach(function(file) { + var score; + if (score = file.score(keyword)) { + result.push({ + score: score, + file: file + }); + } + }); + + return result; + } + + function sortFileList(fileListWithScore) { + return fileListWithScore.sort(function(a, b) { + return b.score - a.score; + }); + } + + function fileSelect(direction) { + var currentFileItem = fileListContainerBody.find('tr.hover'), + fileItems, fileItem; + + if (currentFileItem.length === 0) { + fileItems = fileListContainerBody.find('tr'); + fileItem = direction === 1 ? fileItems.eq(0) : fileItems.eq(-1); + } else { + fileItem = direction === 1 ? currentFileItem.next() : currentFileItem.prev(); + + if (fileItem.length === 0) { + fileItems = fileListContainerBody.find('tr'); + // scroll loop + fileItem = direction === 1 ? fileItems.eq(0) : fileItems.eq(-1); + } + } + + currentFileItem.removeClass('hover'); + fileItem.addClass('hover'); + + scrollIntoView(fileItem); + } + + var lockTimer; + + function scrollIntoView(element) { + element = $(element); + + var offsetTop = element.offset().top, + scrollTop = $(document).scrollTop(), + viewPortHeight = $(window).height(), + diff; + + if ( (diff = offsetTop - scrollTop) <= 0 || + (diff = offsetTop + element.height() - (scrollTop + viewPortHeight)) >= 0 ) { + + window.scrollTo(0, scrollTop + diff); + + // prevent scrolling trigger mouse event + // console.log('lock') + SCROLLING_HOVER_LOCK = true; + + if (lockTimer) { + clearTimeout(lockTimer); + lockTimer = null; + } + + lockTimer = setTimeout(function() { + // console.log('unlock') + SCROLLING_HOVER_LOCK = false; + }, LOCK_TIMEOUT); + } + + } + +}); + +/* @source */; + +define('key', ['lib/keymaster.js'], function(none){ + return key; +}); +define('string-score', 'lib/string_score.js'); +define('jquery-media', 'lib/jquery.media.js'); +define('jquery-commits-graph', 'lib/jquery.commits-graph.js'); +define('pjax', 'lib/jquery.pjax.js'); + +require(['jquery' +, 'spin' +, 'jquery-timeago' +, 'bootstrap' +, 'mod/type_search' +, 'mod/watch' +, 'mod/fetch' +, 'mod/shortcut' +, 'mod/zclip' +, 'key' +, 'string-score' +, 'pjax' +, 'jquery-media' +, 'jquery-commits-graph' +], function($, Spinner){ + + var init_source_info = function () { + var get_src = function (path, ref) { + var is_image = /^.+\.(jpg|png|gif|jpeg)$/i.test(path); + if(is_image){ + apiurl = '/'.concat(projectName, '/raw/', ref, '/', path); + file.html('<img src="'+apiurl+'">'); + } + else{ + $.ajax({type: 'GET', + data: {'path': path, 'ref': ref}, + url: '/api/'.concat(projectName, '/src'), + dataType: 'json', + success: function (ret) { + if (ret.type == 'blob') { + //if (ret.parser == 'markdown' || ret.parser == 'docutils') { + // // reuse markdown's css + // file.addClass('markdown-body'); + //} + file.html(ret.src); + $('.media').media({width:938, height:600}); + var anchor = window.location.hash; + var highlight_re = /#L(\d+)-(\d+)$/; + var scroll_re = /#L-?(\d+)$/; + if (anchor && anchor.match(scroll_re) != undefined){ + var paras = anchor.match(scroll_re); + var line_num = parseInt(paras[1]); + $('a[name="'+'L-'+line_num.toString()+'"]'). + parent('div').css('background-color', 'rgb(255, 255, 204)'); + $('a[href='.concat('#L-'+line_num.toString(), "]")).get(0).scrollIntoView(); + } + else if (anchor && anchor.match(highlight_re) != undefined){ + var paras = anchor.match(highlight_re); + var start = parseInt(paras[1]); + var end = parseInt(paras[2]); + var h = end - start; + $('a[name="'+'L-'+start.toString()+'"]'). + parent('div').css('background-color', 'rgb(255, 255, 204)') + .nextAll('div').slice(0, h).css('background-color', 'rgb(255, 255, 204)'); + $('a[href='.concat('#L-'+paras[1], "]")).get(0).scrollIntoView(); + } + } + }}); + } + }; + var get_commits = function (path, ref) { + $.ajax({type: 'GET', + data: {'path': path, 'ref': ref}, + url: '/api/'.concat(projectName, '/commits_by_path'), + dataType: 'json', + success: function (ret) { + if (ret.r) { + var commits = ret.commits; + treeBrowser.find('.tree-item').each( + function (idx) { + var id = $(this).attr('id') + var c = commits[id]; + $(this).children('.age').text(c.age); + if (!c.contributor_url) { + $(this).children('.message').html( + '<a class="message" href="/'.concat(projectName, '/commit/', c.sha, '">', c.message_with_emoji, '</a>', + ' [', '<span>', c.contributor, '</span>]')); + } else { + $(this).children('.message').html( + '<a class="message" href="/'.concat(projectName, '/commit/', c.sha, '">', c.message_with_emoji, '</a>', + ' [', '<a href="', c.contributor_url, '">', c.contributor, '</a>]')); + } + }); + } + }}); + }; + + var drawSpinner = function (elem, isSmall) { + var opts = { lines: 9, length: 6, width: 4, radius: 9, rotate: 12, + color: '#000', speed: 1, trail: 60, shadow: false, + hwaccel: false, className: 'spinner', zIndex: 2e9, + top: 'auto', left: 'auto' }; + if (isSmall) { + opts.length = 4; + opts.width = 2; + opts.radius = 4; + } + return new Spinner(opts).spin(elem); + }; + + // main + + var projectName = $('#project_name').val(), + blob = $('#blob'), file = $('.file'), + tree = $('#tree'), treeBrowser = $('.tree-browser'); + if (tree.length > 0) { + drawSpinner($('.tree-browser td.message:first')[0], true); + // get commits details + var path = tree.attr('data-path'), + ref = tree.attr('data-ref'); + get_commits(path, ref); + } + if (blob.length > 0) { + drawSpinner($('.file')[0]); + var path = blob.attr('data-path'), + ref = blob.attr('data-ref'); + get_src(path, ref); + } + + }; + + $(document).pjax('#pjax_container #tree .content a', '#pjax_container', {timeout:1500}); + $(document).pjax('#pjax_container #blob .content a', '#pjax_container', {timeout:1500}); + $(document).on('pjax:end', function() { + init_source_info(); + }); + + init_source_info(); + + $('body').delegate('#http', 'click', function (e) { + var git_url = $(this).parents('.git-url'); + git_url.removeClass('ssh'); + git_url.addClass('http'); + git_url.find('#git-label').text('HTTP'); + return true; + }); + $('body').delegate('#ssh', 'click', function (e) { + var git_url = $(this).parents('.git-url'); + git_url.removeClass('http'); + git_url.addClass('ssh'); + git_url.find('#git-label').text('SSH'); + return true; + }); + + $('#commits-graph').commits({ + width: 200, + height: 1200, + y_step: 59 + }); +}); diff --git a/dist/js/app/stat/main.js b/dist/js/app/stat/main.js new file mode 100644 index 0000000..3433bb7 --- /dev/null +++ b/dist/js/app/stat/main.js @@ -0,0 +1,671 @@ + +require.config({ enable_ozma: true }); + + +/* @source lib/odometer.js */; + +(function() { + var COUNT_FRAMERATE, COUNT_MS_PER_FRAME, DIGIT_FORMAT, DIGIT_HTML, DIGIT_SPEEDBOOST, DURATION, FORMAT_MARK_HTML, FORMAT_PARSER, FRAMERATE, FRAMES_PER_VALUE, MS_PER_FRAME, MutationObserver, Odometer, RIBBON_HTML, TRANSITION_END_EVENTS, TRANSITION_SUPPORT, VALUE_HTML, addClass, createFromHTML, fractionalPart, now, removeClass, requestAnimationFrame, round, transitionCheckStyles, trigger, truncate, wrapJQuery, _jQueryWrapped, _old, _ref, _ref1, + __slice = [].slice; + + VALUE_HTML = '<span class="odometer-value"></span>'; + + RIBBON_HTML = '<span class="odometer-ribbon"><span class="odometer-ribbon-inner">' + VALUE_HTML + '</span></span>'; + + DIGIT_HTML = '<span class="odometer-digit"><span class="odometer-digit-spacer">8</span><span class="odometer-digit-inner">' + RIBBON_HTML + '</span></span>'; + + FORMAT_MARK_HTML = '<span class="odometer-formatting-mark"></span>'; + + DIGIT_FORMAT = '(,ddd).dd'; + + FORMAT_PARSER = /^\(?([^)]*)\)?(?:(.)(d+))?$/; + + FRAMERATE = 30; + + DURATION = 2000; + + COUNT_FRAMERATE = 20; + + FRAMES_PER_VALUE = 2; + + DIGIT_SPEEDBOOST = .5; + + MS_PER_FRAME = 1000 / FRAMERATE; + + COUNT_MS_PER_FRAME = 1000 / COUNT_FRAMERATE; + + TRANSITION_END_EVENTS = 'transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd'; + + transitionCheckStyles = document.createElement('div').style; + + TRANSITION_SUPPORT = (transitionCheckStyles.transition != null) || (transitionCheckStyles.webkitTransition != null) || (transitionCheckStyles.mozTransition != null) || (transitionCheckStyles.oTransition != null); + + requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; + + MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; + + createFromHTML = function(html) { + var el; + el = document.createElement('div'); + el.innerHTML = html; + return el.children[0]; + }; + + removeClass = function(el, name) { + return el.className = el.className.replace(new RegExp("(^| )" + (name.split(' ').join('|')) + "( |$)", 'gi'), ' '); + }; + + addClass = function(el, name) { + removeClass(el, name); + return el.className += " " + name; + }; + + trigger = function(el, name) { + var evt; + if (document.createEvent != null) { + evt = document.createEvent('HTMLEvents'); + evt.initEvent(name, true, true); + return el.dispatchEvent(evt); + } + }; + + now = function() { + var _ref, _ref1; + return (_ref = (_ref1 = window.performance) != null ? typeof _ref1.now === "function" ? _ref1.now() : void 0 : void 0) != null ? _ref : +(new Date); + }; + + round = function(val, precision) { + if (precision == null) { + precision = 0; + } + if (!precision) { + return Math.round(val); + } + val *= Math.pow(10, precision); + val += 0.5; + val = Math.floor(val); + return val /= Math.pow(10, precision); + }; + + truncate = function(val) { + if (val < 0) { + return Math.ceil(val); + } else { + return Math.floor(val); + } + }; + + fractionalPart = function(val) { + return val - round(val); + }; + + _jQueryWrapped = false; + + (wrapJQuery = function() { + var property, _i, _len, _ref, _results; + if (_jQueryWrapped) { + return; + } + if (window.jQuery != null) { + _jQueryWrapped = true; + _ref = ['html', 'text']; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + property = _ref[_i]; + _results.push((function(property) { + var old; + old = window.jQuery.fn[property]; + return window.jQuery.fn[property] = function(val) { + var _ref1; + if ((val == null) || (((_ref1 = this[0]) != null ? _ref1.odometer : void 0) == null)) { + return old.apply(this, arguments); + } + return this[0].odometer.update(val); + }; + })(property)); + } + return _results; + } + })(); + + setTimeout(wrapJQuery, 0); + + Odometer = (function() { + function Odometer(options) { + var e, k, property, v, _base, _i, _len, _ref, _ref1, _ref2, + _this = this; + this.options = options; + this.el = this.options.el; + if (this.el.odometer != null) { + return this.el.odometer; + } + this.el.odometer = this; + _ref = Odometer.options; + for (k in _ref) { + v = _ref[k]; + if (this.options[k] == null) { + this.options[k] = v; + } + } + if ((_base = this.options).duration == null) { + _base.duration = DURATION; + } + this.MAX_VALUES = ((this.options.duration / MS_PER_FRAME) / FRAMES_PER_VALUE) | 0; + this.resetFormat(); + this.value = this.cleanValue((_ref1 = this.options.value) != null ? _ref1 : ''); + this.renderInside(); + this.render(); + try { + _ref2 = ['innerHTML', 'innerText', 'textContent']; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + property = _ref2[_i]; + if (this.el[property] != null) { + (function(property) { + return Object.defineProperty(_this.el, property, { + get: function() { + var _ref3; + if (property === 'innerHTML') { + return _this.inside.outerHTML; + } else { + return (_ref3 = _this.inside.innerText) != null ? _ref3 : _this.inside.textContent; + } + }, + set: function(val) { + return _this.update(val); + } + }); + })(property); + } + } + } catch (_error) { + e = _error; + this.watchForMutations(); + } + this; + } + + Odometer.prototype.renderInside = function() { + this.inside = document.createElement('div'); + this.inside.className = 'odometer-inside'; + this.el.innerHTML = ''; + return this.el.appendChild(this.inside); + }; + + Odometer.prototype.watchForMutations = function() { + var e, + _this = this; + if (MutationObserver == null) { + return; + } + try { + if (this.observer == null) { + this.observer = new MutationObserver(function(mutations) { + var newVal; + newVal = _this.el.innerText; + _this.renderInside(); + _this.render(_this.value); + return _this.update(newVal); + }); + } + this.watchMutations = true; + return this.startWatchingMutations(); + } catch (_error) { + e = _error; + } + }; + + Odometer.prototype.startWatchingMutations = function() { + if (this.watchMutations) { + return this.observer.observe(this.el, { + childList: true + }); + } + }; + + Odometer.prototype.stopWatchingMutations = function() { + var _ref; + return (_ref = this.observer) != null ? _ref.disconnect() : void 0; + }; + + Odometer.prototype.cleanValue = function(val) { + var _ref; + if (typeof val === 'string') { + val = val.replace((_ref = this.format.radix) != null ? _ref : '.', '<radix>'); + val = val.replace(/[.,]/g, ''); + val = val.replace('<radix>', '.'); + val = parseFloat(val, 10) || 0; + } + return round(val, this.format.precision); + }; + + Odometer.prototype.bindTransitionEnd = function() { + var event, renderEnqueued, _i, _len, _ref, _results, + _this = this; + if (this.transitionEndBound) { + return; + } + this.transitionEndBound = true; + renderEnqueued = false; + _ref = TRANSITION_END_EVENTS.split(' '); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + event = _ref[_i]; + _results.push(this.el.addEventListener(event, function() { + if (renderEnqueued) { + return true; + } + renderEnqueued = true; + setTimeout(function() { + _this.render(); + renderEnqueued = false; + return trigger(_this.el, 'odometerdone'); + }, 0); + return true; + }, false)); + } + return _results; + }; + + Odometer.prototype.resetFormat = function() { + var format, fractional, parsed, precision, radix, repeating, _ref, _ref1; + format = (_ref = this.options.format) != null ? _ref : DIGIT_FORMAT; + format || (format = 'd'); + parsed = FORMAT_PARSER.exec(format); + if (!parsed) { + throw new Error("Odometer: Unparsable digit format"); + } + _ref1 = parsed.slice(1, 4), repeating = _ref1[0], radix = _ref1[1], fractional = _ref1[2]; + precision = (fractional != null ? fractional.length : void 0) || 0; + return this.format = { + repeating: repeating, + radix: radix, + precision: precision + }; + }; + + Odometer.prototype.render = function(value) { + var classes, cls, match, newClasses, theme, _i, _len; + if (value == null) { + value = this.value; + } + this.stopWatchingMutations(); + this.resetFormat(); + this.inside.innerHTML = ''; + theme = this.options.theme; + classes = this.el.className.split(' '); + newClasses = []; + for (_i = 0, _len = classes.length; _i < _len; _i++) { + cls = classes[_i]; + if (!cls.length) { + continue; + } + if (match = /^odometer-theme-(.+)$/.exec(cls)) { + theme = match[1]; + continue; + } + if (/^odometer(-|$)/.test(cls)) { + continue; + } + newClasses.push(cls); + } + newClasses.push('odometer'); + if (!TRANSITION_SUPPORT) { + newClasses.push('odometer-no-transitions'); + } + if (theme) { + newClasses.push("odometer-theme-" + theme); + } else { + newClasses.push("odometer-auto-theme"); + } + this.el.className = newClasses.join(' '); + this.ribbons = {}; + this.formatDigits(value); + return this.startWatchingMutations(); + }; + + Odometer.prototype.formatDigits = function(value) { + var digit, valueDigit, valueString, wholePart, _i, _j, _len, _len1, _ref, _ref1; + this.digits = []; + if (this.options.formatFunction) { + valueString = this.options.formatFunction(value); + _ref = valueString.split('').reverse(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + valueDigit = _ref[_i]; + if (valueDigit.match(/0-9/)) { + digit = this.renderDigit(); + digit.querySelector('.odometer-value').innerHTML = valueDigit; + this.digits.push(digit); + this.insertDigit(digit); + } else { + this.addSpacer(valueDigit); + } + } + } else { + wholePart = !this.format.precision || !fractionalPart(value) || false; + _ref1 = value.toString().split('').reverse(); + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + digit = _ref1[_j]; + if (digit === '.') { + wholePart = true; + } + this.addDigit(digit, wholePart); + } + } + }; + + Odometer.prototype.update = function(newValue) { + var diff, + _this = this; + newValue = this.cleanValue(newValue); + if (!(diff = newValue - this.value)) { + return; + } + removeClass(this.el, 'odometer-animating-up odometer-animating-down odometer-animating'); + if (diff > 0) { + addClass(this.el, 'odometer-animating-up'); + } else { + addClass(this.el, 'odometer-animating-down'); + } + this.stopWatchingMutations(); + this.animate(newValue); + this.startWatchingMutations(); + setTimeout(function() { + _this.el.offsetHeight; + return addClass(_this.el, 'odometer-animating'); + }, 0); + return this.value = newValue; + }; + + Odometer.prototype.renderDigit = function() { + return createFromHTML(DIGIT_HTML); + }; + + Odometer.prototype.insertDigit = function(digit, before) { + if (before != null) { + return this.inside.insertBefore(digit, before); + } else if (!this.inside.children.length) { + return this.inside.appendChild(digit); + } else { + return this.inside.insertBefore(digit, this.inside.children[0]); + } + }; + + Odometer.prototype.addSpacer = function(chr, before, extraClasses) { + var spacer; + spacer = createFromHTML(FORMAT_MARK_HTML); + spacer.innerHTML = chr; + if (extraClasses) { + addClass(spacer, extraClasses); + } + return this.insertDigit(spacer, before); + }; + + Odometer.prototype.addDigit = function(value, repeating) { + var chr, digit, resetted, _ref; + if (repeating == null) { + repeating = true; + } + if (value === '-') { + return this.addSpacer(value, null, 'odometer-negation-mark'); + } + if (value === '.') { + return this.addSpacer((_ref = this.format.radix) != null ? _ref : '.', null, 'odometer-radix-mark'); + } + if (repeating) { + resetted = false; + while (true) { + if (!this.format.repeating.length) { + if (resetted) { + throw new Error("Bad odometer format without digits"); + } + this.resetFormat(); + resetted = true; + } + chr = this.format.repeating[this.format.repeating.length - 1]; + this.format.repeating = this.format.repeating.substring(0, this.format.repeating.length - 1); + if (chr === 'd') { + break; + } + this.addSpacer(chr); + } + } + digit = this.renderDigit(); + digit.querySelector('.odometer-value').innerHTML = value; + this.digits.push(digit); + return this.insertDigit(digit); + }; + + Odometer.prototype.animate = function(newValue) { + if (!TRANSITION_SUPPORT || this.options.animation === 'count') { + return this.animateCount(newValue); + } else { + return this.animateSlide(newValue); + } + }; + + Odometer.prototype.animateCount = function(newValue) { + var cur, diff, last, start, tick, + _this = this; + if (!(diff = +newValue - this.value)) { + return; + } + start = last = now(); + cur = this.value; + return (tick = function() { + var delta, dist, fraction; + if ((now() - start) > _this.options.duration) { + _this.value = newValue; + _this.render(); + trigger(_this.el, 'odometerdone'); + return; + } + delta = now() - last; + if (delta > COUNT_MS_PER_FRAME) { + last = now(); + fraction = delta / _this.options.duration; + dist = diff * fraction; + cur += dist; + _this.render(Math.round(cur)); + } + if (requestAnimationFrame != null) { + return requestAnimationFrame(tick); + } else { + return setTimeout(tick, COUNT_MS_PER_FRAME); + } + })(); + }; + + Odometer.prototype.getDigitCount = function() { + var i, max, value, values, _i, _len; + values = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) { + value = values[i]; + values[i] = Math.abs(value); + } + max = Math.max.apply(Math, values); + return Math.ceil(Math.log(max + 1) / Math.log(10)); + }; + + Odometer.prototype.getFractionalDigitCount = function() { + var i, parser, parts, value, values, _i, _len; + values = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + parser = /^\-?\d*\.(\d*?)0*$/; + for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) { + value = values[i]; + values[i] = value.toString(); + parts = parser.exec(values[i]); + if (parts == null) { + values[i] = 0; + } else { + values[i] = parts[1].length; + } + } + return Math.max.apply(Math, values); + }; + + Odometer.prototype.resetDigits = function() { + this.digits = []; + this.ribbons = []; + this.inside.innerHTML = ''; + return this.resetFormat(); + }; + + Odometer.prototype.animateSlide = function(newValue) { + var boosted, cur, diff, digitCount, digits, dist, end, fractionalCount, frame, frames, i, incr, j, mark, numEl, oldValue, start, _base, _i, _j, _k, _l, _len, _len1, _len2, _m, _ref, _results; + oldValue = this.value; + fractionalCount = this.getFractionalDigitCount(oldValue, newValue); + if (fractionalCount) { + newValue = newValue * Math.pow(10, fractionalCount); + oldValue = oldValue * Math.pow(10, fractionalCount); + } + if (!(diff = newValue - oldValue)) { + return; + } + this.bindTransitionEnd(); + digitCount = this.getDigitCount(oldValue, newValue); + digits = []; + boosted = 0; + for (i = _i = 0; 0 <= digitCount ? _i < digitCount : _i > digitCount; i = 0 <= digitCount ? ++_i : --_i) { + start = truncate(oldValue / Math.pow(10, digitCount - i - 1)); + end = truncate(newValue / Math.pow(10, digitCount - i - 1)); + dist = end - start; + if (Math.abs(dist) > this.MAX_VALUES) { + frames = []; + incr = dist / (this.MAX_VALUES + this.MAX_VALUES * boosted * DIGIT_SPEEDBOOST); + cur = start; + while ((dist > 0 && cur < end) || (dist < 0 && cur > end)) { + frames.push(Math.round(cur)); + cur += incr; + } + if (frames[frames.length - 1] !== end) { + frames.push(end); + } + boosted++; + } else { + frames = (function() { + _results = []; + for (var _j = start; start <= end ? _j <= end : _j >= end; start <= end ? _j++ : _j--){ _results.push(_j); } + return _results; + }).apply(this); + } + for (i = _k = 0, _len = frames.length; _k < _len; i = ++_k) { + frame = frames[i]; + frames[i] = Math.abs(frame % 10); + } + digits.push(frames); + } + this.resetDigits(); + _ref = digits.reverse(); + for (i = _l = 0, _len1 = _ref.length; _l < _len1; i = ++_l) { + frames = _ref[i]; + if (!this.digits[i]) { + this.addDigit(' ', i >= fractionalCount); + } + if ((_base = this.ribbons)[i] == null) { + _base[i] = this.digits[i].querySelector('.odometer-ribbon-inner'); + } + this.ribbons[i].innerHTML = ''; + if (diff < 0) { + frames = frames.reverse(); + } + for (j = _m = 0, _len2 = frames.length; _m < _len2; j = ++_m) { + frame = frames[j]; + numEl = document.createElement('div'); + numEl.className = 'odometer-value'; + numEl.innerHTML = frame; + this.ribbons[i].appendChild(numEl); + if (j === frames.length - 1) { + addClass(numEl, 'odometer-last-value'); + } + if (j === 0) { + addClass(numEl, 'odometer-first-value'); + } + } + } + if (start < 0) { + this.addDigit('-'); + } + mark = this.inside.querySelector('.odometer-radix-mark'); + if (mark != null) { + mark.parent.removeChild(mark); + } + if (fractionalCount) { + return this.addSpacer(this.format.radix, this.digits[fractionalCount - 1], 'odometer-radix-mark'); + } + }; + + return Odometer; + + })(); + + Odometer.options = (_ref = window.odometerOptions) != null ? _ref : {}; + + setTimeout(function() { + var k, v, _base, _ref1, _results; + if (window.odometerOptions) { + _ref1 = window.odometerOptions; + _results = []; + for (k in _ref1) { + v = _ref1[k]; + _results.push((_base = Odometer.options)[k] != null ? (_base = Odometer.options)[k] : _base[k] = v); + } + return _results; + } + }, 0); + + Odometer.init = function() { + var el, elements, _i, _len, _ref1, _results; + if (document.querySelectorAll == null) { + return; + } + elements = document.querySelectorAll(Odometer.options.selector || '.odometer'); + _results = []; + for (_i = 0, _len = elements.length; _i < _len; _i++) { + el = elements[_i]; + _results.push(el.odometer = new Odometer({ + el: el, + value: (_ref1 = el.innerText) != null ? _ref1 : el.textContent + })); + } + return _results; + }; + + if ((((_ref1 = document.documentElement) != null ? _ref1.doScroll : void 0) != null) && (document.createEventObject != null)) { + _old = document.onreadystatechange; + document.onreadystatechange = function() { + if (document.readyState === 'complete' && Odometer.options.auto !== false) { + Odometer.init(); + } + return _old != null ? _old.apply(this, arguments) : void 0; + }; + } else { + document.addEventListener('DOMContentLoaded', function() { + if (Odometer.options.auto !== false) { + return Odometer.init(); + } + }, false); + } + + if (typeof define === 'function' && define.amd) { + define("lib/odometer", [ + "jquery" + ], function() { + return Odometer; + }); + } else if (typeof exports === !'undefined') { + module.exports = Odometer; + } else { + window.Odometer = Odometer; + } + +}).call(this); + +/* @source */; + +require(['jquery', 'lib/odometer'], function() { + $.getJSON('/hub/stat/source', function( data ) { + $.each( data, function(className, val) { + $('.odometer.' + className).html(val); + }); + }); +}); diff --git a/dist/js/app/team/add_project.js b/dist/js/app/team/add_project.js new file mode 100644 index 0000000..dda4df4 --- /dev/null +++ b/dist/js/app/team/add_project.js @@ -0,0 +1,126 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/drop_down_list.js */; + +define( + 'mod/drop_down_list', + [ + "jquery" +], + function($) { + var addItemMenu = function (inputObj, success, introAppendTo, reqUrl, templ, menuType, successArg){ + var keyCode = {enter:13, esc:27, tab:9, up:38, down:40, ctrl:17, n:78, p:80}, + item_menu, + get_data = function (url){ + if (menuType == "repos"){ + length = url.length, + url = url.slice(1, length - 1); + }else { + url = url.split('/')[2]; + } + return url; + }, + call_success = function (){ + if (menuType == "repos"){ + success(); + } else { + success(successArg); + $(introAppendTo).find('.add-item-menu').remove(); + } + }; + + var hideAddItemMenu = function () { + item_menu && item_menu.empty().remove(); + }; + + var showIntro = function () { + if (!item_menu || item_menu.is(':empty')) { + item_menu = $('<div class="add-item-menu"></div>').appendTo(introAppendTo) + .on('mouseenter', 'li', function () { + item_menu.find('li.active').removeClass('active'); + $(this).addClass('active'); + }) + .on('click', 'li', function (e) { + e.preventDefault(); + var url = $(this).attr('data-url'); + url = get_data(url); + inputObj.val(url); + setTimeout(hideAddItemMenu, 100); + call_success(); + }); + } + }; + + $('body').click(function () {setTimeout(hideAddItemMenu, 100);}); + + inputObj.live('keydown', function (e) { + (e.keyCode == keyCode.enter && item_menu && item_menu.find('li.active').length) && e.preventDefault(); + showIntro(); + }).live('keyup', + function (e) { + showIntro(); + var k = e.keyCode; + if (k == keyCode.up || k == keyCode.down || k==keyCode.ctrl + || k == keyCode.enter || k == keyCode.p || k == keyCode.n){ + if (item_menu && item_menu.find('li').length){ + (k == keyCode.esc) && hideAddItemMenu();// esc key to close the menu + var actItem = item_menu.find('li.active'); + if (actItem.length) { + var a = actItem; + if (k == keyCode.up || + (k == keyCode.p && e.ctrlKey == true)) { // up + var p = a.removeClass('active').prev(); + (p.length ? p : item_menu.find('li:last')).addClass('active'); + } else if (k == keyCode.down || + (k == keyCode.n && e.ctrlKey == true)) { // down + var n = a.removeClass('active').next(); + (n.length ? n : item_menu.find('li:first')).addClass('active'); + } else if (k == keyCode.enter) { // enter key to go to repo + e.preventDefault(); + var url = actItem.attr('data-url'); + url = get_data(url); + inputObj.val(url); + setTimeout(hideAddItemMenu, 100); + call_success(); + } + } else { + item_menu.find('li:first').addClass('active'); + } + } + } else { + var q = $(this).val(); + (q != '') ? $.getJSON( + reqUrl, + {q:q}, + function (r) { + item_menu.html($.tmpl(templ, r)).show(); + }) : showIntro(); + } + } + ); + }; + return addItemMenu; + }); + +/* @source */; + +require([ + 'jquery', + 'mod/drop_down_list' +], function($, drop_down_list){ + var addProjectForm = $('#add-project-form'); + var success = function (data) { + addProjectForm.submit(); + }; + + // search for repos + var reqUrl = '/api/autocomplete_repos'; + var templ = $('#templ-repos-autocomplete'); + + $('#project_id').focusin(function(){ + var inputObj = $(this); + drop_down_list(inputObj, success, 'dd', reqUrl, templ, "repos", ''); + }); +}); diff --git a/dist/js/app/team/group.js b/dist/js/app/team/group.js new file mode 100644 index 0000000..ff2d01e --- /dev/null +++ b/dist/js/app/team/group.js @@ -0,0 +1,123 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +require( + ['jquery', 'jquery-tmpl', 'bootstrap'], + function ($) { + var member_query_cache = {}; + var project_query_cache = {}; + var autocomplete_member = function (query, process) { + var $input = $('input.js-group-member') + var group_name = $input.data('group-name'); + var team_name = $input.data('team-name'); + + // if in cache use cached value, if don't wanto use cache remove this if statement + if(member_query_cache[query]){ + process(member_query_cache[query]); + return; + } + if( typeof searching != "undefined") { + clearTimeout(searching); + process([]); + } + searching = setTimeout(function() { + return $.getJSON( + '/api/teams/' + team_name + '/members/', + { query: query }, + function(data){ + var new_data = []; + $.each(data, function(){ + new_data.push(this.name); + }); + // save result to cache, remove next line if you don't want to use cache + member_query_cache[query] = new_data; + // only search if stop typing for 300ms aka fast typers + return process(new_data); + } + ); + }, 300); // 300 ms + } + var autocomplete_project = function (query, process) { + var $input = $('input.js-group-project') + var group_name = $input.data('group-name'); + var team_name = $input.data('team-name'); + + // if in cache use cached value, if don't wanto use cache remove this if statement + if(project_query_cache[query]){ + process(project_query_cache[query]); + return; + } + if( typeof searching != "undefined") { + clearTimeout(searching); + process([]); + } + searching = setTimeout(function() { + return $.getJSON( + '/api/teams/' + team_name + '/projects/', + { query: query }, + function(data){ + var new_data = []; + $.each(data, function(){ + new_data.push(this.name); + }); + // save result to cache, remove next line if you don't want to use cache + project_query_cache[query] = new_data; + // only search if stop typing for 300ms aka fast typers + return process(new_data); + } + ); + }, 300); // 300 ms + } + $('input.js-group-member').typeahead({source: autocomplete_member}); + $('input.js-group-project').typeahead({source: autocomplete_project}); + $(".js-add-group-member").on('click', function () { + var tmpl = $("#tmpl-group-member"); + var $input = $(this).parents().find('input.js-group-member'); + var group_id = $input.data('group'); + var team_id = $input.data('team'); + var group_name = $input.data('group-name'); + var team_name = $input.data('team-name'); + var val = $input.val() + if (val === '' || val === undefined) + return; + $.ajax({ + type: 'POST', + data: JSON.stringify({ + 'name': $input.val() + }), + contentType: 'application/json; charset=UTF-8', + url: '/api/teams/' + team_name + '/groups/' + group_name + '/members/', + dataType: 'json', + success: function (ret) { + $("ul#group-members").append($.tmpl(tmpl, ret)) + } + }); + }); + $(".js-add-group-project").on('click', function () { + var tmpl = $("#tmpl-group-project"); + var $input = $(this).parents().find('input.js-group-project'); + var group_id = $input.data('group'); + var team_id = $input.data('team'); + var group_name = $input.data('group-name'); + var team_name = $input.data('team-name'); + var val = $input.val() + if (val === '' || val === undefined) + return; + $.ajax({ + type: 'POST', + data: JSON.stringify({ + 'name': $input.val() + }), + contentType: 'application/json; charset=UTF-8', + url: '/api/teams/' + team_name + '/groups/' + group_name + '/projects/', + dataType: 'json', + success: function (ret) { + $("ul#group-projects").append($.tmpl(tmpl, ret)) + } + }); + }); + } +); diff --git a/dist/js/app/team/main.js b/dist/js/app/team/main.js new file mode 100644 index 0000000..064b623 --- /dev/null +++ b/dist/js/app/team/main.js @@ -0,0 +1,1857 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/team_header.js */; + +define('mod/team_header', [ + "jquery" +], function($){ + $(function(){ + var JoinOrLeaveTeam = function (url, onSuccess) { + $.post(url, function (ret) { + if (ret.r === 0) { + onSuccess(); + } + }, 'json'); + }; + $('.join-or-leave-btn').click(function () { + var Btn = $(this), team = Btn.attr('data-team'), _type = Btn.attr('data-type'), + url = '/hub/team/' + team + '/' + _type; + if (_type === "leave") { + JoinOrLeaveTeam(url, function () { + Btn.removeClass('btn-danger'); + Btn.addClass('btn-success'); + Btn.html('Join'); + Btn.attr('data-type', 'join'); + }); + }else{ + JoinOrLeaveTeam(url, function () { + Btn.removeClass('btn-success'); + Btn.addClass('btn-danger'); + Btn.html('Leave'); + Btn.attr('data-type', 'leave'); + }); + } + }); + }); +}); + +/* @source lib/tinycolor.js */; + +// TinyColor v0.9.16 +// https://github.com/bgrins/TinyColor +// 2013-08-10, Brian Grinstead, MIT License + +(function() { + +var trimLeft = /^[\s,#]+/, + trimRight = /\s+$/, + tinyCounter = 0, + math = Math, + mathRound = math.round, + mathMin = math.min, + mathMax = math.max, + mathRandom = math.random; + +function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (typeof color == "object" && color.hasOwnProperty("_tc_id")) { + return color; + } + + var rgb = inputToRGB(color); + var r = rgb.r, + g = rgb.g, + b = rgb.b, + a = rgb.a, + roundA = mathRound(100*a) / 100, + format = opts.format || rgb.format; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (r < 1) { r = mathRound(r); } + if (g < 1) { g = mathRound(g); } + if (b < 1) { b = mathRound(b); } + + return { + ok: rgb.ok, + format: format, + _tc_id: tinyCounter++, + alpha: a, + getAlpha: function() { + return a; + }, + setAlpha: function(value) { + a = boundAlpha(value); + roundA = mathRound(100*a) / 100; + }, + toHsv: function() { + var hsv = rgbToHsv(r, g, b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(r, g, b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(r, g, b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a }; + }, + toHslString: function() { + var hsl = rgbToHsl(r, g, b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(r, g, b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function() { + return rgbaToHex(r, g, b, a); + }, + toHex8String: function() { + return '#' + this.toHex8(); + }, + toRgb: function() { + return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a }; + }, + toRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" : + "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a }; + }, + toPercentageRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")"; + }, + toName: function() { + if (a === 0) { + return "transparent"; + } + + return hexNames[rgbToHex(r, g, b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToHex(r, g, b, a); + var secondHex8String = hex8String; + var gradientType = opts && opts.gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = s.toHex8String(); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this.format; + + var formattedString = false; + var hasAlphaAndFormatNotSet = !formatSet && a < 1 && a > 0; + var formatWithAlpha = hasAlphaAndFormatNotSet && (format === "hex" || format === "hex6" || format === "hex3" || format === "name"); + + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + if (formatWithAlpha) { + return this.toRgbString(); + } + + return formattedString || this.toHexString(); + } + }; +} + +// If input is an object, force 1 into "1.0" to handle ratios properly +// String input requires "1.0" as input, so 1 will be treated as 1 +tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); +}; + +// Given a string or object, convert that input to RGB +// Possible string inputs: +// +// "red" +// "#f00" or "f00" +// "#ff0000" or "ff0000" +// "#ff000000" or "ff000000" +// "rgb 255 0 0" or "rgb (255, 0, 0)" +// "rgb 1.0 0 0" or "rgb (1, 0, 0)" +// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" +// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" +// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" +// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" +// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" +// +function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) { + color.s = convertToPercentage(color.s); + color.v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, color.s, color.v); + ok = true; + format = "hsv"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) { + color.s = convertToPercentage(color.s); + color.l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, color.s, color.l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; +} + + +// Conversion Functions +// -------------------- + +// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: +// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript> + +// `rgbToRgb` +// Handle bounds / percentage checking to conform to CSS color spec +// <http://www.w3.org/TR/css3-color/> +// *Assumes:* r, g, b in [0, 255] or [0, 1] +// *Returns:* { r, g, b } in [0, 255] +function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; +} + +// `rgbToHsl` +// Converts an RGB color value to HSL. +// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] +// *Returns:* { h, s, l } in [0,1] +function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; +} + +// `hslToRgb` +// Converts an HSL color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] +function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// `rgbToHsv` +// Converts an RGB color value to HSV +// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] +// *Returns:* { h, s, v } in [0,1] +function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; +} + +// `hsvToRgb` +// Converts an HSV color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// `rgbToHex` +// Converts an RGB color to hex +// Assumes r, g, and b are contained in the set [0, 255] +// Returns a 3 or 6 character hex +function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); +} + // `rgbaToHex` + // Converts an RGBA color plus alpha transparency to hex + // Assumes r, g, b and a are contained in the set [0, 255] + // Returns an 8 character hex + function rgbaToHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); + } + +// `equals` +// Can be called with any tinycolor input +tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); +}; +tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); +}; + + +// Modification Functions +// ---------------------- +// Thanks to less.js for some of the basics here +// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js> + +tinycolor.desaturate = function (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +}; +tinycolor.saturate = function (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +}; +tinycolor.greyscale = function(color) { + return tinycolor.desaturate(color, 100); +}; +tinycolor.lighten = function(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +}; +tinycolor.darken = function (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +}; +tinycolor.complement = function(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); +}; + + +// Combination Functions +// --------------------- +// Thanks to jQuery xColor for some of the ideas behind these +// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js> + +tinycolor.triad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; +}; +tinycolor.tetrad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; +}; +tinycolor.splitcomplement = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; +}; +tinycolor.analogous = function(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; +}; +tinycolor.monochromatic = function(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; +}; + + +// Readability Functions +// --------------------- +// <http://www.w3.org/TR/AERT#color-contrast> + +// `readability` +// Analyze the 2 colors and returns an object with the following properties: +// `brightness`: difference in brightness between the two colors +// `color`: difference in color/hue between the two colors +tinycolor.readability = function(color1, color2) { + var a = tinycolor(color1).toRgb(); + var b = tinycolor(color2).toRgb(); + var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000; + var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000; + var colorDiff = ( + Math.max(a.r, b.r) - Math.min(a.r, b.r) + + Math.max(a.g, b.g) - Math.min(a.g, b.g) + + Math.max(a.b, b.b) - Math.min(a.b, b.b) + ); + + return { + brightness: Math.abs(brightnessA - brightnessB), + color: colorDiff + }; +}; + +// `readable` +// http://www.w3.org/TR/AERT#color-contrast +// Ensure that foreground and background color combinations provide sufficient contrast. +// *Example* +// tinycolor.readable("#000", "#111") => false +tinycolor.readable = function(color1, color2) { + var readability = tinycolor.readability(color1, color2); + return readability.brightness > 125 && readability.color > 500; +}; + +// `mostReadable` +// Given a base color and a list of possible foreground or background +// colors for that base, returns the most readable color. +// *Example* +// tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000" +tinycolor.mostReadable = function(baseColor, colorList) { + var bestColor = null; + var bestScore = 0; + var bestIsReadable = false; + for (var i=0; i < colorList.length; i++) { + + // We normalize both around the "acceptable" breaking point, + // but rank brightness constrast higher than hue. + + var readability = tinycolor.readability(baseColor, colorList[i]); + var readable = readability.brightness > 125 && readability.color > 500; + var score = 3 * (readability.brightness / 125) + (readability.color / 500); + + if ((readable && ! bestIsReadable) || + (readable && bestIsReadable && score > bestScore) || + ((! readable) && (! bestIsReadable) && score > bestScore)) { + bestIsReadable = readable; + bestScore = score; + bestColor = tinycolor(colorList[i]); + } + } + return bestColor; +}; + + +// Big List of Colors +// ------------------ +// <http://www.w3.org/TR/css3-color/#svg-color> +var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" +}; + +// Make it easy to access colors via `hexNames[hex]` +var hexNames = tinycolor.hexNames = flip(names); + + +// Utilities +// --------- + +// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` +function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; +} + +// Return a valid alpha value [0,1] with all invalid values being set to 1 +function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; +} + +// Take input from [0, n] and return it as [0, 1] +function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); +} + +// Force a number between 0 and 1 +function clamp01(val) { + return mathMin(1, mathMax(0, val)); +} + +// Parse a base-16 hex value into a base-10 integer +function parseIntFromHex(val) { + return parseInt(val, 16); +} + +// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 +// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0> +function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; +} + +// Check to see if string passed in is a percentage +function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; +} + +// Force a hex value to have 2 characters +function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; +} + +// Replace a decimal with it's percentage value +function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; +} + +// Converts a decimal to a hex value +function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); +} +// Converts a hex value to a decimal +function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); +} + +var matchers = (function() { + + // <http://www.w3.org/TR/css3-values/#integers> + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // <http://www.w3.org/TR/css3-values/#number-value> + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; +})(); + +// `stringInputToObject` +// Permissive string parsing. Take in a number of formats, and output an object +// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` +function stringInputToObject(color) { + + color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + a: convertHexToDecimal(match[1]), + r: parseIntFromHex(match[2]), + g: parseIntFromHex(match[3]), + b: parseIntFromHex(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; +} + +// Node: Export function +if (typeof module !== "undefined" && module.exports) { + module.exports = tinycolor; +} +// AMD/requirejs: Define the module +else if (typeof define !== "undefined") { + define("lib/tinycolor", function () {return tinycolor;}); +} +// Browser: Expose to window +else { + window.tinycolor = tinycolor; +} + +})(); + +/* @source lib/coloreditor.js */; + +// Generated by CoffeeScript 1.3.3 +(function() { + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + define("lib/coloreditor", [ + "lib/tinycolor" + ], function(tinycolor) { + 'use strict'; + + var ColorEditor; + return ColorEditor = (function() { + + ColorEditor.prototype.defaultColor = 'rgba(0,0,0,1)'; + + ColorEditor.prototype.hsv = tinycolor('rgba(0,0,0,1)').toHsv(); + + function ColorEditor(element, color, callback, swatches) { + this.element = element; + this.callback = callback != null ? callback : null; + this.swatches = swatches != null ? swatches : null; + this.registerFocusHandler = __bind(this.registerFocusHandler, this); + + this.handleOpacityFocus = __bind(this.handleOpacityFocus, this); + + this.handleHueFocus = __bind(this.handleHueFocus, this); + + this.handleSelectionFocus = __bind(this.handleSelectionFocus, this); + + this.registerDragHandler = __bind(this.registerDragHandler, this); + + this.handleOpacityDrag = __bind(this.handleOpacityDrag, this); + + this.handleHueDrag = __bind(this.handleHueDrag, this); + + this.handleSelectionFieldDrag = __bind(this.handleSelectionFieldDrag, this); + + this.color = tinycolor(color); + this.lastColor = color; + this.$element = $(this.element); + this.$colorValue = this.$element.find('.color_value'); + this.$buttonList = this.$element.find('ul.button-bar'); + this.$rgbaButton = this.$element.find('.rgba'); + this.$hexButton = this.$element.find('.hex'); + this.$hslButton = this.$element.find('.hsla'); + this.$currentColor = this.$element.find('.current_color'); + this.$lastColor = this.$element.find('.last_color'); + this.$selection = this.$element.find('.color_selection_field'); + this.$selectionBase = this.$element.find('.color_selection_field .selector_base'); + this.$hueBase = this.$element.find('.hue_slider .selector_base'); + this.$opacityGradient = this.$element.find('.opacity_gradient'); + this.$hueSlider = this.$element.find('.hue_slider'); + this.$opacitySlider = this.$element.find('.opacity_slider'); + this.$hueSelector = this.$element.find('.hue_slider .selector_base'); + this.$opacitySlider = this.$element.find('.opacity_slider'); + this.$opacitySelector = this.$element.find('.opacity_slider .selector_base'); + this.$swatches = this.$element.find('.swatches'); + this.addFieldListeners(); + this.addSwatches(); + this.$lastColor.css('background-color', this.lastColor); + this.commitColor(color); + } + + ColorEditor.prototype.addFieldListeners = function() { + this.bindColorFormatToRadioButton('rgba'); + this.bindColorFormatToRadioButton('hex'); + this.bindColorFormatToRadioButton('hsla'); + this.$colorValue.change(this.colorSetter); + this.bindOriginalColorButton(); + this.bindColorSwatches(); + this.registerDragHandler('.color_selection_field', this.handleSelectionFieldDrag); + this.registerDragHandler('.hue_slider', this.handleHueDrag); + this.registerDragHandler('.opacity_slider', this.handleOpacityDrag); + this.registerFocusHandler(this.$selection.find('.selector_base'), this.handleSelectionFocus); + this.registerFocusHandler(this.$hueSlider.find('.selector_base'), this.handleHueFocus); + return this.registerFocusHandler(this.$opacitySlider.find('.selector_base'), this.handleOpacityFocus); + }; + + ColorEditor.prototype.synchronize = function() { + var colorObject, colorValue, hueColor; + colorValue = this.getColor().toString(); + colorObject = tinycolor(colorValue); + hueColor = 'hsl(' + this.hsv.h + ', 100%, 50%)'; + this.updateColorTypeRadioButtons(colorObject.format); + this.$colorValue.attr('value', colorValue); + this.$currentColor.css('background-color', colorValue); + this.$selection.css('background-color', hueColor); + this.$hueBase.css('background-color', hueColor); + this.$selectionBase.css('background-color', colorObject.toHexString()); + this.$opacityGradient.css('background-image', '-webkit-gradient(linear, 0% 0%, 0% 100%, from(' + hueColor + '), to(transparent))'); + this.$hueSelector.css('bottom', (this.hsv.h / 360 * 100) + "%"); + this.$opacitySelector.css('bottom', (this.hsv.a * 100) + "%"); + if (!isNaN(this.hsv.s)) { + this.hsv.s = (this.hsv.s * 100) + '%'; + } + if (!isNaN(this.hsv.v)) { + this.hsv.v = (this.hsv.v * 100) + '%'; + } + return this.$selectionBase.css({ + left: this.hsv.s, + bottom: this.hsv.v + }); + }; + + ColorEditor.prototype.focus = function() { + if (!this.$selection.find('.selector_base').is(":focus")) { + this.$selection.find('.selector_base').focus(); + return true; + } + return false; + }; + + ColorEditor.prototype.colorSetter = function() { + var newColor, newValue; + newValue = $.trim(this.$colorValue.val()); + newColor = tinycolor(newValue); + if (!newColor.ok) { + newValue = this.getColor(); + newColor = tinycolor(newValue); + } + this.commitColor(newValue, true); + this.hsv = newColor.toHsv(); + return this.synchronize(); + }; + + ColorEditor.prototype.getColor = function() { + return this.color || this.defaultColor; + }; + + ColorEditor.prototype.updateColorTypeRadioButtons = function(format) { + this.$buttonList.find('li').removeClass('selected'); + this.$buttonList.find('.' + format).parent().addClass('selected'); + switch (format) { + case 'rgb': + return this.$buttonList.find('.rgba').parent().addClass('selected'); + case 'hex': + case 'name': + return this.$buttonList.find('.hex').parent().addClass('selected'); + case 'hsl': + return this.$buttonList.find('.hsla').parent().addClass('selected'); + } + }; + + ColorEditor.prototype.bindColorFormatToRadioButton = function(buttonClass, propertyName, value) { + var handler, + _this = this; + handler = function(event) { + var colorObject, newColor, newFormat; + newFormat = $(event.currentTarget).html().toLowerCase(); + newColor = _this.getColor(); + colorObject = tinycolor(newColor); + switch (newFormat) { + case 'hsla': + newColor = colorObject.toHslString(); + break; + case 'rgba': + newColor = colorObject.toRgbString(); + break; + case 'hex': + newColor = colorObject.toHexString(); + _this.hsv.a = 1; + _this.synchronize(); + } + return _this.commitColor(newColor, false); + }; + return this.$element.find('.' + buttonClass).click(handler); + }; + + ColorEditor.prototype.bindOriginalColorButton = function() { + var _this = this; + return this.$lastColor.click(function(event) { + return _this.commitColor(_this.lastColor, true); + }); + }; + + ColorEditor.prototype.bindColorSwatches = function() { + var handler; + handler = function(event) { + var $swatch, color, hsvColor; + $swatch = $(event.currentTarget); + if ($swatch.attr('style').length > 0) { + color = $swatch.css('background-color'); + } + if (color.length > 0) { + hsvColor = tinycolor(color).toHsv(); + return this.setColorAsHsv(hsvColor, true); + } + }; + return this.$element.find('.color_swatch').click(handler); + }; + + ColorEditor.prototype.addSwatches = function() { + var index, swatch, _i, _len, _ref, + _this = this; + _ref = this.swatches; + for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { + swatch = _ref[index]; + this.$swatches.append("<li><div class=\"swatch_bg\"><div class=\"swatch\" style=\"background-color: " + swatch.value + ";\"></div></div> <span class=\"value\">" + swatch.value + "</span></li>"); + } + return this.$swatches.find('li').click(function(event) { + return _this.commitColor($(event.currentTarget).find('.value').html()); + }); + }; + + ColorEditor.prototype.setColorAsHsv = function(hsv, commitHsv) { + var colorVal, k, newColor, newHsv, oldColor, oldFormat, v; + newHsv = this.hsv; + for (k in hsv) { + v = hsv[k]; + newHsv[k] = v; + } + newColor = tinycolor(newHsv); + oldColor = tinycolor(this.getColor()); + oldFormat = oldColor.format; + colorVal; + + switch (oldFormat) { + case 'hsl': + colorVal = newColor.toHslString(); + break; + case 'rgb': + colorVal = newColor.toRgbString(); + break; + case 'hex': + case 'name': + colorVal = this.hsv.a < 1 ? newColor.toRgbString() : newColor.toHexString(); + } + return this.commitColor(colorVal, commitHsv); + }; + + ColorEditor.prototype.commitColor = function(colorVal, resetHsv) { + var colorObj; + if (resetHsv == null) { + resetHsv = true; + } + this.callback(colorVal); + this.color = colorVal; + this.$colorValue.val(colorVal); + if (resetHsv) { + colorObj = tinycolor(colorVal); + this.hsv = colorObj.toHsv(); + this.color = colorObj; + } + return this.synchronize(); + }; + + ColorEditor.prototype.handleSelectionFieldDrag = function(event) { + var height, hsv, width, xOffset, yOffset; + yOffset = event.clientY - this.$selection.offset().top; + xOffset = event.clientX - this.$selection.offset().left; + height = this.$selection.height(); + width = this.$selection.width(); + xOffset = Math.min(width, Math.max(0, xOffset)); + yOffset = Math.min(height, Math.max(0, yOffset)); + hsv = {}; + hsv.s = xOffset / width; + hsv.v = 1 - yOffset / height; + this.setColorAsHsv(hsv, false); + if (!this.$selection.find('.selector_base').is(":focus")) { + return this.$selection.find('.selector_base').focus(); + } + }; + + ColorEditor.prototype.handleHueDrag = function(event) { + var height, hsv, offset; + offset = event.clientY - this.$hueSlider.offset().top; + height = this.$hueSlider.height(); + offset = Math.min(height, Math.max(0, offset)); + hsv = {}; + hsv.h = (1 - offset / height) * 360; + this.setColorAsHsv(hsv, false); + if (!this.$hueSlider.find('.selector_base').is(":focus")) { + return this.$hueSlider.find('.selector_base').focus(); + } + }; + + ColorEditor.prototype.handleOpacityDrag = function(event) { + var height, hsv, offset; + offset = event.clientY - this.$opacitySlider.offset().top; + height = this.$opacitySlider.height(); + offset = Math.min(height, Math.max(0, offset)); + hsv = {}; + hsv.a = 1 - offset / height; + this.setColorAsHsv(hsv, false); + if (!this.$opacitySlider.find('.selector_base').is(":focus")) { + return this.$opacitySlider.find('.selector_base').focus(); + } + }; + + ColorEditor.prototype.registerDragHandler = function(selector, handler) { + var element, mouseupHandler; + element = this.$element.find(selector); + element.mousedown(handler); + mouseupHandler = function(event) { + $(window).unbind('mousemove', handler); + return $(window).unbind('mouseup', mouseupHandler); + }; + return element.mousedown(function(event) { + $(window).bind('mousemove', handler); + return $(window).bind('mouseup', mouseupHandler); + }); + }; + + ColorEditor.prototype.handleSelectionFocus = function(event) { + var hsv, step, xOffset, yOffset; + switch (event.keyCode) { + case 37: + step = 1.5; + step = event.shiftKey ? step * 5 : step; + xOffset = Number($.trim(this.$selectionBase.css('left').replace('%', ''))); + xOffset = Math.min(100, Math.max(0, xOffset - step)); + hsv = {}; + hsv.s = xOffset / 100; + this.setColorAsHsv(hsv, false); + return false; + case 39: + step = 1.5; + step = event.shiftKey ? step * 5 : step; + xOffset = Number($.trim(this.$selectionBase.css('left').replace('%', ''))); + xOffset = Math.min(100, Math.max(0, xOffset + step)); + hsv = {}; + hsv.s = xOffset / 100; + this.setColorAsHsv(hsv, false); + return false; + case 40: + step = 1.5; + step = event.shiftKey ? step * 5 : step; + yOffset = Number($.trim(this.$selectionBase.css('bottom').replace('%', ''))); + yOffset = Math.min(100, Math.max(0, yOffset - step)); + hsv = {}; + hsv.v = yOffset / 100; + this.setColorAsHsv(hsv, false); + return false; + case 38: + step = 1.5; + step = event.shiftKey ? step * 5 : step; + yOffset = Number($.trim(this.$selectionBase.css('bottom').replace('%', ''))); + yOffset = Math.min(100, Math.max(0, yOffset + step)); + hsv = {}; + hsv.v = yOffset / 100; + this.setColorAsHsv(hsv, false); + return false; + } + }; + + ColorEditor.prototype.handleHueFocus = function(event) { + var hsv, hue, step; + switch (event.keyCode) { + case 40: + step = 3.6; + step = event.shiftKey ? step * 5 : step; + hsv = {}; + hue = Number(this.hsv.h); + if (hue > 0) { + hsv.h = (hue - step) <= 0 ? 360 - step : hue - step; + this.setColorAsHsv(hsv); + } + return false; + case 38: + step = 3.6; + step = event.shiftKey ? step * 5 : step; + hsv = {}; + hue = Number(this.hsv.h); + if (hue < 360) { + hsv.h = (hue + step) >= 360 ? step : hue + step; + this.setColorAsHsv(hsv); + } + return false; + } + }; + + ColorEditor.prototype.handleOpacityFocus = function(event) { + var alpha, hsv, step; + switch (event.keyCode) { + case 40: + step = 0.01; + step = event.shiftKey ? step * 5 : step; + hsv = {}; + alpha = this.hsv.a; + if (alpha > 0) { + hsv.a = (alpha - step) <= 0 ? 0 : alpha - step; + this.setColorAsHsv(hsv); + } + return false; + case 38: + step = 0.01; + step = event.shiftKey ? step * 5 : step; + hsv = {}; + alpha = this.hsv.a; + if (alpha < 100) { + hsv.a = (alpha + step) >= 1 ? 1 : alpha + step; + return this.setColorAsHsv(hsv); + } + } + }; + + ColorEditor.prototype.registerFocusHandler = function(element, handler) { + element.focus(function(event) { + return element.bind('keydown', handler); + }); + return element.blur(function(event) { + return element.unbind('keydown', handler); + }); + }; + + return ColorEditor; + + })(); + }); + +}).call(this); + +/* @source mod/issue_tag.js */; + +define('mod/issue_tag', [ + "jquery", + "bootbox", + "lib/coloreditor" +], function($) { + $(function(){ + var issuesFilter = $('.nav-list-filter'), + issuesEdit = $('.nav-list-edit'), + remove_tag = function (name) { + issuesFilter.find('li').each(function (){ + var tName = $(this).attr('flag-tag'); + + if (name === tName){ + $(this).remove(); + } + }) + }, + clear_href_tag = function () { + var curHref = window.location.href, + url = curHref.split('?')[0], + tagCount = issuesEdit.attr('data-tag-count'); + if ($('.nav-list-edit div').length != tagCount){ + window.location.href = url; + } + }; + + $('.tag-admin').on('click', function() { + var admin = $(this); + if (admin.hasClass('tag-admin-unuse')){ + + admin.html('取消'); + admin.removeClass('tag-admin-unuse'); + admin.addClass('tag-admin-using'); + + issuesFilter.hide(); + issuesEdit.show(); + } else if (admin.hasClass('tag-admin-using')){ + + admin.html('管理'); + admin.removeClass('tag-admin-using'); + admin.addClass('tag-admin-unuse'); + + issuesFilter.show(); + issuesEdit.hide(); + + clear_href_tag(); + } + }); + $('.tag-remove').on('click', function () { + var tagItem = $(this).closest('div'), + tagType = tagItem.attr('data-tag-type'), + tagName = tagItem.attr('data-tag-name'), + tagTargetId = tagItem.attr('data-target-id'), + msg = '你确定要删除tag: ' + tagName + ' ?'; + if (tagName){ + bootbox.confirm(msg, function(confirmed){ + if (confirmed){ + $.post('/j/issue/delete_tag', {'tag_name': tagName, 'tag_type': tagType, 'tag_target_id': tagTargetId}, function (ret) { + var status = ret.r; + if (status === 1){ + tagItem.remove(); + remove_tag(tagName); + } + }, 'json') + } + }) + } + }); + var t, e, n; + e = function(e, n) { + return e.closest(".js-label-editor").find(".js-color-editor-bg").css("background-color", n), e.css("color", t(n, -.5)), e.css("border-color", n) + }, n = function(t) { + var e, n; + return e = "#eee", n = $(t).closest(".js-color-editor"), n.find(".js-color-editor-bg").css("background-color", e), t.css("color", "#c00"), t.css("border-color", e) + }, t = function(t, e) { + var n, s, a; + for (t = String(t).toLowerCase().replace(/[^0-9a-f]/g, ""), t.length < 6 && (t = t[0] + t[0] + t[1] + t[1] + t[2] + t[2]), e = e || 0, a = "#", n = void 0, s = 0; 3 > s; ) + n = parseInt(t.substr(2 * s, 2), 16), n = Math.round(Math.min(Math.max(0, n + n * e), 255)).toString(16), a += ("00" + n).substr(n.length), s++; + return a + }; + $('.js-color-cooser-color').on('click', function () { + var editor = $(this).closest(".js-label-editor"); + var editor_input = editor.find(".js-color-editor-input"); + editor.find(".js-label-editor-submit").removeClass("disabled"); + editor.removeClass("is-valid is-not-valid"); + var color_value = "#" + $(this).data("hex-color"); + editor_input.val(color_value); + e(editor_input, color_value); + }); + $('.js-color-editor-input').on('focusin', function () { + var t, s; + s = $(this), t = $(this).closest(".js-label-editor"), s.on("input.colorEditor", function() { + console.log('co'); + var a; + return "#" !== s.val().charAt(0) && s.val("#" + s.val()), t.removeClass("is-valid is-not-valid"), a = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(s.val()), + t.find(".js-label-editor-submit").toggleClass("disabled", !a), a ? (t.addClass("is-valid"), e(s, s.val())) : (t.addClass("is-not-valid"), n(s)) + }), s.on("blur.colorEditor", function() { + return s.off(".colorEditor") + }); + console.log('test'); + }); + + }); +}) + +/* @source mod/count.js */; + +define('mod/count', [], function() { + var countDict = { + public_num: 35, + teamfeed_num: 35, + userfeed_num: 35, + }; + return countDict; +}); + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source mod/ajax_load.js */; + +define('mod/ajax_load', [ + "jquery", + "mod/count", + "mod/relative_date", + "mod/user_avatar" +], function($, countDict, updateRelativeDate, loadAvatar) { + var ajaxLoad = function(url, number_type) { + var maxShown = 35; + $.ajax({type: "GET", + url: url, + dataType: "json", + beforeSend: function() { + $('.timeline .loader').show(); + }, + success: function(data) { + var result = data.result; + var length = data.length; + + $('.timeline>ul').append(result); + $('.timeline .loader').hide(); + if (length < maxShown) { + $('.timeline .pagination').hide(); + } else { + countDict[number_type] += maxShown; + } + updateRelativeDate(); + loadAvatar(); + } + }); + }; + + return ajaxLoad; +}); + +/* @source mod/teamfeed_pagination.js */; + +define('mod/teamfeed_pagination', [ + "jquery", + "mod/ajax_load", + "mod/count" +], function($, ajaxLoad, countDict) { + $(function () { + var btn = $('.join-or-leave-btn'); + if (btn.length == 0) { + btn = $('.btn-success'); + } + var team_uid = btn.attr('data-team'); + $('.timeline .loader').hide(); + $('.timeline .pagination').show().click( + function () { + var number_type = "teamfeed_num"; + var url = "/j/more/team/" + team_uid + "/" + countDict.teamfeed_num; + ajaxLoad(url, number_type); + }); + }); +}); + +/* @source mod/newsfeed.js */; + +define('mod/newsfeed', [ + "jquery", + "mod/user_avatar" +], function($, loadAvatar) { + $(function () { + $('.timeline').delegate('.expand-rest', 'click', function(){ + var last = $(this).parents('.expand-last'); + last.prevUntil('.expand-first').show(300); + last.hide(); + loadAvatar(); + }); + }); +}); + + +/* @source */; + +require( + ['jquery' + , 'bootbox' + , 'mod/newsfeed' + , 'mod/teamfeed_pagination' + , 'mod/issue_tag' + , 'mod/team_header'], + function($){ + + // FIXME: 单纯用 css :hover 搞不定吗? + $('.my_projects li').hover( + function () {$(this).addClass('hover');}, + function () {$(this).removeClass('hover');} + ); + + var delProj = function (proj, team, onSuccess) { + bootbox.confirm("Are you sure?", function(confirmed) { + if (confirmed) { + $.post('/hub/team/' + team + '/remove_project', {"project_name": proj}, function (ret) { + if (ret.r === 0) { + onSuccess(); + } + }, 'json'); + } + }); + }; + $('.my_projects li .delete-btn').click(function () { + var delBtn = $(this), proj = delBtn.attr('data-proj'), team = delBtn.attr('data-team'); + delProj(proj, team, function () { delBtn.closest('li').remove(); }); + }); + + }); diff --git a/dist/js/app/team/settings.js b/dist/js/app/team/settings.js new file mode 100644 index 0000000..ff8d283 --- /dev/null +++ b/dist/js/app/team/settings.js @@ -0,0 +1,258 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/drop_down_list.js */; + +define( + 'mod/drop_down_list', + [ + "jquery" +], + function($) { + var addItemMenu = function (inputObj, success, introAppendTo, reqUrl, templ, menuType, successArg){ + var keyCode = {enter:13, esc:27, tab:9, up:38, down:40, ctrl:17, n:78, p:80}, + item_menu, + get_data = function (url){ + if (menuType == "repos"){ + length = url.length, + url = url.slice(1, length - 1); + }else { + url = url.split('/')[2]; + } + return url; + }, + call_success = function (){ + if (menuType == "repos"){ + success(); + } else { + success(successArg); + $(introAppendTo).find('.add-item-menu').remove(); + } + }; + + var hideAddItemMenu = function () { + item_menu && item_menu.empty().remove(); + }; + + var showIntro = function () { + if (!item_menu || item_menu.is(':empty')) { + item_menu = $('<div class="add-item-menu"></div>').appendTo(introAppendTo) + .on('mouseenter', 'li', function () { + item_menu.find('li.active').removeClass('active'); + $(this).addClass('active'); + }) + .on('click', 'li', function (e) { + e.preventDefault(); + var url = $(this).attr('data-url'); + url = get_data(url); + inputObj.val(url); + setTimeout(hideAddItemMenu, 100); + call_success(); + }); + } + }; + + $('body').click(function () {setTimeout(hideAddItemMenu, 100);}); + + inputObj.live('keydown', function (e) { + (e.keyCode == keyCode.enter && item_menu && item_menu.find('li.active').length) && e.preventDefault(); + showIntro(); + }).live('keyup', + function (e) { + showIntro(); + var k = e.keyCode; + if (k == keyCode.up || k == keyCode.down || k==keyCode.ctrl + || k == keyCode.enter || k == keyCode.p || k == keyCode.n){ + if (item_menu && item_menu.find('li').length){ + (k == keyCode.esc) && hideAddItemMenu();// esc key to close the menu + var actItem = item_menu.find('li.active'); + if (actItem.length) { + var a = actItem; + if (k == keyCode.up || + (k == keyCode.p && e.ctrlKey == true)) { // up + var p = a.removeClass('active').prev(); + (p.length ? p : item_menu.find('li:last')).addClass('active'); + } else if (k == keyCode.down || + (k == keyCode.n && e.ctrlKey == true)) { // down + var n = a.removeClass('active').next(); + (n.length ? n : item_menu.find('li:first')).addClass('active'); + } else if (k == keyCode.enter) { // enter key to go to repo + e.preventDefault(); + var url = actItem.attr('data-url'); + url = get_data(url); + inputObj.val(url); + setTimeout(hideAddItemMenu, 100); + call_success(); + } + } else { + item_menu.find('li:first').addClass('active'); + } + } + } else { + var q = $(this).val(); + (q != '') ? $.getJSON( + reqUrl, + {q:q}, + function (r) { + item_menu.html($.tmpl(templ, r)).show(); + }) : showIntro(); + } + } + ); + }; + return addItemMenu; + }); + +/* @source */; + +require.config({ enable_ozma: true }); +require(['jquery', 'bootbox', 'mod/drop_down_list'], + function($, bootbox, drop_down_list){ + $(function () { + var post_data = function (field_id) { + var fieldObj = $(field_id), + user_id = fieldObj.find('.input_user_id').val(), + team_uid = fieldObj.find('.input_user_id').attr('team_uid'), + identity = fieldObj.find('.input_identity').val(); + if (user_id === ''){ + var msg = 'uid不能为空'; + show_error(fieldObj, msg); + return false; + }else{ + $.ajax({ + url: '/hub/team/' + team_uid + '/add_user', + type: 'POST', + data: {'user_id': user_id, 'identity': identity}, + dataType: 'json', + success: function (msg) { + if (msg.r === 0){ + var user_id = msg.uid, + avatar_url = msg.avatar_url, + new_user = '<li><img height="20" src="'+avatar_url+'" width="20"><a href="/people/'+user_id+'/">'+user_id+'</a><a href="Javascript:void(0);" user_id="'+user_id+'" team_uid="'+team_uid+'" class="remove-user remove action">(remove)</a></li>'; + fieldObj.find('.usernames').find('li:last').parent().append(new_user); + fieldObj.find('.alert-error').remove(); + } else { + var error = msg.error; + show_error(fieldObj, error); + } + } + }); + } + }, + reqUrl = '/api/autocomplete_users', + templ = $('#templ-users-autocomplete'); + + $('.add_team_member_btn').live('click', function () { + var btnObj = $(this), + field_id = btnObj.parent().parent().attr('id'); + post_data('#'+field_id); + $('#'+field_id).find('.add-item-menu').remove(); + }); + + $('.input_user_id').one('focusin', function (){ + var inputObj = $(this), + field_id = inputObj.parent().parent().attr('id'), + form_id = inputObj.parent().attr('id'); + $('#'+field_id).find('.add-item-menu').remove(); + $('#'+field_id).find('.alert-error').remove(); + drop_down_list(inputObj, post_data, '#'+form_id, reqUrl, templ, "users", '#'+field_id); + $('#'+field_id).find('.add-item-menu').remove(); + }); + + $('.remove-user').live('click', function(event){ + var removeBtn = $(this), + field_id = removeBtn.parent().parent().parent().attr('id'), + user_id = removeBtn.attr('user_id'), + team_uid = removeBtn.attr('team_uid'), + fieldObj = $('#'+field_id); + $('#'+field_id).find('.alert-error').remove(); + + $.ajax({ + url: '/hub/team/' + team_uid + '/remove_user', + type: 'POST', + data: {'user_id': user_id}, + dataType: 'json', + success: function (msg) { + if (msg.r === 0){ + $('.remove-user[user_id='+user_id+']').parent().remove(); + } else { + var error = msg.error; + show_error(fieldObj, error); + } + } + }); + }); + + var delete_team_btn = $('#settings_del_team'); + delete_team_btn.click(function () { + var team_id = $(this).attr('data-team'); + bootbox.confirm("Are you sure?", function(confirmed){ + if (confirmed) { + $.ajax({ + url: '/hub/team/' + team_id + '/remove', + type: 'POST', + data: {}, + dataType: 'json', + success: function (msg) { + if (msg.r === 0){ + location.href = '/hub/teams'; + } + } + }); + } + }); + }); + + function show_error(targetObj, msg) { + var html = '<p class="alert alert-error">'+msg+'</p>'; + targetObj.find('.alert-error').remove(); + targetObj.append(html); + } + }); + $('#doc_project').on('change', function() { + var select = $(this); + var team_name = select.data('team-uid'); + $.ajax({ + type: 'POST', + data: JSON.stringify({ + 'content': select.val() + }), + contentType: 'application/json; charset=UTF-8', + url: '/api/teams/' + team_name + '/doc_project/', + dataType: 'json', + success: function (ret) { + if (ret.status == 201) { + select.find('option:selected').removeAttr('selected'); + select.find('option[value="' + ret.content + '"]').attr("selected",true); + } + } + }); + }); + + var enableImageUpload = function (uploader){ + uploader.submit( + function() { + $(this).ajaxSubmit({ + dataType: 'json', + delegation: true, + success: function(r){ + var team_id = uploader.data('team-uid'); + var url = "/teams/" + team_id + "/upload_profile"; + $.post(url,r,function(ret){ + if (ret.r == 0){ + var img = document.getElementById("profile_url"); + img.src = r.url; + } + }, 'json'); + }, + error: function(r) { + alert("上传错误,请确认您上传的文件类型合法"); + } + }); + return false; + }); + }; + var uploader = $('#form-file-upload'); + enableImageUpload(uploader); +}); diff --git a/dist/js/app/team/teamfeed_timeline.js b/dist/js/app/team/teamfeed_timeline.js new file mode 100644 index 0000000..8955fa3 --- /dev/null +++ b/dist/js/app/team/teamfeed_timeline.js @@ -0,0 +1,4213 @@ + +require.config({ enable_ozma: true }); + + +/* @source mod/user_profile_card.js */; + +define('mod/user_profile_card', [ + "jquery", + "jquery-tmpl" +], function($) { + $(function () { + var userCard, teamCard, users = {}, user_type = {}; + $(document).delegate( + '.user-link,.user-mention', 'mouseover', + function (e) { + if (!userCard) { + userCard = $('<div class="user-card"></div>').appendTo('body') + .mouseleave(function () { + $(this).hide(); + $('.team-card').hide(); + }); + } + if (!teamCard) { + teamCard = $('<div class="team-card"></div>').appendTo('body') + .mouseleave(function () { + $(this).hide(); + $('.user-card').hide(); + }); + } + var pos = $(this).offset(); + pos.left = pos.left - 5; + pos.top = pos.top - 5; + var name = /@?(\w+)/.exec($(this).text())[1], user = users[name]; + + if (!user) { + $.getJSON('/api/card_info', {user: name}, + function (r) { + if (r.team) { + teamCard.css(pos).empty().show(); + teamCard.append($.tmpl($('#templ-team-card'), r.team)); + user_type[name] = 'team'; + users[name] = r.team; + } else { + userCard.css(pos).empty().show(); + userCard.append($.tmpl($('#templ-user-card'), r.user)); + user_type[name] = 'user'; + users[name] = r.user; + } + }); + } else { + if (user_type[name] === 'team') { + teamCard.css(pos).empty().show(); + teamCard.append($.tmpl($('#templ-team-card'), user)); + } else { + userCard.css(pos).empty().show(); + userCard.append($.tmpl($('#templ-user-card'), user)); + } + } + }); + }); +}); + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source mod/count.js */; + +define('mod/count', [], function() { + var countDict = { + public_num: 35, + teamfeed_num: 35, + userfeed_num: 35, + }; + return countDict; +}); + +/* @source mod/node_config.js */; + +define('mod/node_config', function() { + var config = { + port:'7076', + host:'code.intra.douban.com', + };//need to write this when online + return config; +}); + +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan <stevenlevithan.com> (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See <https://github.com/learnboost/socket.io-node/> for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 <http://code.google.com/p/swfobject/> + is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?(['Active'].concat('').join('X')):"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}(); +} +// Copyright: Hiroshi Ichikawa <http://gimite.net/en/> +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write('<html></html>'); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('<iframe name="'+ self.iframeId +'">'); + } catch (e) { + iframe = document.createElement('iframe'); + iframe.name = self.iframeId; + } + + iframe.id = self.iframeId; + + self.form.appendChild(iframe); + self.iframe = iframe; + }; + + initIframe(); + + // we temporarily stringify until we figure out how to prevent + // browsers from turning `\n` into `\r\n` in form inputs + this.area.value = io.JSON.stringify(data); + + try { + this.form.submit(); + } catch(e) {} + + if (this.iframe.attachEvent) { + iframe.onreadystatechange = function () { + if (self.iframe.readyState == 'complete') { + complete(); + } + }; + } else { + this.iframe.onload = complete; + } + + this.socket.setBuffer(true); + }; + + /** + * Creates a new JSONP poll that can be used to listen + * for messages from the Socket.IO server. + * + * @api private + */ + + JSONPPolling.prototype.get = function () { + var self = this + , script = document.createElement('script') + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (this.script) { + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + script.async = true; + script.src = this.prepareUrl() + query; + script.onerror = function () { + self.onClose(); + }; + + var insertAt = document.getElementsByTagName('script')[0]; + insertAt.parentNode.insertBefore(script, insertAt); + this.script = script; + + if (indicator) { + setTimeout(function () { + var iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + document.body.removeChild(iframe); + }, 100); + } + }; + + /** + * Callback function for the incoming message stream from the Socket.IO server. + * + * @param {String} data The message + * @api private + */ + + JSONPPolling.prototype._ = function (msg) { + this.onData(msg); + if (this.isOpen) { + this.get(); + } + return this; + }; + + /** + * The indicator hack only works after onload + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + JSONPPolling.prototype.ready = function (socket, fn) { + var self = this; + if (!indicator) return fn.call(this); + + io.util.load(function () { + fn.call(self); + }); + }; + + /** + * Checks if browser supports this transport. + * + * @return {Boolean} + * @api public + */ + + JSONPPolling.check = function () { + return 'document' in global; + }; + + /** + * Check if cross domain requests are supported + * + * @returns {Boolean} + * @api public + */ + + JSONPPolling.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('jsonp-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +if (typeof define === "function" && define.amd) { + define("socket.io", [], function () { return io; }); +} +})(); +/* @source mod/connect.js */; + +define('socket.io', 'lib/socket.io.js'); +define('mod/connect', [ + "socket.io", + "mod/node_config" +], function(_, config) { + var connectNode = function(channel) { + var url = "http://" + config.host + ":" + config.port; + var nodeio = io.connect(url, { + 'reconnect': true, + 'reconnection delay': 500, + 'max reconnection attempts': 10 + }); + nodeio.emit('ready', {channel: channel}); + return nodeio; + } + + return connectNode; +}); + +/* @source */; + +require(['jquery' +, 'mod/connect' +, 'mod/count' +, 'mod/relative_date' +, 'mod/user_avatar' +, 'mod/user_profile_card' +], function($, connectNode, countDict, updateRelativeDate, loadAvatar) { + var btn = $('.join-or-leave-btn'); + if (btn.length == 0) { + btn = $('.btn-success'); + } + var team_id = btn.attr("data-teamid"); + var channel = 'feed:public:team:v2:' + team_id; + var io = connectNode(channel); + io.on('announce', function(data) { + countDict.teamfeed_num += 1; + $('.timeline>ul').prepend(data.send_message); + updateRelativeDate(); + loadAvatar(); + }); +}); diff --git a/dist/js/app/watching/main.js b/dist/js/app/watching/main.js new file mode 100644 index 0000000..9d2e0c3 --- /dev/null +++ b/dist/js/app/watching/main.js @@ -0,0 +1,80 @@ + +require.config({ enable_ozma: true }); + + +/* @source */; + +require(['jquery'], function($){ + $(function() { + var watch_btn = $(".watch-btn"); + var countLabel = $('#watched-count'); + + var updateLabelBy = function (n) { + var count = Number(countLabel.text()) || 0; + if (count === 0 && n <= 0) { return; } + + count += n; + countLabel.text(count.toString()); + }; + + $.each(watch_btn, function(index,value){ + $(value).click(function() { + + if($(value).hasClass('watch')) { + $.post("/watch/"+$(value).attr('proj_id'), function(data) { + if (!data.error) { + $(value).html('<i class="icon-eye-open"></i> Unwatch'); + $(value).addClass('unwatch'); + $(value).removeClass('watch'); + updateLabelBy(1); + } else { + // show error notification to user + show_error("关注失败"); + } + }); + } + else{ + $.ajax("/watch/"+$(value).attr('proj_id'), { + type: "DELETE", + success: function(data) { + if (!data.error) { + $(value).html('<i class="icon-eye-open"></i> Watch'); + $(value).addClass('watch'); + $(value).removeClass('unwatch'); + updateLabelBy(-1); + } else { + show_error("取消关注失败"); + } + }, + error: function(e) { + show_error("取消关注失败"); + } + }); + } + }); + + }); + + function show_success(msg) { + var successDiv = $(".navbar .success"); + if (successDiv.size() === 0 ) { + successDiv= $("<div>").addClass("success").addClass("alert-success"); + $("div.navbar").append(successDiv); + } + successDiv.html(msg); + successDiv.fadeOut(1500, function () { + $(this).remove(); + }); + } + + function show_error(msg) { + var errorDiv = $(".navbar .error"); + if (errorDiv.size() === 0 ) { + errorDiv = $("<div>").addClass("error").addClass("alert-error"); + $("div.navbar").append(errorDiv); + } + errorDiv.html(msg); + } + + }); +}); diff --git a/dist/js/mod/common.js b/dist/js/mod/common.js new file mode 100644 index 0000000..adc881c --- /dev/null +++ b/dist/js/mod/common.js @@ -0,0 +1,23188 @@ + +/* @source lib/oz.js */; + +/** + * OzJS: microkernel for modular javascript + * compatible with AMD (Asynchronous Module Definition) + * see http://ozjs.org for details + * + * Copyright (C) 2010-2012, Dexter.Yy, MIT License + * vim: et:ts=4:sw=4:sts=4 + */ +(function(){ + +var window = this, + _toString = Object.prototype.toString, + _RE_PLUGIN = /(.*)!(.+)/, + _RE_DEPS = /\Wrequire\((['"]).+?\1\)/g, //' + _RE_SUFFIX = /\.(js|json)$/, + _RE_RELPATH = /^\.+?\/.+/, + _RE_DOT = /(^|\/)\.\//g, + _RE_ALIAS_IN_MID = /^([\w\-]+)\//, + _builtin_mods = { "require": 1, "exports": 1, "module": 1, "host": 1, "finish": 1 }, + + _config = { + mods: {} + }, + _scripts = {}, + _delays = {}, + _refers = {}, + _waitings = {}, + _latest_mod, + _scope, + _resets = {}, + + forEach = Array.prototype.forEach || function(fn, sc){ + for(var i = 0, l = this.length; i < l; i++){ + if (i in this) + fn.call(sc, this[i], i, this); + } + }; + +/** + * @public define / register a module and its meta information + * @param {string} module name. optional as unique module in a script file + * @param {string[]} dependencies + * @param {function} module code, execute only once on the first call + * + * @note + * + * define('', [""], func) + * define([""], func) + * define('', func) + * define(func) + * + * define('', "") + * define('', [""], "") + * define('', [""]) + * + */ +function define(name, deps, block){ + var is_remote = typeof block === 'string'; + if (!block) { + if (deps) { + if (isArray(deps)) { + block = filesuffix(realname(basename(name))); + } else { + block = deps; + deps = null; + } + } else { + block = name; + name = ""; + } + if (typeof name !== 'string') { + deps = name; + name = ""; + } else { + is_remote = typeof block === 'string'; + if (!is_remote && !deps) { + deps = seek(block); + } + } + } + name = name && realname(name); + var mod = name && _config.mods[name]; + if (!_config.debug && mod && mod.name + && (is_remote && mod.loaded == 2 || mod.exports)) { + return; + } + if (is_remote && _config.enable_ozma) { + deps = null; + } + var host = isWindow(this) ? this : window; + mod = _config.mods[name] = { + name: name, + url: mod && mod.url, + host: host, + deps: deps || [] + }; + if (name === "") { // capture anonymous module + _latest_mod = mod; + } + if (typeof block !== 'string') { + mod.block = block; + mod.loaded = 2; + } else { // remote module + var alias = _config.aliases; + if (alias) { + block = block.replace(/\{(\w+)\}/g, function(e1, e2){ + return alias[e2] || ""; + }); + } + mod.url = block; + } + if (mod.block && !isFunction(mod.block)) { // json module + mod.exports = block; + } +} + +/** + * @public run a code block its dependencies + * @param {string[]} [module name] dependencies + * @param {function} + */ +function require(deps, block, _self_mod) { + if (typeof deps === 'string') { + if (!block) { + return (_config.mods[realname(basename(deps, _scope))] + || {}).exports; + } + deps = [deps]; + } else if (!block) { + block = deps; + deps = seek(block); + } + var host = isWindow(this) ? this : window; + if (!_self_mod) { + _self_mod = { url: _scope && _scope.url }; + } + var m, remotes = 0, // counter for remote scripts + list = scan.call(host, deps, _self_mod); // calculate dependencies, find all required modules + for (var i = 0, l = list.length; i < l; i++) { + m = list[i]; + if (m.is_reset) { + m = _config.mods[m.name]; + } + if (m.url && m.loaded !== 2) { // remote module + remotes++; + m.loaded = 1; // status: loading + fetch(m, function(){ + this.loaded = 2; // status: loaded + var lm = _latest_mod; + if (lm) { // capture anonymous module + lm.name = this.name; + lm.url = this.url; + _config.mods[this.name] = lm; + _latest_mod = null; + } + // loaded all modules, calculate dependencies all over again + if (--remotes <= 0) { + require.call(host, deps, block, _self_mod); + } + }); + } + } + if (!remotes) { + _self_mod.deps = deps; + _self_mod.host = host; + _self_mod.block = block; + setTimeout(function(){ + tidy(deps, _self_mod); + list.push(_self_mod); + exec(list.reverse()); + }, 0); + } +} + +/** + * @private execute modules in a sequence of dependency + * @param {object[]} [module object] + */ +var exec = function(list){ + var mod, mid, tid, result, isAsync, deps, + depObjs, exportObj, moduleObj, rmod, + wt = _waitings; + while (mod = list.pop()) { + if (mod.is_reset) { + rmod = clone(_config.mods[mod.name]); + rmod.host = mod.host; + rmod.newname = mod.newname; + mod = rmod; + if (!_resets[mod.newname]) { + _resets[mod.newname] = []; + } + _resets[mod.newname].push(mod); + mod.exports = undefined; + } else if (mod.name) { + mod = _config.mods[mod.name] || mod; + } + if (!mod.block || !mod.running && mod.exports !== undefined) { + continue; + } + depObjs = []; + exportObj = {}; // for "exports" module + moduleObj = { id: mod.name, filename: mod.url, exports: exportObj }; + deps = mod.deps.slice(); + deps[mod.block.hiddenDeps ? 'unshift' : 'push']("require", "exports", "module"); + for (var i = 0, l = deps.length; i < l; i++) { + mid = deps[i]; + switch(mid) { + case 'require': + depObjs.push(require); + break; + case 'exports': + depObjs.push(exportObj); + break; + case 'module': + depObjs.push(moduleObj); + break; + case 'host': // deprecated + depObjs.push(mod.host); + break; + case 'finish': // execute asynchronously + tid = mod.name; + if (!wt[tid]) // for delay execute + wt[tid] = [list]; + else + wt[tid].push(list); + depObjs.push(function(result){ + // HACK: no guarantee that this function will be invoked after while() loop termination in Chrome/Safari + setTimeout(function(){ + // 'mod' equal to 'list[list.length-1]' + if (result !== undefined) { + mod.exports = result; + } + if (!wt[tid]) + return; + forEach.call(wt[tid], function(list){ + this(list); + }, exec); + delete wt[tid]; + mod.running = 0; + }, 0); + }); + isAsync = 1; + break; + default: + depObjs.push(( + (_resets[mid] || []).pop() + || _config.mods[realname(mid)] + || {} + ).exports); + break; + } + } + if (!mod.running) { + // execute module code. arguments: [dep1, dep2, ..., require, exports, module] + _scope = mod; + result = mod.block.apply(mod.host, depObjs) || null; + _scope = false; + exportObj = moduleObj.exports; + mod.exports = result !== undefined ? result : exportObj; // use empty exportObj for "finish" + for (var v in exportObj) { + if (v) { + mod.exports = exportObj; + } + break; + } + } + if (isAsync) { // skip, wait for finish() + mod.running = 1; + break; + } + } +}; + +/** + * @private observer for script loader, prevent duplicate requests + * @param {object} module object + * @param {function} callback + */ +var fetch = function(m, cb){ + var url = m.url, + observers = _scripts[url]; + if (!observers) { + var mname = m.name, delays = _delays; + if (m.deps && m.deps.length && delays[mname] !== 1) { + delays[mname] = [m.deps.length, cb]; + forEach.call(m.deps, function(dep){ + var d = _config.mods[realname(dep)]; + if (this[dep] !== 1 && d.url && d.loaded !== 2) { + if (!this[dep]) { + this[dep] = []; + } + this[dep].push(m); + } else { + delays[mname][0]--; + } + }, _refers); + if (delays[mname][0] > 0) { + return; + } else { + delays[mname] = 1; + } + } + observers = _scripts[url] = [[cb, m]]; + var true_url = /^\w+:\/\//.test(url) ? url + : (_config.enable_ozma && _config.distUrl || _config.baseUrl || '') + + (_config.enableAutoSuffix ? namesuffix(url) : url); + getScript.call(m.host || this, true_url, function(){ + forEach.call(observers, function(args){ + args[0].call(args[1]); + }); + _scripts[url] = 1; + if (_refers[mname] && _refers[mname] !== 1) { + forEach.call(_refers[mname], function(dm){ + var b = this[dm.name]; + if (--b[0] <= 0) { + this[dm.name] = 1; + fetch(dm, b[1]); + } + }, delays); + _refers[mname] = 1; + } + }); + } else if (observers === 1) { + cb.call(m); + } else { + observers.push([cb, m]); + } +}; + +/** + * @private search and sequence all dependencies, based on DFS + * @param {string[]} a set of module names + * @param {object[]} + * @param {object[]} a sequence of modules, for recursion + * @return {object[]} a sequence of modules + */ +function scan(m, file_mod, list){ + list = list || []; + if (!m[0]) { + return list; + } + var deps, + history = list.history; + if (!history) { + history = list.history = {}; + } + if (m[1]) { + deps = m; + m = false; + } else { + var truename, + _mid = m[0], + plugin = _RE_PLUGIN.exec(_mid); + if (plugin) { + _mid = plugin[2]; + plugin = plugin[1]; + } + var mid = realname(_mid); + if (!_config.mods[mid] && !_builtin_mods[mid]) { + var true_mid = realname(basename(_mid, file_mod)); + if (mid !== true_mid) { + _config.mods[file_mod.url + ':' + mid] = true_mid; + mid = true_mid; + } + if (!_config.mods[true_mid]) { + define(true_mid, filesuffix(true_mid)); + } + } + m = file_mod = _config.mods[mid]; + if (m) { + if (plugin === "new") { + m = { + is_reset: true, + deps: m.deps, + name: mid, + newname: plugin + "!" + mid, + host: this + }; + } else { + truename = m.name; + } + if (history[truename]) { + return list; + } + } else { + return list; + } + if (!history[truename]) { + deps = m.deps || []; + // find require information within the code + // for server-side style module + //deps = deps.concat(seek(m)); + if (truename) { + history[truename] = true; + } + } else { + deps = []; + } + } + for (var i = deps.length - 1; i >= 0; i--) { + if (!history[deps[i]]) { + scan.call(this, [deps[i]], file_mod, list); + } + } + if (m) { + tidy(deps, m); + list.push(m); + } + return list; +} + +/** + * @experiment + * @private analyse module code + * to find out dependencies which have no explicit declaration + * @param {object} module object + */ +function seek(block){ + var hdeps = block.hiddenDeps || []; + if (!block.hiddenDeps) { + var code = block.toString(), + h = null; + hdeps = block.hiddenDeps = []; + while (h = _RE_DEPS.exec(code)) { + hdeps.push(h[0].slice(10, -2)); + } + } + return hdeps.slice(); +} + +function tidy(deps, m){ + forEach.call(deps.slice(), function(dep, i){ + var true_mid = this[m.url + ':' + realname(dep)]; + if (typeof true_mid === 'string') { + deps[i] = true_mid; + } + }, _config.mods); +} + +function config(opt){ + for (var i in opt) { + if (i === 'aliases') { + if (!_config[i]) { + _config[i] = {}; + } + for (var j in opt[i]) { + _config[i][j] = opt[i][j]; + } + var mods = _config.mods; + for (var k in mods) { + mods[k].name = realname(k); + mods[mods[k].name] = mods[k]; + } + } else { + _config[i] = opt[i]; + } + } +} + +/** + * @note naming pattern: + * _g_src.js + * _g_combo.js + * + * jquery.js + * jquery_pack.js + * + * _yy_src.pack.js + * _yy_combo.js + * + * _yy_bak.pack.js + * _yy_bak.pack_pack.js + */ +function namesuffix(file){ + return file.replace(/(.+?)(_src.*)?(\.\w+)$/, function($0, $1, $2, $3){ + return $1 + ($2 && '_combo' || '_pack') + $3; + }); +} + +function filesuffix(mid){ + return _RE_SUFFIX.test(mid) ? mid : mid + '.js'; +} + +function realname(mid){ + var alias = _config.aliases; + if (alias) { + mid = mid.replace(_RE_ALIAS_IN_MID, function(e1, e2){ + return alias[e2] || (e2 + '/'); + }); + } + return mid; +} + +function basename(mid, file_mod){ + var rel_path = _RE_RELPATH.exec(mid); + if (rel_path && file_mod) { // resolve relative path in Module ID + mid = (file_mod.url || '').replace(/[^\/]+$/, '') + rel_path[0]; + } + return resolvename(mid); +} + +function resolvename(url){ + url = url.replace(_RE_DOT, '$1'); + var dots, dots_n, url_dup = url, RE_DOTS = /(\.\.\/)+/g; + while (dots = (RE_DOTS.exec(url_dup) || [])[0]) { + dots_n = dots.match(/\.\.\//g).length; + dots = dots.replace(/\./, '\\.'); + url = url.replace(new RegExp('([^/\\.]+/){' + dots_n + '}' + dots), ''); + } + return url.replace(/\/\//g, '/'); +} + +/** + * @public non-blocking script loader + * @param {string} + * @param {object} config + */ +function getScript(url, op){ + var doc = isWindow(this) ? this.document : document, + s = doc.createElement("script"); + s.type = "text/javascript"; + s.async = "async"; //for firefox3.6 + if (!op) + op = {}; + else if (isFunction(op)) + op = { callback: op }; + if (op.charset) + s.charset = op.charset; + s.src = url; + var h = doc.getElementsByTagName("head")[0]; + s.onload = s.onreadystatechange = function(__, isAbort){ + if ( isAbort || !s.readyState || /loaded|complete/.test(s.readyState) ) { + s.onload = s.onreadystatechange = null; + if (h && s.parentNode) { + h.removeChild(s); + } + s = undefined; + if (!isAbort && op.callback) { + op.callback(); + } + } + }; + h.insertBefore(s, h.firstChild); +} + +function isFunction(obj) { + return _toString.call(obj) === "[object Function]"; +} + +function isArray(obj) { + return _toString.call(obj) === "[object Array]"; +} + +function isWindow(obj) { + return "setInterval" in obj; +} + +function clone(obj) { // be careful of using `delete` + function NewObj(){} + NewObj.prototype = obj; + return new NewObj(); +} + +var oz = { + define: define, + require: require, + config: config, + seek: seek, + fetch: fetch, + realname: realname, + basename: basename, + filesuffix: filesuffix, + namesuffix: namesuffix, + // non-core + _getScript: getScript, + _clone: clone, + _forEach: forEach, + _isFunction: isFunction, + _isWindow: isWindow +}; + +require.config = config; +define.amd = {}; + +if (!window.window) { // for nodejs + exports.oz = oz; + exports._config = _config; + // hook for build tool + for (var i in oz) { + exports[i] = oz[i]; + } + var hooking = function(fname){ + return function(){ return exports[fname].apply(this, arguments); }; + }; + exec = hooking('exec'); + fetch = hooking('fetch'); + require = hooking('require'); + require.config = config; +} else { + window.oz = oz; + window.define = define; + window.require = require; +} + +})(); + +require.config({ enable_ozma: true }); + + +/* @source lib/jquery-1.8.3.js */; + +/*! + * jQuery JavaScript Library v1.8.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) + */ +(function( window, undefined ) { +var + // A central reference to the root jQuery(document) + rootjQuery, + + // The deferred used on DOM ready + readyList, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } + + return jQuery.merge( this, selector ); + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.8.3", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; + + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready, 1 ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.split( core_rspace ), function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + input.setAttribute( "checked", "checked" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // NOTE: To any future maintainer, we've window.getComputedStyle + // because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "<div></div>"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + container.style.zoom = 1; + } + + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; + + return support; +})(); +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + deletedIds: [], + + // Remove at next major release (1.9/2.0) + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, key, true ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, fixSpecified, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea|)$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var removes, className, elem, c, cl, i, l; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { + removes = ( value || "" ).split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + if ( elem.nodeType === 1 && elem.className ) { + + className = (" " + elem.className + " ").replace( rclass, " " ); + + // loop over each item in the removal list + for ( c = 0, cl = removes.length; c < cl; c++ ) { + // Remove until there is nothing to remove, + while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { + className = className.replace( " " + removes[ c ] + " " , " " ); + } + } + elem.className = value ? jQuery.trim( className ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( core_rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 + attrFn: {}, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + + attrNames = value.split( core_rspace ); + + for ( ; i < attrNames.length; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.value = value + "" ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var t, tns, type, origType, namespaces, origCount, + j, events, special, eventType, handleObj, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, "events", true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, + type = event.type || event, + namespaces = []; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + for ( old = elem; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old === (elem.ownerDocument || document) ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, + handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = core_slice.call( arguments ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = []; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) + event.metaKey = !!event.metaKey; + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "_submit_attached" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "_submit_attached", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "_change_attached", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var cachedruns, + assertGetIdNotName, + Expr, + getText, + isXML, + contains, + compile, + sortOrder, + hasDuplicate, + outermostContext, + + baseHasDuplicate = true, + strundefined = "undefined", + + expando = ( "sizcache" + Math.random() ).replace( ".", "" ), + + Token = String, + document = window.document, + docElem = document.documentElement, + dirruns = 0, + done = 0, + pop = [].pop, + push = [].push, + slice = [].slice, + // Use a stripped-down indexOf if a native one is unavailable + indexOf = [].indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + // Augment a function for special use by Sizzle + markFunction = function( fn, value ) { + fn[ expando ] = value == null || value; + return fn; + }, + + createCache = function() { + var cache = {}, + keys = []; + + return markFunction(function( key, value ) { + // Only keep the most recent entries + if ( keys.push( key ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + + // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157) + return (cache[ key + " " ] = value); + }, cache ); + }, + + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // Regex + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments not in parens/brackets, + // then attribute selectors and non-pseudos (denoted by :), + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", + + // For matchExpr.POS and matchExpr.needsContext + pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rnot = /^:not/, + rsibling = /[\x20\t\r\n\f]*[+~]/, + rendsWithNot = /:not\($/, + + rheader = /h\d/i, + rinputs = /input|select|textarea|button/i, + + rbackslash = /\\(?!\\)/g, + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "POS": new RegExp( pos, "i" ), + "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) + }, + + // Support + + // Used for testing something on an element + assert = function( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } + }, + + // Check if getElementsByTagName("*") returns only elements + assertTagNameNoComments = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }), + + // Check if getAttribute returns normalized href attributes + assertHrefNotNormalized = assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }), + + // Check if attributes should be retrieved by attribute nodes + assertAttributes = assert(function( div ) { + div.innerHTML = "<select></select>"; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }), + + // Check if getElementsByClassName can be trusted + assertUsableClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>"; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }), + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + assertUsableName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>"; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = document.getElementsByName && + // buggy browsers will return fewer than the correct 2 + document.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + document.getElementsByName( expando + 0 ).length; + assertGetIdNotName = !document.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + +// If slice is not available, provide a backup +try { + slice.call( docElem.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + for ( ; (elem = this[i]); i++ ) { + results.push( elem ); + } + return results; + }; +} + +function Sizzle( selector, context, results, seed ) { + results = results || []; + context = context || document; + var match, elem, xml, m, + nodeType = context.nodeType; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( nodeType !== 1 && nodeType !== 9 ) { + return []; + } + + xml = isXML( context ); + + if ( !xml && !seed ) { + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); +} + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + return Sizzle( expr, null, null, [ elem ] ).length > 0; +}; + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + } else { + + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } + return ret; +}; + +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Element contains another +contains = Sizzle.contains = docElem.contains ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); + } : + docElem.compareDocumentPosition ? + function( a, b ) { + return b && !!( a.compareDocumentPosition( b ) & 16 ); + } : + function( a, b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + return false; + }; + +Sizzle.attr = function( elem, name ) { + var val, + xml = isXML( elem ); + + if ( !xml ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( xml || assertAttributes ) { + return elem.getAttribute( name ); + } + val = elem.getAttributeNode( name ); + return val ? + typeof elem[ name ] === "boolean" ? + elem[ name ] ? name : null : + val.specified ? val.value : null : + null; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + // IE6/7 return a modified href + attrHandle: assertHrefNotNormalized ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }, + + find: { + "ID": assertGetIdNotName ? + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + } : + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }, + + "TAG": assertTagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + var elem, + tmp = [], + i = 0; + + for ( ; (elem = results[i]); i++ ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }, + + "NAME": assertUsableName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }, + + "CLASS": assertUsableClassName && function( className, context, xml ) { + if ( typeof context.getElementsByClassName !== strundefined && !xml ) { + return context.getElementsByClassName( className ); + } + } + }, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( rbackslash, "" ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 3 xn-component of xn+y argument ([+-]?\d*n|) + 4 sign of xn-component + 5 x of xn-component + 6 sign of y-component + 7 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1] === "nth" ) { + // nth-child requires argument + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); + match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); + + // other types prohibit arguments + } else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var unquoted, excess; + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] ) { + match[2] = match[3]; + } else if ( (unquoted = match[4]) ) { + // Only check arguments that contain a pseudo + if ( rpseudo.test(unquoted) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + unquoted = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + } + match[2] = unquoted; + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + "ID": assertGetIdNotName ? + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + return elem.getAttribute("id") === id; + }; + } : + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === id; + }; + }, + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); + + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ expando ][ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem, context ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.substr( result.length - check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, argument, first, last ) { + + if ( type === "nth" ) { + return function( elem ) { + var node, diff, + parent = elem.parentNode; + + if ( first === 1 && last === 0 ) { + return true; + } + + if ( parent ) { + diff = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + diff++; + if ( elem === node ) { + break; + } + } + } + } + + // Incorporate the offset (or cast to NaN), then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + }; + } + + return function( elem ) { + var node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + var nodeType; + elem = elem.firstChild; + while ( elem ) { + if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { + return false; + } + elem = elem.nextSibling; + } + return true; + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "text": function( elem ) { + var type, attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + (type = elem.type) === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); + }, + + // Input types + "radio": createInputPseudo("radio"), + "checkbox": createInputPseudo("checkbox"), + "file": createInputPseudo("file"), + "password": createInputPseudo("password"), + "image": createInputPseudo("image"), + + "submit": createButtonPseudo("submit"), + "reset": createButtonPseudo("reset"), + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "focus": function( elem ) { + var doc = elem.ownerDocument; + return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "active": function( elem ) { + return elem === elem.ownerDocument.activeElement; + }, + + // Positional types + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 0; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 1; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +function siblingCheck( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; +} + +sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? + a.compareDocumentPosition : + a.compareDocumentPosition(b) & 4 + ) ? -1 : 1; + } : + function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +baseHasDuplicate = !hasDuplicate; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ expando ][ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + + // Cast descendant combinators to space + matched.type = match[0].replace( rtrim, " " ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + matched.type = type; + matched.matches = match; + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && combinator.dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( !xml ) { + var cache, + dirkey = dirruns + " " + doneName + " ", + cachedkey = dirkey + cachedruns; + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( (cache = elem[ expando ]) === cachedkey ) { + return elem.sizset; + } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { + if ( elem.sizset ) { + return elem; + } + } else { + elem[ expando ] = cachedkey; + if ( matcher( elem, context, xml ) ) { + elem.sizset = true; + return elem; + } + elem.sizset = false; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( matcher( elem, context, xml ) ) { + return elem; + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && tokens.join("") + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Nested matchers should use non-integer dirruns + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = superMatcher.el; + } + + // Add elements passing elementMatchers directly to results + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + for ( j = 0; (matcher = elementMatchers[j]); j++ ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++superMatcher.el; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + for ( j = 0; (matcher = setMatchers[j]); j++ ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + superMatcher.el = 0; + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ expando ][ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed, xml ) { + var i, tokens, token, type, find, + match = tokenize( selector ), + j = match.length; + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !xml && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().length ); + } + + // Fetch a seed set for right-to-left matching + for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( rbackslash, "" ), + rsibling.test( tokens[0].type ) && context.parentNode || context, + xml + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && tokens.join(""); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + xml, + results, + rsibling.test( selector ) + ); + return results; +} + +if ( document.querySelectorAll ) { + (function() { + var disconnectedMatch, + oldSelect = select, + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ], + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + // A support test would require too much code (would include document ready) + // just skip matchesSelector for :active + rbuggyMatches = [ ":active" ], + matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = "<select><option selected=''></option></select>"; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here (do not put tests after this one) + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE9 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "<p test=''></p>"; + if ( div.querySelectorAll("[test^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here (do not put tests after this one) + div.innerHTML = "<input type='hidden'/>"; + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push(":enabled", ":disabled"); + } + }); + + // rbuggyQSA always contains :focus, so no need for a length check + rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); + + select = function( selector, context, results, seed, xml ) { + // Only use querySelectorAll when not filtering, + // when this is not xml, + // and when no QSA bugs apply + if ( !seed && !xml && !rbuggyQSA.test( selector ) ) { + var groups, i, + old = true, + nid = expando, + newContext = context, + newSelector = context.nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + groups[i].join(""); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + + return oldSelect( selector, context, results, seed, xml ); + }; + + if ( matches ) { + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + try { + matches.call( div, "[test!='']:sizzle" ); + rbuggyMatches.push( "!=", pseudos ); + } catch ( e ) {} + }); + + // rbuggyMatches always contains :active and :focus, so no need for a length check + rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); + + Sizzle.matchesSelector = function( elem, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyMatches always contains :active, so no need for an existence check + if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, null, null, [ elem ] ).length > 0; + }; + } + })(); +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Back-compat +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, l, length, n, r, ret, + self = this; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + ret = this.pushStack( "", "find", selector ); + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /<tbody/i, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + rnocache = /<(?:script|object|embed|option|style)/i, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rcheckableType = /^(?:checkbox|radio)$/, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, + wrapMap = { + option: [ 1, "<select multiple='multiple'>", "</select>" ], + legend: [ 1, "<fieldset>", "</fieldset>" ], + thead: [ 1, "<table>", "</table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], + area: [ 1, "<map>", "</map>" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, +// unless wrapped in a div with non-breaking characters in front of it. +if ( !jQuery.support.htmlSerialize ) { + wrapMap._default = [ 1, "X<div>", "</div>" ]; +} + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); + } + }, + + after: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); + } + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + if ( !isDisconnected( this[0] ) ) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); + } + + if ( typeof value !== "string" ) { + value = jQuery( value ).detach(); + } + + return this.each(function() { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery( this ).remove(); + + if ( next ) { + jQuery(next).before( value ); + } else { + jQuery(parent).append( value ); + } + }); + } + + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = [].concat.apply( [], args ); + + var results, first, fragment, iNoClone, + i = 0, + value = args[0], + scripts = [], + l = this.length; + + // We can't cloneNode fragments that contain checked, in WebKit + if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { + return this.each(function() { + jQuery(this).domManip( args, table, callback ); + }); + } + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + args[0] = value.call( this, i, table ? self.html() : undefined ); + self.domManip( args, table, callback ); + }); + } + + if ( this[0] ) { + results = jQuery.buildFragment( args, this, scripts ); + fragment = results.fragment; + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + // Fragments from the fragment cache must always be cloned and never used in place. + for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + i === iNoClone ? + fragment : + jQuery.clone( fragment, true, true ) + ); + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + + if ( scripts.length ) { + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + if ( jQuery.ajax ) { + jQuery.ajax({ + url: elem.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.error("no ajax"); + } + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function cloneFixAttributes( src, dest ) { + var nodeName; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } + + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } + + nodeName = dest.nodeName.toLowerCase(); + + if ( nodeName === "object" ) { + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); +} + +jQuery.buildFragment = function( args, context, scripts ) { + var fragment, cacheable, cachehit, + first = args[ 0 ]; + + // Set context from what may come in as undefined or a jQuery collection or a node + // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & + // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + + // Mark cacheable and look for a hit + cacheable = true; + fragment = jQuery.fragments[ first ]; + cachehit = fragment !== undefined; + } + + if ( !fragment ) { + fragment = context.createDocumentFragment(); + jQuery.clean( args, context, fragment, scripts ); + + // Update the cache, but only store false + // unless this is a second parsing of the same content + if ( cacheable ) { + jQuery.fragments[ first ] = cachehit && fragment; + } + } + + return { fragment: fragment, cacheable: cacheable }; +}; + +jQuery.fragments = {}; + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + l = insert.length, + parent = this.length === 1 && this[0].parentNode; + + if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { + insert[ original ]( this[0] ); + return this; + } else { + for ( ; i < l; i++ ) { + elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } + + return this.pushStack( ret, name, insert.selector ); + } + }; +}); + +function getAll( elem ) { + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); + + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); + + } else { + return []; + } +} + +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + clone; + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes( elem, clone ); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); + + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); + + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }, + + clean: function( elems, context, fragment, scripts ) { + var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, + safe = context === document && safeFragment, + ret = []; + + // Ensure that context is a document + if ( !context || typeof context.createDocumentFragment === "undefined" ) { + context = document; + } + + // Use the already-created safe fragment if context permits + for ( i = 0; (elem = elems[i]) != null; i++ ) { + if ( typeof elem === "number" ) { + elem += ""; + } + + if ( !elem ) { + continue; + } + + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Ensure a safe container in which to render the html + safe = safe || createSafeFragment( context ); + div = context.createElement("div"); + safe.appendChild( div ); + + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1></$2>"); + + // Go to html and back, then peel off extra wrappers + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + depth = wrap[0]; + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } + + // Remove IE's autoinserted <tbody> from table fragments + if ( !jQuery.support.tbody ) { + + // String was a <table>, *may* have spurious <tbody> + hasBody = rtbody.test(elem); + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare <thead> or <tfoot> + wrap[1] === "<table>" && !hasBody ? + div.childNodes : + []; + + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } + + elem = div.childNodes; + + // Take out of fragment container (we need a fresh div each time) + div.parentNode.removeChild( div ); + } + } + + if ( elem.nodeType ) { + ret.push( elem ); + } else { + jQuery.merge( ret, elem ); + } + } + + // Fix #11356: Clear elements from safeFragment + if ( div ) { + elem = div = safe = null; + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + for ( i = 0; (elem = ret[i]) != null; i++ ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } + } + } + + // Append elements to a provided document fragment + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; + + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } + + return ret; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var data, id, elem, type, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + jQuery.deletedIds.push( id ); + } + } + } + } + } +}); +// Limit scope pollution from any deprecated API +(function() { + +var matched, browser; + +// Use of jQuery.browser is frowned upon. +// More details: http://api.jquery.com/jQuery.browser +// jQuery.uaMatch maintained for back-compat +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +matched = jQuery.uaMatch( navigator.userAgent ); +browser = {}; + +if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; +} + +// Chrome is Webkit, but Webkit is also Safari. +if ( browser.chrome ) { + browser.webkit = true; +} else if ( browser.webkit ) { + browser.safari = true; +} + +jQuery.browser = browser; + +jQuery.sub = function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; +}; + +})(); +var curCSS, iframe, iframeDoc, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + + eventsToggle = jQuery.fn.toggle; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var elem, display, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + values[ index ] = jQuery._data( elem, "olddisplay" ); + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && elem.style.display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + display = curCSS( elem, "display" ); + + if ( !values[ index ] && display !== "none" ) { + jQuery._data( elem, "olddisplay", display ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state, fn2 ) { + var bool = typeof state === "boolean"; + + if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { + return eventsToggle.apply( this, arguments ); + } + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, numeric, extra ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( numeric || extra !== undefined ) { + num = parseFloat( val ); + return numeric || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: To any future maintainer, we've window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + curCSS = function( elem, name ) { + var ret, width, minWidth, maxWidth, + computed = window.getComputedStyle( elem, null ), + style = elem.style; + + if ( computed ) { + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + curCSS = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + // we use jQuery.css instead of curCSS here + // because of the reliableMarginRight CSS hook! + val += jQuery.css( elem, extra + cssExpand[ i ], true ); + } + + // From this point on we use curCSS for maximum performance (relevant in animations) + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } else { + // at this point, extra isn't content, so add padding + val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + valueIsBorderBox = true, + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox + ) + ) + "px"; +} + + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + if ( elemdisplay[ nodeName ] ) { + return elemdisplay[ nodeName ]; + } + + var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), + display = elem.css("display"); + elem.remove(); + + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // Use the already-created iframe if possible + iframe = document.body.appendChild( + iframe || jQuery.extend( document.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + }) + ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write("<!doctype html><html><body>"); + iframeDoc.close(); + } + + elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); + + display = curCSS( elem, "display" ); + document.body.removeChild( iframe ); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } else { + return getWidthOrHeight( elem, name, extra ); + } + } + }, + + set: function( elem, value, extra ) { + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "marginRight" ); + } + }); + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + var ret = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rselectTextarea = /^(?:select|textarea)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +var + // Document location + ajaxLocParts, + ajaxLocation, + + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, list, placeBefore, + dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), + i = 0, + length = dataTypes.length; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, + dataType /* internal */, inspected /* internal */ ) { + + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; + + inspected[ dataType ] = true; + + var selection, + list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ); + + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + // Don't do a request if no elements are being requested + if ( !this.length ) { + return this; + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // Request the remote document + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params, + complete: function( jqXHR, status ) { + if ( callback ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + } + } + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + // See if a selector was specified + self.html( selector ? + + // Create a dummy div to hold the results + jQuery("<div>") + + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) + + // Locate the specified elements + .find( selector ) : + + // If not, just inject the full result + responseText ); + + }); + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; +}); + +jQuery.extend({ + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; + }, + + ajaxSettings: { + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: true, + async: true, + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": allTypes + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // ifModified key + ifModifiedKey, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || strAbort; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ ifModifiedKey ] = modified; + } + modified = jqXHR.getResponseHeader("Etag"); + if ( modified ) { + jQuery.etag[ ifModifiedKey ] = modified; + } + } + + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.always( tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if ( s.cache === false ) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }, + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {} + +}); + +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; + + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { + + var conv, conv2, current, tmp, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ], + converters = {}, + i = 0; + + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { + + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { + + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } + + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + + // Update prev for next iteration + prev = current; + } + } + + return { state: "success", data: response }; +} +var oldCallbacks = [], + rquestion = /\?/, + rjsonp = /(=)\?(?=&|$)|\?\?/, + nonce = jQuery.now(); + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + data = s.data, + url = s.url, + hasCallback = s.jsonp !== false, + replaceInUrl = hasCallback && rjsonp.test( url ), + replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && + !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && + rjsonp.test( data ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + overwritten = window[ callbackName ]; + + // Insert callback into url or form data + if ( replaceInUrl ) { + s.url = url.replace( rjsonp, "$1" + callbackName ); + } else if ( replaceInData ) { + s.data = data.replace( rjsonp, "$1" + callbackName ); + } else if ( hasCallback ) { + s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement( "script" ); + + script.async = "async"; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + + // Dereference the script + script = undefined; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; + } +}); +var xhrCallbacks, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); + +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + + var status, + statusText, + responseHeaders, + responses, + xml; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( e ) { + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback, 0 ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); +} + +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} + +function Animation( elem, properties, options ) { + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end, easing ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + createTweens( animation, props ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + anim: animation, + queue: animation.opts.queue, + elem: elem + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.done(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } + + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery.removeData( elem, "fxshow", true ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing any value as a 4th parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, false, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Remove in 2.0 - this supports IE8's panic based approach +// to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" || + // special check for .toggle( handler, handler, ... ) + ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations resolve immediately + if ( empty ) { + anim.stop( true ); + } + }; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) && !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +var rroot = /^(?:body|html)$/i; + +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + if ( (body = doc.body) === elem ) { + return jQuery.offset.bodyOffset( elem ); + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== "undefined" ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + clientTop = docElem.clientTop || body.clientTop || 0; + clientLeft = docElem.clientLeft || body.clientLeft || 0; + scrollTop = win.pageYOffset || docElem.scrollTop; + scrollLeft = win.pageXOffset || docElem.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; +}; + +jQuery.offset = { + + bodyOffset: function( body ) { + var top = body.offsetTop, + left = body.offsetLeft; + + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; + } + + return { top: top, left: left }; + }, + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[0] ) { + return; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.body; + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.body; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, value, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +})( window ); + +/* autogeneration */ +define("jquery-src", [], function(){}); + +/* @source lib/bootbox.js */; + +/** + * bootbox.js v2.5.1 + * + * http://bootboxjs.com/license.txt + */ +var bootbox = window.bootbox || (function($) { + + var _locale = 'en', + _defaultLocale = 'en', + _animate = true, + _backdrop = 'static', + _defaultHref = 'javascript:;', + _classes = '', + _icons = {}, + /* last var should always be the public object we'll return */ + that = {}; + + /** + * standard locales. Please add more according to ISO 639-1 standard. Multiple language variants are + * unlikely to be required. If this gets too large it can be split out into separate JS files. + */ + var _locales = { + 'en' : { + OK : 'OK', + CANCEL : 'Cancel', + CONFIRM : 'OK' + }, + 'fr' : { + OK : 'OK', + CANCEL : 'Annuler', + CONFIRM : 'D\'accord' + }, + 'de' : { + OK : 'OK', + CANCEL : 'Abbrechen', + CONFIRM : 'Akzeptieren' + }, + 'es' : { + OK : 'OK', + CANCEL : 'Cancelar', + CONFIRM : 'Aceptar' + }, + 'br' : { + OK : 'OK', + CANCEL : 'Cancelar', + CONFIRM : 'Sim' + }, + 'nl' : { + OK : 'OK', + CANCEL : 'Annuleren', + CONFIRM : 'Accepteren' + }, + 'ru' : { + OK : 'OK', + CANCEL : 'Отмена', + CONFIRM : 'Применить' + }, + 'it' : { + OK : 'OK', + CANCEL : 'Annulla', + CONFIRM : 'Conferma' + } + }; + + /** + * private methods + */ + function _translate(str, locale) { + // we assume if no target locale is probided then we should take it from current setting + if (locale == null) { + locale = _locale; + } + if (typeof _locales[locale][str] == 'string') { + return _locales[locale][str]; + } + + // if we couldn't find a lookup then try and fallback to a default translation + + if (locale != _defaultLocale) { + return _translate(str, _defaultLocale); + } + + // if we can't do anything then bail out with whatever string was passed in - last resort + return str; + } + + /** + * public API + */ + that.setLocale = function(locale) { + for (var i in _locales) { + if (i == locale) { + _locale = locale; + return; + } + } + throw new Error('Invalid locale: '+locale); + }; + + that.addLocale = function(locale, translations) { + if (typeof _locales[locale] == 'undefined') { + _locales[locale] = {}; + } + for (var str in translations) { + _locales[locale][str] = translations[str]; + } + }; + + that.setIcons = function(icons) { + _icons = icons; + if (typeof _icons !== 'object' || _icons == null) { + _icons = {}; + } + }; + + that.alert = function(/*str, label, cb*/) { + var str = "", + label = _translate('OK'), + cb = null; + + switch (arguments.length) { + case 1: + // no callback, default button label + str = arguments[0]; + break; + case 2: + // callback *or* custom button label dependent on type + str = arguments[0]; + if (typeof arguments[1] == 'function') { + cb = arguments[1]; + } else { + label = arguments[1]; + } + break; + case 3: + // callback and custom button label + str = arguments[0]; + label = arguments[1]; + cb = arguments[2]; + break; + default: + throw new Error("Incorrect number of arguments: expected 1-3"); + break; + } + + return that.dialog(str, { + "label": label, + "icon" : _icons.OK, + "callback": cb + }, { + "onEscape": cb + }); + }; + + that.confirm = function(/*str, labelCancel, labelOk, cb*/) { + var str = "", + labelCancel = _translate('CANCEL'), + labelOk = _translate('CONFIRM'), + cb = null; + + switch (arguments.length) { + case 1: + str = arguments[0]; + break; + case 2: + str = arguments[0]; + if (typeof arguments[1] == 'function') { + cb = arguments[1]; + } else { + labelCancel = arguments[1]; + } + break; + case 3: + str = arguments[0]; + labelCancel = arguments[1]; + if (typeof arguments[2] == 'function') { + cb = arguments[2]; + } else { + labelOk = arguments[2]; + } + break; + case 4: + str = arguments[0]; + labelCancel = arguments[1]; + labelOk = arguments[2]; + cb = arguments[3]; + break; + default: + throw new Error("Incorrect number of arguments: expected 1-4"); + break; + } + + return that.dialog(str, [{ + "label": labelCancel, + "icon" : _icons.CANCEL, + "callback": function() { + if (typeof cb == 'function') { + cb(false); + } + } + }, { + "label": labelOk, + "icon" : _icons.CONFIRM, + "callback": function() { + if (typeof cb == 'function') { + cb(true); + } + } + }]); + }; + + that.prompt = function(/*str, labelCancel, labelOk, cb, defaultVal*/) { + var str = "", + labelCancel = _translate('CANCEL'), + labelOk = _translate('CONFIRM'), + cb = null, + defaultVal = ""; + + switch (arguments.length) { + case 1: + str = arguments[0]; + break; + case 2: + str = arguments[0]; + if (typeof arguments[1] == 'function') { + cb = arguments[1]; + } else { + labelCancel = arguments[1]; + } + break; + case 3: + str = arguments[0]; + labelCancel = arguments[1]; + if (typeof arguments[2] == 'function') { + cb = arguments[2]; + } else { + labelOk = arguments[2]; + } + break; + case 4: + str = arguments[0]; + labelCancel = arguments[1]; + labelOk = arguments[2]; + cb = arguments[3]; + break; + case 5: + str = arguments[0]; + labelCancel = arguments[1]; + labelOk = arguments[2]; + cb = arguments[3]; + defaultVal = arguments[4]; + break; + default: + throw new Error("Incorrect number of arguments: expected 1-5"); + break; + } + + var header = str; + + // let's keep a reference to the form object for later + var form = $("<form></form>"); + form.append("<input autocomplete=off type=text value='" + defaultVal + "' />"); + + var div = that.dialog(form, [{ + "label": labelCancel, + "icon" : _icons.CANCEL, + "callback": function() { + if (typeof cb == 'function') { + cb(null); + } + } + }, { + "label": labelOk, + "icon" : _icons.CONFIRM, + "callback": function() { + if (typeof cb == 'function') { + cb( + form.find("input[type=text]").val() + ); + } + } + }], { + "header": header + }); + + div.on("shown", function() { + form.find("input[type=text]").focus(); + + // ensure that submitting the form (e.g. with the enter key) + // replicates the behaviour of a normal prompt() + form.on("submit", function(e) { + e.preventDefault(); + div.find(".btn-primary").click(); + }); + }); + + return div; + }; + + that.modal = function(/*str, label, options*/) { + var str; + var label; + var options; + + var defaultOptions = { + "onEscape": null, + "keyboard": true, + "backdrop": _backdrop + }; + + switch (arguments.length) { + case 1: + str = arguments[0]; + break; + case 2: + str = arguments[0]; + if (typeof arguments[1] == 'object') { + options = arguments[1]; + } else { + label = arguments[1]; + } + break; + case 3: + str = arguments[0]; + label = arguments[1]; + options = arguments[2]; + break; + default: + throw new Error("Incorrect number of arguments: expected 1-3"); + break; + } + + defaultOptions['header'] = label; + + if (typeof options == 'object') { + options = $.extend(defaultOptions, options); + } else { + options = defaultOptions; + } + + return that.dialog(str, [], options); + }; + + that.dialog = function(str, handlers, options) { + var hideSource = null, + buttons = "", + callbacks = [], + options = options || {}; + + // check for single object and convert to array if necessary + if (handlers == null) { + handlers = []; + } else if (typeof handlers.length == 'undefined') { + handlers = [handlers]; + } + + var i = handlers.length; + while (i--) { + var label = null, + href = null, + _class = null, + icon = '', + callback = null; + + if (typeof handlers[i]['label'] == 'undefined' && + typeof handlers[i]['class'] == 'undefined' && + typeof handlers[i]['callback'] == 'undefined') { + // if we've got nothing we expect, check for condensed format + + var propCount = 0, // condensed will only match if this == 1 + property = null; // save the last property we found + + // be nicer to count the properties without this, but don't think it's possible... + for (var j in handlers[i]) { + property = j; + if (++propCount > 1) { + // forget it, too many properties + break; + } + } + + if (propCount == 1 && typeof handlers[i][j] == 'function') { + // matches condensed format of label -> function + handlers[i]['label'] = property; + handlers[i]['callback'] = handlers[i][j]; + } + } + + if (typeof handlers[i]['callback']== 'function') { + callback = handlers[i]['callback']; + } + + if (handlers[i]['class']) { + _class = handlers[i]['class']; + } else if (i == handlers.length -1 && handlers.length <= 2) { + // always add a primary to the main option in a two-button dialog + _class = 'btn-primary'; + } + + if (handlers[i]['label']) { + label = handlers[i]['label']; + } else { + label = "Option "+(i+1); + } + + if (handlers[i]['icon']) { + icon = "<i class='"+handlers[i]['icon']+"'></i> "; + } + + if (handlers[i]['href']) { + href = handlers[i]['href']; + } + else { + href = _defaultHref; + } + + buttons += "<a data-handler='"+i+"' class='btn "+_class+"' href='" + href + "'>"+icon+""+label+"</a>"; + + callbacks[i] = callback; + } + + // @see https://github.com/makeusabrew/bootbox/issues/46#issuecomment-8235302 + // and https://github.com/twitter/bootstrap/issues/4474 + // for an explanation of the inline overflow: hidden + + var parts = ["<div class='bootbox modal' style='overflow:hidden;'>"]; + + if (options['header']) { + var closeButton = ''; + if (typeof options['headerCloseButton'] == 'undefined' || options['headerCloseButton']) { + closeButton = "<a href='"+_defaultHref+"' class='close'>×</a>"; + } + + parts.push("<div class='modal-header'>"+closeButton+"<h3>"+options['header']+"</h3></div>"); + } + + // push an empty body into which we'll inject the proper content later + parts.push("<div class='modal-body'></div>"); + + if (buttons) { + parts.push("<div class='modal-footer'>"+buttons+"</div>"); + } + + parts.push("</div>"); + + var div = $(parts.join("\n")); + + // check whether we should fade in/out + var shouldFade = (typeof options.animate === 'undefined') ? _animate : options.animate; + + if (shouldFade) { + div.addClass("fade"); + } + + var optionalClasses = (typeof options.classes === 'undefined') ? _classes : options.classes; + if( optionalClasses ) { + div.addClass( optionalClasses ); + } + + // now we've built up the div properly we can inject the content whether it was a string or a jQuery object + $(".modal-body", div).html(str); + + div.bind('hidden', function() { + div.remove(); + }); + + div.bind('hide', function() { + if (hideSource == 'escape' && + typeof options.onEscape == 'function') { + options.onEscape(); + } + }); + + // hook into the modal's keyup trigger to check for the escape key + $(document).bind('keyup.modal', function ( e ) { + if (e.which == 27) { + hideSource = 'escape'; + } + }); + + // well, *if* we have a primary - give the last dom element (first displayed) focus + div.bind('shown', function() { + $("a.btn-primary:last", div).focus(); + }); + + // wire up button handlers + div.on('click', '.modal-footer a, a.close', function(e) { + + var handler = $(this).data("handler"), + cb = callbacks[handler], + hideModal = null; + + // sort of @see https://github.com/makeusabrew/bootbox/pull/68 - heavily adapted + // if we've got a custom href attribute, all bets are off + if (typeof handler !== 'undefined' && + typeof handlers[handler]['href'] !== 'undefined') { + + return; + } + + e.preventDefault(); + + if (typeof cb == 'function') { + hideModal = cb(); + } + + // the only way hideModal *will* be false is if a callback exists and + // returns it as a value. in those situations, don't hide the dialog + // @see https://github.com/makeusabrew/bootbox/pull/25 + if (hideModal !== false) { + hideSource = 'button'; + div.modal("hide"); + } + }); + + if (options.keyboard == null) { + options.keyboard = (typeof options.onEscape == 'function'); + } + + $("body").append(div); + + div.modal({ + "backdrop" : (typeof options.backdrop === 'undefined') ? _backdrop : options.backdrop, + "keyboard" : options.keyboard + }); + + return div; + }; + + that.hideAll = function() { + $(".bootbox").modal("hide"); + }; + + that.animate = function(animate) { + _animate = animate; + }; + + that.backdrop = function(backdrop) { + _backdrop = backdrop; + }; + + that.classes = function(classes) { + _classes = classes; + }; + + return that; + +})( window.jQuery ); + +// @see https://github.com/makeusabrew/bootbox/issues/71 +window.bootbox = bootbox; + +/* autogeneration */ +define("bootbox-origin", [ + "jquery" +], function(){}); + +/* @source lib/spin.js */; + +//fgnass.github.com/spin.js#v1.2.7 +!function(window, document, undefined) { + + /** + * Copyright (c) 2011 Felix Gnass [fgnass at neteye dot de] + * Licensed under the MIT license + */ + + var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */ + , animations = {} /* Animation rules keyed by their name */ + , useCssAnimations + + /** + * Utility function to create elements. If no tag name is given, + * a DIV is created. Optionally properties can be passed. + */ + function createEl(tag, prop) { + var el = document.createElement(tag || 'div') + , n + + for(n in prop) el[n] = prop[n] + return el + } + + /** + * Appends children and returns the parent. + */ + function ins(parent /* child1, child2, ...*/) { + for (var i=1, n=arguments.length; i<n; i++) + parent.appendChild(arguments[i]) + + return parent + } + + /** + * Insert a new stylesheet to hold the @keyframe or VML rules. + */ + var sheet = function() { + var el = createEl('style', {type : 'text/css'}) + ins(document.getElementsByTagName('head')[0], el) + return el.sheet || el.styleSheet + }() + + /** + * Creates an opacity keyframe animation rule and returns its name. + * Since most mobile Webkits have timing issues with animation-delay, + * we create separate rules for each line/segment. + */ + function addAnimation(alpha, trail, i, lines) { + var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-') + , start = 0.01 + i/lines*100 + , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha) + , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase() + , pre = prefix && '-'+prefix+'-' || '' + + if (!animations[name]) { + sheet.insertRule( + '@' + pre + 'keyframes ' + name + '{' + + '0%{opacity:' + z + '}' + + start + '%{opacity:' + alpha + '}' + + (start+0.01) + '%{opacity:1}' + + (start+trail) % 100 + '%{opacity:' + alpha + '}' + + '100%{opacity:' + z + '}' + + '}', sheet.cssRules.length) + + animations[name] = 1 + } + return name + } + + /** + * Tries various vendor prefixes and returns the first supported property. + **/ + function vendor(el, prop) { + var s = el.style + , pp + , i + + if(s[prop] !== undefined) return prop + prop = prop.charAt(0).toUpperCase() + prop.slice(1) + for(i=0; i<prefixes.length; i++) { + pp = prefixes[i]+prop + if(s[pp] !== undefined) return pp + } + } + + /** + * Sets multiple style properties at once. + */ + function css(el, prop) { + for (var n in prop) + el.style[vendor(el, n)||n] = prop[n] + + return el + } + + /** + * Fills in default values. + */ + function merge(obj) { + for (var i=1; i < arguments.length; i++) { + var def = arguments[i] + for (var n in def) + if (obj[n] === undefined) obj[n] = def[n] + } + return obj + } + + /** + * Returns the absolute page-offset of the given element. + */ + function pos(el) { + var o = { x:el.offsetLeft, y:el.offsetTop } + while((el = el.offsetParent)) + o.x+=el.offsetLeft, o.y+=el.offsetTop + + return o + } + + var defaults = { + lines: 12, // The number of lines to draw + length: 7, // The length of each line + width: 5, // The line thickness + radius: 10, // The radius of the inner circle + rotate: 0, // Rotation offset + corners: 1, // Roundness (0..1) + color: '#000', // #rgb or #rrggbb + speed: 1, // Rounds per second + trail: 100, // Afterglow percentage + opacity: 1/4, // Opacity of the lines + fps: 20, // Frames per second when using setTimeout() + zIndex: 2e9, // Use a high z-index by default + className: 'spinner', // CSS class to assign to the element + top: 'auto', // center vertically + left: 'auto', // center horizontally + position: 'relative' // element position + } + + /** The constructor */ + var Spinner = function Spinner(o) { + if (!this.spin) return new Spinner(o) + this.opts = merge(o || {}, Spinner.defaults, defaults) + } + + Spinner.defaults = {} + + merge(Spinner.prototype, { + spin: function(target) { + this.stop() + var self = this + , o = self.opts + , el = self.el = css(createEl(0, {className: o.className}), {position: o.position, width: 0, zIndex: o.zIndex}) + , mid = o.radius+o.length+o.width + , ep // element position + , tp // target position + + if (target) { + target.insertBefore(el, target.firstChild||null) + tp = pos(target) + ep = pos(el) + css(el, { + left: (o.left == 'auto' ? tp.x-ep.x + (target.offsetWidth >> 1) : parseInt(o.left, 10) + mid) + 'px', + top: (o.top == 'auto' ? tp.y-ep.y + (target.offsetHeight >> 1) : parseInt(o.top, 10) + mid) + 'px' + }) + } + + el.setAttribute('aria-role', 'progressbar') + self.lines(el, self.opts) + + if (!useCssAnimations) { + // No CSS animation support, use setTimeout() instead + var i = 0 + , fps = o.fps + , f = fps/o.speed + , ostep = (1-o.opacity) / (f*o.trail / 100) + , astep = f/o.lines + + ;(function anim() { + i++; + for (var s=o.lines; s; s--) { + var alpha = Math.max(1-(i+s*astep)%f * ostep, o.opacity) + self.opacity(el, o.lines-s, alpha, o) + } + self.timeout = self.el && setTimeout(anim, ~~(1000/fps)) + })() + } + return self + }, + + stop: function() { + var el = this.el + if (el) { + clearTimeout(this.timeout) + if (el.parentNode) el.parentNode.removeChild(el) + this.el = undefined + } + return this + }, + + lines: function(el, o) { + var i = 0 + , seg + + function fill(color, shadow) { + return css(createEl(), { + position: 'absolute', + width: (o.length+o.width) + 'px', + height: o.width + 'px', + background: color, + boxShadow: shadow, + transformOrigin: 'left', + transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)', + borderRadius: (o.corners * o.width>>1) + 'px' + }) + } + + for (; i < o.lines; i++) { + seg = css(createEl(), { + position: 'absolute', + top: 1+~(o.width/2) + 'px', + transform: o.hwaccel ? 'translate3d(0,0,0)' : '', + opacity: o.opacity, + animation: useCssAnimations && addAnimation(o.opacity, o.trail, i, o.lines) + ' ' + 1/o.speed + 's linear infinite' + }) + + if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'})) + + ins(el, ins(seg, fill(o.color, '0 0 1px rgba(0,0,0,.1)'))) + } + return el + }, + + opacity: function(el, i, val) { + if (i < el.childNodes.length) el.childNodes[i].style.opacity = val + } + + }) + + ///////////////////////////////////////////////////////////////////////// + // VML rendering for IE + ///////////////////////////////////////////////////////////////////////// + + /** + * Check and init VML support + */ + ;(function() { + + function vml(tag, attr) { + return createEl('<' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', attr) + } + + var s = css(createEl('group'), {behavior: 'url(#default#VML)'}) + + if (!vendor(s, 'transform') && s.adj) { + + // VML support detected. Insert CSS rule ... + sheet.addRule('.spin-vml', 'behavior:url(#default#VML)') + + Spinner.prototype.lines = function(el, o) { + var r = o.length+o.width + , s = 2*r + + function grp() { + return css( + vml('group', { + coordsize: s + ' ' + s, + coordorigin: -r + ' ' + -r + }), + { width: s, height: s } + ) + } + + var margin = -(o.width+o.length)*2 + 'px' + , g = css(grp(), {position: 'absolute', top: margin, left: margin}) + , i + + function seg(i, dx, filter) { + ins(g, + ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}), + ins(css(vml('roundrect', {arcsize: o.corners}), { + width: r, + height: o.width, + left: o.radius, + top: -o.width>>1, + filter: filter + }), + vml('fill', {color: o.color, opacity: o.opacity}), + vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change + ) + ) + ) + } + + if (o.shadow) + for (i = 1; i <= o.lines; i++) + seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)') + + for (i = 1; i <= o.lines; i++) seg(i) + return ins(el, g) + } + + Spinner.prototype.opacity = function(el, i, val, o) { + var c = el.firstChild + o = o.shadow && o.lines || 0 + if (c && i+o < c.childNodes.length) { + c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild + if (c) c.opacity = val + } + } + } + else + useCssAnimations = vendor(s, 'animation') + })() + + if (typeof define == 'function' && define.amd) + define("spin", function() { return Spinner }) + else + window.Spinner = Spinner + +}(window, document); + +/* @source lib/mustache.js */; + +/*! + * mustache.js - Logic-less {{mustache}} templates with JavaScript + * http://github.com/janl/mustache.js + */ + +/*global define: false*/ + +var Mustache; + +(function (exports) { + if (typeof module !== "undefined" && module.exports) { + module.exports = exports; // CommonJS + } else if (typeof define === "function") { + define("mustache", exports); // AMD + } else { + Mustache = exports; // <script> + } +}((function () { + + var exports = {}; + + exports.name = "mustache.js"; + exports.version = "0.7.1"; + exports.tags = ["{{", "}}"]; + + exports.Scanner = Scanner; + exports.Context = Context; + exports.Writer = Writer; + + var whiteRe = /\s*/; + var spaceRe = /\s+/; + var nonSpaceRe = /\S/; + var eqRe = /\s*=/; + var curlyRe = /\s*\}/; + var tagRe = /#|\^|\/|>|\{|&|=|!/; + + // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577 + // See https://github.com/janl/mustache.js/issues/189 + function testRe(re, string) { + return RegExp.prototype.test.call(re, string); + } + + function isWhitespace(string) { + return !testRe(nonSpaceRe, string); + } + + var isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + function escapeRe(string) { + return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + } + + var entityMap = { + "&": "&", + "<": "<", + ">": ">", + '"': '"', + "'": ''', + "/": '/' + }; + + function escapeHtml(string) { + return String(string).replace(/[&<>"'\/]/g, function (s) { + return entityMap[s]; + }); + } + + // Export the escaping function so that the user may override it. + // See https://github.com/janl/mustache.js/issues/244 + exports.escape = escapeHtml; + + function Scanner(string) { + this.string = string; + this.tail = string; + this.pos = 0; + } + + /** + * Returns `true` if the tail is empty (end of string). + */ + Scanner.prototype.eos = function () { + return this.tail === ""; + }; + + /** + * Tries to match the given regular expression at the current position. + * Returns the matched text if it can match, the empty string otherwise. + */ + Scanner.prototype.scan = function (re) { + var match = this.tail.match(re); + + if (match && match.index === 0) { + this.tail = this.tail.substring(match[0].length); + this.pos += match[0].length; + return match[0]; + } + + return ""; + }; + + /** + * Skips all text until the given regular expression can be matched. Returns + * the skipped string, which is the entire tail if no match can be made. + */ + Scanner.prototype.scanUntil = function (re) { + var match, pos = this.tail.search(re); + + switch (pos) { + case -1: + match = this.tail; + this.pos += this.tail.length; + this.tail = ""; + break; + case 0: + match = ""; + break; + default: + match = this.tail.substring(0, pos); + this.tail = this.tail.substring(pos); + this.pos += pos; + } + + return match; + }; + + function Context(view, parent) { + this.view = view; + this.parent = parent; + this.clearCache(); + } + + Context.make = function (view) { + return (view instanceof Context) ? view : new Context(view); + }; + + Context.prototype.clearCache = function () { + this._cache = {}; + }; + + Context.prototype.push = function (view) { + return new Context(view, this); + }; + + Context.prototype.lookup = function (name) { + var value = this._cache[name]; + + if (!value) { + if (name === ".") { + value = this.view; + } else { + var context = this; + + while (context) { + if (name.indexOf(".") > 0) { + var names = name.split("."), i = 0; + + value = context.view; + + while (value && i < names.length) { + value = value[names[i++]]; + } + } else { + value = context.view[name]; + } + + if (value != null) { + break; + } + + context = context.parent; + } + } + + this._cache[name] = value; + } + + if (typeof value === "function") { + value = value.call(this.view); + } + + return value; + }; + + function Writer() { + this.clearCache(); + } + + Writer.prototype.clearCache = function () { + this._cache = {}; + this._partialCache = {}; + }; + + Writer.prototype.compile = function (template, tags) { + var fn = this._cache[template]; + + if (!fn) { + var tokens = exports.parse(template, tags); + fn = this._cache[template] = this.compileTokens(tokens, template); + } + + return fn; + }; + + Writer.prototype.compilePartial = function (name, template, tags) { + var fn = this.compile(template, tags); + this._partialCache[name] = fn; + return fn; + }; + + Writer.prototype.compileTokens = function (tokens, template) { + var fn = compileTokens(tokens); + var self = this; + + return function (view, partials) { + if (partials) { + if (typeof partials === "function") { + self._loadPartial = partials; + } else { + for (var name in partials) { + self.compilePartial(name, partials[name]); + } + } + } + + return fn(self, Context.make(view), template); + }; + }; + + Writer.prototype.render = function (template, view, partials) { + return this.compile(template)(view, partials); + }; + + Writer.prototype._section = function (name, context, text, callback) { + var value = context.lookup(name); + + switch (typeof value) { + case "object": + if (isArray(value)) { + var buffer = ""; + + for (var i = 0, len = value.length; i < len; ++i) { + buffer += callback(this, context.push(value[i])); + } + + return buffer; + } + + return value ? callback(this, context.push(value)) : ""; + case "function": + var self = this; + var scopedRender = function (template) { + return self.render(template, context); + }; + + var result = value.call(context.view, text, scopedRender); + return result != null ? result : ""; + default: + if (value) { + return callback(this, context); + } + } + + return ""; + }; + + Writer.prototype._inverted = function (name, context, callback) { + var value = context.lookup(name); + + // Use JavaScript's definition of falsy. Include empty arrays. + // See https://github.com/janl/mustache.js/issues/186 + if (!value || (isArray(value) && value.length === 0)) { + return callback(this, context); + } + + return ""; + }; + + Writer.prototype._partial = function (name, context) { + if (!(name in this._partialCache) && this._loadPartial) { + this.compilePartial(name, this._loadPartial(name)); + } + + var fn = this._partialCache[name]; + + return fn ? fn(context) : ""; + }; + + Writer.prototype._name = function (name, context) { + var value = context.lookup(name); + + if (typeof value === "function") { + value = value.call(context.view); + } + + return (value == null) ? "" : String(value); + }; + + Writer.prototype._escaped = function (name, context) { + return exports.escape(this._name(name, context)); + }; + + /** + * Calculates the bounds of the section represented by the given `token` in + * the original template by drilling down into nested sections to find the + * last token that is part of that section. Returns an array of [start, end]. + */ + function sectionBounds(token) { + var start = token[3]; + var end = start; + + var tokens; + while ((tokens = token[4]) && tokens.length) { + token = tokens[tokens.length - 1]; + end = token[3]; + } + + return [start, end]; + } + + /** + * Low-level function that compiles the given `tokens` into a function + * that accepts three arguments: a Writer, a Context, and the template. + */ + function compileTokens(tokens) { + var subRenders = {}; + + function subRender(i, tokens, template) { + if (!subRenders[i]) { + var fn = compileTokens(tokens); + subRenders[i] = function (writer, context) { + return fn(writer, context, template); + }; + } + + return subRenders[i]; + } + + return function (writer, context, template) { + var buffer = ""; + var token, sectionText; + + for (var i = 0, len = tokens.length; i < len; ++i) { + token = tokens[i]; + + switch (token[0]) { + case "#": + sectionText = template.slice.apply(template, sectionBounds(token)); + buffer += writer._section(token[1], context, sectionText, subRender(i, token[4], template)); + break; + case "^": + buffer += writer._inverted(token[1], context, subRender(i, token[4], template)); + break; + case ">": + buffer += writer._partial(token[1], context); + break; + case "&": + buffer += writer._name(token[1], context); + break; + case "name": + buffer += writer._escaped(token[1], context); + break; + case "text": + buffer += token[1]; + break; + } + } + + return buffer; + }; + } + + /** + * Forms the given array of `tokens` into a nested tree structure where + * tokens that represent a section have a fifth item: an array that contains + * all tokens in that section. + */ + function nestTokens(tokens) { + var tree = []; + var collector = tree; + var sections = []; + var token, section; + + for (var i = 0; i < tokens.length; ++i) { + token = tokens[i]; + + switch (token[0]) { + case "#": + case "^": + token[4] = []; + sections.push(token); + collector.push(token); + collector = token[4]; + break; + case "/": + if (sections.length === 0) { + throw new Error("Unopened section: " + token[1]); + } + + section = sections.pop(); + + if (section[1] !== token[1]) { + throw new Error("Unclosed section: " + section[1]); + } + + if (sections.length > 0) { + collector = sections[sections.length - 1][4]; + } else { + collector = tree; + } + break; + default: + collector.push(token); + } + } + + // Make sure there were no open sections when we're done. + section = sections.pop(); + + if (section) { + throw new Error("Unclosed section: " + section[1]); + } + + return tree; + } + + /** + * Combines the values of consecutive text tokens in the given `tokens` array + * to a single token. + */ + function squashTokens(tokens) { + var token, lastToken, squashedTokens = []; + + for (var i = 0; i < tokens.length; ++i) { + token = tokens[i]; + + if (lastToken && lastToken[0] === "text" && token[0] === "text") { + lastToken[1] += token[1]; + lastToken[3] = token[3]; + } else { + lastToken = token; + squashedTokens.push(token); + } + } + + return squashedTokens; + } + + function escapeTags(tags) { + if (tags.length !== 2) { + throw new Error("Invalid tags: " + tags.join(" ")); + } + + return [ + new RegExp(escapeRe(tags[0]) + "\\s*"), + new RegExp("\\s*" + escapeRe(tags[1])) + ]; + } + + /** + * Breaks up the given `template` string into a tree of token objects. If + * `tags` is given here it must be an array with two string values: the + * opening and closing tags used in the template (e.g. ["<%", "%>"]). Of + * course, the default is to use mustaches (i.e. Mustache.tags). + */ + exports.parse = function (template, tags) { + template = template || ''; + tags = tags || exports.tags; + + var tagRes = escapeTags(tags); + var scanner = new Scanner(template); + + var tokens = [], // Buffer to hold the tokens + spaces = [], // Indices of whitespace tokens on the current line + hasTag = false, // Is there a {{tag}} on the current line? + nonSpace = false; // Is there a non-space char on the current line? + + // Strips all whitespace tokens array for the current line + // if there was a {{#tag}} on it and otherwise only space. + function stripSpace() { + if (hasTag && !nonSpace) { + while (spaces.length) { + tokens.splice(spaces.pop(), 1); + } + } else { + spaces = []; + } + + hasTag = false; + nonSpace = false; + } + + var start, type, value, chr; + + while (!scanner.eos()) { + start = scanner.pos; + value = scanner.scanUntil(tagRes[0]); + + if (value) { + for (var i = 0, len = value.length; i < len; ++i) { + chr = value.charAt(i); + + if (isWhitespace(chr)) { + spaces.push(tokens.length); + } else { + nonSpace = true; + } + + tokens.push(["text", chr, start, start + 1]); + start += 1; + + if (chr === "\n") { + stripSpace(); // Check for whitespace on the current line. + } + } + } + + start = scanner.pos; + + // Match the opening tag. + if (!scanner.scan(tagRes[0])) { + break; + } + + hasTag = true; + type = scanner.scan(tagRe) || "name"; + + // Skip any whitespace between tag and value. + scanner.scan(whiteRe); + + // Extract the tag value. + if (type === "=") { + value = scanner.scanUntil(eqRe); + scanner.scan(eqRe); + scanner.scanUntil(tagRes[1]); + } else if (type === "{") { + var closeRe = new RegExp("\\s*" + escapeRe("}" + tags[1])); + value = scanner.scanUntil(closeRe); + scanner.scan(curlyRe); + scanner.scanUntil(tagRes[1]); + type = "&"; + } else { + value = scanner.scanUntil(tagRes[1]); + } + + // Match the closing tag. + if (!scanner.scan(tagRes[1])) { + throw new Error("Unclosed tag at " + scanner.pos); + } + + tokens.push([type, value, start, scanner.pos]); + + if (type === "name" || type === "{" || type === "&") { + nonSpace = true; + } + + // Set the tags for the next time around. + if (type === "=") { + tags = value.split(spaceRe); + tagRes = escapeTags(tags); + } + } + + tokens = squashTokens(tokens); + + return nestTokens(tokens); + }; + + // The high-level clearCache, compile, compilePartial, and render functions + // use this default writer. + var _writer = new Writer(); + + /** + * Clears all cached templates and partials in the default writer. + */ + exports.clearCache = function () { + return _writer.clearCache(); + }; + + /** + * Compiles the given `template` to a reusable function using the default + * writer. + */ + exports.compile = function (template, tags) { + return _writer.compile(template, tags); + }; + + /** + * Compiles the partial with the given `name` and `template` to a reusable + * function using the default writer. + */ + exports.compilePartial = function (name, template, tags) { + return _writer.compilePartial(name, template, tags); + }; + + /** + * Compiles the given array of tokens (the output of a parse) to a reusable + * function using the default writer. + */ + exports.compileTokens = function (tokens, template) { + return _writer.compileTokens(tokens, template); + }; + + /** + * Renders the `template` with the given `view` and `partials` using the + * default writer. + */ + exports.render = function (template, view, partials) { + return _writer.render(template, view, partials); + }; + + // This is here for backwards compatibility with 0.4.x. + exports.to_html = function (template, view, partials, send) { + var result = exports.render(template, view, partials); + + if (typeof send === "function") { + send(result); + } else { + return result; + } + }; + + return exports; + +}()))); + +/* @source lib/bootstrap-amd.js */; + +define("bootstrap", [ + "jquery" +], function ( jQuery ) { +/* ========================================================== + * bootstrap-affix.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#affix + * ========================================================== + * 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 ;_; + + + /* AFFIX CLASS DEFINITION + * ====================== */ + + var Affix = function (element, options) { + this.options = $.extend({}, $.fn.affix.defaults, options) + this.$window = $(window) + .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) + this.$element = $(element) + this.checkPosition() + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + , scrollTop = this.$window.scrollTop() + , position = this.$element.offset() + , offset = this.options.offset + , offsetBottom = offset.bottom + , offsetTop = offset.top + , reset = 'affix affix-top affix-bottom' + , affix + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top() + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() + + affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? + false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? + 'bottom' : offsetTop != null && scrollTop <= offsetTop ? + 'top' : false + + if (this.affixed === affix) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? position.top - scrollTop : null + + this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) + } + + + /* AFFIX PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('affix') + , options = typeof option == 'object' && option + if (!data) $this.data('affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + $.fn.affix.defaults = { + offset: 0 + } + + + /* AFFIX NO CONFLICT + * ================= */ + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + /* AFFIX DATA-API + * ============== */ + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + , data = $spy.data() + + data.offset = data.offset || {} + + data.offsetBottom && (data.offset.bottom = data.offsetBottom) + data.offsetTop && (data.offset.top = data.offsetTop) + + $spy.affix(data) + }) + }) + + +}(window.jQuery);/* ========================================================== + * bootstrap-alert.js v2.2.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.jQuery);/* ============================================================ + * bootstrap-button.js v2.2.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.jQuery);/* ========================================================== + * bootstrap-carousel.js v2.2.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.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 + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , to: function (pos) { + var $active = this.$element.find('.item.active') + , children = $active.parent().children() + , activePos = children.index($active) + , that = this + + if (pos > (children.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activePos == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activePos ? 'next' : 'prev', $(children[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() + } + 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] + }) + + if ($next.hasClass('active')) return + + 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.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]', 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()) + $target.carousel(options) + e.preventDefault() + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.2.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) 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) 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 = 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.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.2.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) { + $parent.toggleClass('open') + } + + $this.focus() + + return false + } + + , keydown: function (e) { + var $this + , $items + , $active + , $parent + , isActive + , index + + if (!/(38|40|27)/.test(e.keyCode)) return + + $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) return $this.click() + + $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items + .eq(index) + .focus() + } + + } + + function clearMenus() { + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + $parent.length || ($parent = $this.parent()) + + return $parent + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* DROPDOWN NO CONFLICT + * ==================== */ + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(document) + .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) + .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery);/* ========================================================= + * bootstrap-modal.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * 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 ;_; + + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.options.remote && this.$element.find('.modal-body').load(this.options.remote) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + , e = $.Event('show') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } + + that.$element + .show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : + that.$element.focus().trigger('shown') + + }) + } + + , hide: function (e) { + e && e.preventDefault() + + var that = this + + e = $.Event('hide') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } + + , enforceFocus: function () { + var that = this + $(document).on('focusin.modal', function (e) { + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { + that.$element.focus() + } + }) + } + + , escape: function () { + var that = this + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.modal', function ( e ) { + e.which == 27 && that.hide() + }) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.modal') + } + } + + , hideWithTransition: function () { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } + + , hideModal: function (that) { + this.$element + .hide() + .trigger('hidden') + + this.backdrop() + } + + , removeBackdrop: function () { + this.$backdrop.remove() + this.$backdrop = null + } + + , backdrop: function (callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .appendTo(document.body) + + this.$backdrop.click( + this.options.backdrop == 'static' ? + $.proxy(this.$element[0].focus, this.$element[0]) + : $.proxy(this.hide, this) + ) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + doAnimate ? + this.$backdrop.one($.support.transition.end, callback) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) : + this.removeBackdrop() + + } else if (callback) { + callback() + } + } + } + + + /* MODAL PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.modal + + $.fn.modal = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('modal') + , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option]() + else if (options.show) data.show() + }) + } + + $.fn.modal.defaults = { + backdrop: true + , keyboard: true + , show: true + } + + $.fn.modal.Constructor = Modal + + + /* MODAL NO CONFLICT + * ================= */ + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + /* MODAL DATA-API + * ============== */ + + $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + , href = $this.attr('href') + , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 + , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) + + e.preventDefault() + + $target + .modal(option) + .one('hide', function () { + $this.focus() + }) + }) + +}(window.jQuery); +/* ============================================================= + * bootstrap-scrollspy.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * 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 ;_; + + + /* SCROLLSPY CLASS DEFINITION + * ========================== */ + + function ScrollSpy(element, options) { + var process = $.proxy(this.process, this) + , $element = $(element).is('body') ? $(window) : $(element) + , href + this.options = $.extend({}, $.fn.scrollspy.defaults, options) + this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) + this.selector = (this.options.target + || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + || '') + ' .nav li > a' + this.$body = $('body') + this.refresh() + this.process() + } + + ScrollSpy.prototype = { + + constructor: ScrollSpy + + , refresh: function () { + var self = this + , $targets + + this.offsets = $([]) + this.targets = $([]) + + $targets = this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + , href = $el.data('target') || $el.attr('href') + , $href = /^#\w/.test(href) && $(href) + return ( $href + && $href.length + && [[ $href.position().top + self.$scrollElement.scrollTop(), href ]] ) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + , process: function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight + , maxScroll = scrollHeight - this.$scrollElement.height() + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets.last()[0]) + && this.activate ( i ) + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } + + , activate: function (target) { + var active + , selector + + this.activeTarget = target + + $(this.selector) + .parent('.active') + .removeClass('active') + + selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + active = $(selector) + .parent('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active.closest('li.dropdown').addClass('active') + } + + active.trigger('activate') + } + + } + + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + var old = $.fn.scrollspy + + $.fn.scrollspy = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('scrollspy') + , options = typeof option == 'object' && option + if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.scrollspy.Constructor = ScrollSpy + + $.fn.scrollspy.defaults = { + offset: 10 + } + + + /* SCROLLSPY NO CONFLICT + * ===================== */ + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + /* SCROLLSPY DATA-API + * ================== */ + + $(window).on('load', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + $spy.scrollspy($spy.data()) + }) + }) + +}(window.jQuery);/* ======================================================== + * bootstrap-tab.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#tabs + * ======================================================== + * 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 ;_; + + + /* TAB CLASS DEFINITION + * ==================== */ + + var Tab = function (element) { + this.element = $(element) + } + + Tab.prototype = { + + constructor: Tab + + , show: function () { + var $this = this.element + , $ul = $this.closest('ul:not(.dropdown-menu)') + , selector = $this.attr('data-target') + , previous + , $target + , e + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + if ( $this.parent('li').hasClass('active') ) return + + previous = $ul.find('.active:last a')[0] + + e = $.Event('show', { + relatedTarget: previous + }) + + $this.trigger(e) + + if (e.isDefaultPrevented()) return + + $target = $(selector) + + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown' + , relatedTarget: previous + }) + }) + } + + , activate: function ( element, container, callback) { + var $active = container.find('> .active') + , transition = callback + && $.support.transition + && $active.hasClass('fade') + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if ( element.parent('.dropdown-menu') ) { + element.closest('li.dropdown').addClass('active') + } + + callback && callback() + } + + transition ? + $active.one($.support.transition.end, next) : + next() + + $active.removeClass('in') + } + } + + + /* TAB PLUGIN DEFINITION + * ===================== */ + + var old = $.fn.tab + + $.fn.tab = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('tab') + if (!data) $this.data('tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tab.Constructor = Tab + + + /* TAB NO CONFLICT + * =============== */ + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + /* TAB DATA-API + * ============ */ + + $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + e.preventDefault() + $(this).tab('show') + }) + +}(window.jQuery);/* =========================================================== + * bootstrap-tooltip.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#tooltips + * Inspired by the original jQuery.tipsy by Jason Frame + * =========================================================== + * 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 ;_; + + + /* TOOLTIP PUBLIC CLASS DEFINITION + * =============================== */ + + var Tooltip = function (element, options) { + this.init('tooltip', element, options) + } + + Tooltip.prototype = { + + constructor: Tooltip + + , init: function (type, element, options) { + var eventIn + , eventOut + + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.enabled = true + + if (this.options.trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (this.options.trigger != 'manual') { + eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' + eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + , getOptions: function (options) { + options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } + + return options + } + + , enter: function (e) { + var self = $(e.currentTarget)[this.type](this._options).data(this.type) + + if (!self.options.delay || !self.options.delay.show) return self.show() + + clearTimeout(this.timeout) + self.hoverState = 'in' + this.timeout = setTimeout(function() { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + , leave: function (e) { + var self = $(e.currentTarget)[this.type](this._options).data(this.type) + + if (this.timeout) clearTimeout(this.timeout) + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.hoverState = 'out' + this.timeout = setTimeout(function() { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + , show: function () { + var $tip + , inside + , pos + , actualWidth + , actualHeight + , placement + , tp + + if (this.hasContent() && this.enabled) { + $tip = this.tip() + this.setContent() + + if (this.options.animation) { + $tip.addClass('fade') + } + + placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + inside = /in/.test(placement) + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .insertAfter(this.$element) + + pos = this.getPosition(inside) + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + switch (inside ? placement.split(' ')[1] : placement) { + case 'bottom': + tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'top': + tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'left': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} + break + case 'right': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} + break + } + + $tip + .offset(tp) + .addClass(placement) + .addClass('in') + } + } + + , setContent: function () { + var $tip = this.tip() + , title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + , hide: function () { + var that = this + , $tip = this.tip() + + $tip.removeClass('in') + + function removeWithAnimation() { + var timeout = setTimeout(function () { + $tip.off($.support.transition.end).detach() + }, 500) + + $tip.one($.support.transition.end, function () { + clearTimeout(timeout) + $tip.detach() + }) + } + + $.support.transition && this.$tip.hasClass('fade') ? + removeWithAnimation() : + $tip.detach() + + return this + } + + , fixTitle: function () { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') + } + } + + , hasContent: function () { + return this.getTitle() + } + + , getPosition: function (inside) { + return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { + width: this.$element[0].offsetWidth + , height: this.$element[0].offsetHeight + }) + } + + , getTitle: function () { + var title + , $e = this.$element + , o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + , tip: function () { + return this.$tip = this.$tip || $(this.options.template) + } + + , validate: function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + , enable: function () { + this.enabled = true + } + + , disable: function () { + this.enabled = false + } + + , toggleEnabled: function () { + this.enabled = !this.enabled + } + + , toggle: function (e) { + var self = $(e.currentTarget)[this.type](this._options).data(this.type) + self[self.tip().hasClass('in') ? 'hide' : 'show']() + } + + , destroy: function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } + + } + + + /* TOOLTIP PLUGIN DEFINITION + * ========================= */ + + var old = $.fn.tooltip + + $.fn.tooltip = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('tooltip') + , options = typeof option == 'object' && option + if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tooltip.Constructor = Tooltip + + $.fn.tooltip.defaults = { + animation: true + , placement: 'top' + , selector: false + , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' + , trigger: 'hover' + , title: '' + , delay: 0 + , html: false + } + + + /* TOOLTIP NO CONFLICT + * =================== */ + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.jQuery);/* =================================================== + * bootstrap-transition.js v2.2.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.jQuery);/* ============================================================= + * bootstrap-typeahead.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#typeahead + * ============================================================= + * 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 ;_; + + + /* TYPEAHEAD PUBLIC CLASS DEFINITION + * ================================= */ + + var Typeahead = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.typeahead.defaults, options) + this.matcher = this.options.matcher || this.matcher + this.sorter = this.options.sorter || this.sorter + this.highlighter = this.options.highlighter || this.highlighter + this.updater = this.options.updater || this.updater + this.source = this.options.source + this.$menu = $(this.options.menu) + this.shown = false + this.listen() + } + + Typeahead.prototype = { + + constructor: Typeahead + + , select: function () { + var val = this.$menu.find('.active').attr('data-value') + this.$element + .val(this.updater(val)) + .change() + return this.hide() + } + + , updater: function (item) { + return item + } + + , show: function () { + var pos = $.extend({}, this.$element.position(), { + height: this.$element[0].offsetHeight + }) + + this.$menu + .insertAfter(this.$element) + .css({ + top: pos.top + pos.height + , left: pos.left + }) + .show() + + this.shown = true + return this + } + + , hide: function () { + this.$menu.hide() + this.shown = false + return this + } + + , lookup: function (event) { + var items + + this.query = this.$element.val() + + if (!this.query || this.query.length < this.options.minLength) { + return this.shown ? this.hide() : this + } + + items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source + + return items ? this.process(items) : this + } + + , process: function (items) { + var that = this + + items = $.grep(items, function (item) { + return that.matcher(item) + }) + + items = this.sorter(items) + + if (!items.length) { + return this.shown ? this.hide() : this + } + + return this.render(items.slice(0, this.options.items)).show() + } + + , matcher: function (item) { + return ~item.toLowerCase().indexOf(this.query.toLowerCase()) + } + + , sorter: function (items) { + var beginswith = [] + , caseSensitive = [] + , caseInsensitive = [] + , item + + while (item = items.shift()) { + if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) + else if (~item.indexOf(this.query)) caseSensitive.push(item) + else caseInsensitive.push(item) + } + + return beginswith.concat(caseSensitive, caseInsensitive) + } + + , highlighter: function (item) { + var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') + return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { + return '<strong>' + match + '</strong>' + }) + } + + , render: function (items) { + var that = this + + items = $(items).map(function (i, item) { + i = $(that.options.item).attr('data-value', item) + i.find('a').html(that.highlighter(item)) + return i[0] + }) + + items.first().addClass('active') + this.$menu.html(items) + return this + } + + , next: function (event) { + var active = this.$menu.find('.active').removeClass('active') + , next = active.next() + + if (!next.length) { + next = $(this.$menu.find('li')[0]) + } + + next.addClass('active') + } + + , prev: function (event) { + var active = this.$menu.find('.active').removeClass('active') + , prev = active.prev() + + if (!prev.length) { + prev = this.$menu.find('li').last() + } + + prev.addClass('active') + } + + , listen: function () { + this.$element + .on('blur', $.proxy(this.blur, this)) + .on('keypress', $.proxy(this.keypress, this)) + .on('keyup', $.proxy(this.keyup, this)) + + if (this.eventSupported('keydown')) { + this.$element.on('keydown', $.proxy(this.keydown, this)) + } + + this.$menu + .on('click', $.proxy(this.click, this)) + .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) + } + + , eventSupported: function(eventName) { + var isSupported = eventName in this.$element + if (!isSupported) { + this.$element.setAttribute(eventName, 'return;') + isSupported = typeof this.$element[eventName] === 'function' + } + return isSupported + } + + , move: function (e) { + if (!this.shown) return + + switch(e.keyCode) { + case 9: // tab + case 13: // enter + case 27: // escape + e.preventDefault() + break + + case 38: // up arrow + e.preventDefault() + this.prev() + break + + case 40: // down arrow + e.preventDefault() + this.next() + break + } + + e.stopPropagation() + } + + , keydown: function (e) { + this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) + this.move(e) + } + + , keypress: function (e) { + if (this.suppressKeyPressRepeat) return + this.move(e) + } + + , keyup: function (e) { + switch(e.keyCode) { + case 40: // down arrow + case 38: // up arrow + case 16: // shift + case 17: // ctrl + case 18: // alt + break + + case 9: // tab + case 13: // enter + if (!this.shown) return + this.select() + break + + case 27: // escape + if (!this.shown) return + this.hide() + break + + default: + this.lookup() + } + + e.stopPropagation() + e.preventDefault() + } + + , blur: function (e) { + var that = this + setTimeout(function () { that.hide() }, 150) + } + + , click: function (e) { + e.stopPropagation() + e.preventDefault() + this.select() + } + + , mouseenter: function (e) { + this.$menu.find('.active').removeClass('active') + $(e.currentTarget).addClass('active') + } + + } + + + /* TYPEAHEAD PLUGIN DEFINITION + * =========================== */ + + var old = $.fn.typeahead + + $.fn.typeahead = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('typeahead') + , options = typeof option == 'object' && option + if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.typeahead.defaults = { + source: [] + , items: 8 + , menu: '<ul class="typeahead dropdown-menu"></ul>' + , item: '<li><a href="#"></a></li>' + , minLength: 1 + } + + $.fn.typeahead.Constructor = Typeahead + + + /* TYPEAHEAD NO CONFLICT + * =================== */ + + $.fn.typeahead.noConflict = function () { + $.fn.typeahead = old + return this + } + + + /* TYPEAHEAD DATA-API + * ================== */ + + $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { + var $this = $(this) + if ($this.data('typeahead')) return + e.preventDefault() + $this.typeahead($this.data()) + }) + +}(window.jQuery); +/* =========================================================== + * bootstrap-popover.js v2.2.2 + * http://twitter.github.com/bootstrap/javascript.html#popovers + * =========================================================== + * 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 ;_; + + + /* POPOVER PUBLIC CLASS DEFINITION + * =============================== */ + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + + /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js + ========================================== */ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { + + constructor: Popover + + , setContent: function () { + var $tip = this.tip() + , title = this.getTitle() + , content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) + + $tip.removeClass('fade top bottom left right in') + } + + , hasContent: function () { + return this.getTitle() || this.getContent() + } + + , getContent: function () { + var content + , $e = this.$element + , o = this.options + + content = $e.attr('data-content') + || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) + + return content + } + + , tip: function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + } + return this.$tip + } + + , destroy: function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } + + }) + + + /* POPOVER PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.popover + + $.fn.popover = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('popover') + , options = typeof option == 'object' && option + if (!data) $this.data('popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.popover.Constructor = Popover + + $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { + placement: 'right' + , trigger: 'click' + , content: '' + , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>' + }) + + + /* POPOVER NO CONFLICT + * =================== */ + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(window.jQuery); +}); +/* @source lib/socket.io.js */; + +/*! Socket.IO.js build:0.9.16, development. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */ + +var io = ('undefined' === typeof module ? {} : module.exports); +(function() { + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, global) { + + /** + * IO namespace. + * + * @namespace + */ + + var io = exports; + + /** + * Socket.IO version + * + * @api public + */ + + io.version = '0.9.16'; + + /** + * Protocol implemented. + * + * @api public + */ + + io.protocol = 1; + + /** + * Available transports, these will be populated with the available transports + * + * @api public + */ + + io.transports = []; + + /** + * Keep track of jsonp callbacks. + * + * @api private + */ + + io.j = []; + + /** + * Keep track of our io.Sockets + * + * @api private + */ + io.sockets = {}; + + + /** + * Manages connections to hosts. + * + * @param {String} uri + * @Param {Boolean} force creation of new socket (defaults to false) + * @api public + */ + + io.connect = function (host, details) { + var uri = io.util.parseUri(host) + , uuri + , socket; + + if (global && global.location) { + uri.protocol = uri.protocol || global.location.protocol.slice(0, -1); + uri.host = uri.host || (global.document + ? global.document.domain : global.location.hostname); + uri.port = uri.port || global.location.port; + } + + uuri = io.util.uniqueUri(uri); + + var options = { + host: uri.host + , secure: 'https' == uri.protocol + , port: uri.port || ('https' == uri.protocol ? 443 : 80) + , query: uri.query || '' + }; + + io.util.merge(options, details); + + if (options['force new connection'] || !io.sockets[uuri]) { + socket = new io.Socket(options); + } + + if (!options['force new connection'] && socket) { + io.sockets[uuri] = socket; + } + + socket = socket || io.sockets[uuri]; + + // if path is different from '' or / + return socket.of(uri.path.length > 1 ? uri.path : ''); + }; + +})('object' === typeof module ? module.exports : (this.io = {}), this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, global) { + + /** + * Utilities namespace. + * + * @namespace + */ + + var util = exports.util = {}; + + /** + * Parses an URI + * + * @author Steven Levithan <stevenlevithan.com> (MIT license) + * @api public + */ + + var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + + var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', + 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', + 'anchor']; + + util.parseUri = function (str) { + var m = re.exec(str || '') + , uri = {} + , i = 14; + + while (i--) { + uri[parts[i]] = m[i] || ''; + } + + return uri; + }; + + /** + * Produces a unique url that identifies a Socket.IO connection. + * + * @param {Object} uri + * @api public + */ + + util.uniqueUri = function (uri) { + var protocol = uri.protocol + , host = uri.host + , port = uri.port; + + if ('document' in global) { + host = host || document.domain; + port = port || (protocol == 'https' + && document.location.protocol !== 'https:' ? 443 : document.location.port); + } else { + host = host || 'localhost'; + + if (!port && protocol == 'https') { + port = 443; + } + } + + return (protocol || 'http') + '://' + host + ':' + (port || 80); + }; + + /** + * Mergest 2 query strings in to once unique query string + * + * @param {String} base + * @param {String} addition + * @api public + */ + + util.query = function (base, addition) { + var query = util.chunkQuery(base || '') + , components = []; + + util.merge(query, util.chunkQuery(addition || '')); + for (var part in query) { + if (query.hasOwnProperty(part)) { + components.push(part + '=' + query[part]); + } + } + + return components.length ? '?' + components.join('&') : ''; + }; + + /** + * Transforms a querystring in to an object + * + * @param {String} qs + * @api public + */ + + util.chunkQuery = function (qs) { + var query = {} + , params = qs.split('&') + , i = 0 + , l = params.length + , kv; + + for (; i < l; ++i) { + kv = params[i].split('='); + if (kv[0]) { + query[kv[0]] = kv[1]; + } + } + + return query; + }; + + /** + * Executes the given function when the page is loaded. + * + * io.util.load(function () { console.log('page loaded'); }); + * + * @param {Function} fn + * @api public + */ + + var pageLoaded = false; + + util.load = function (fn) { + if ('document' in global && document.readyState === 'complete' || pageLoaded) { + return fn(); + } + + util.on(global, 'load', fn, false); + }; + + /** + * Adds an event. + * + * @api private + */ + + util.on = function (element, event, fn, capture) { + if (element.attachEvent) { + element.attachEvent('on' + event, fn); + } else if (element.addEventListener) { + element.addEventListener(event, fn, capture); + } + }; + + /** + * Generates the correct `XMLHttpRequest` for regular and cross domain requests. + * + * @param {Boolean} [xdomain] Create a request that can be used cross domain. + * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest. + * @api private + */ + + util.request = function (xdomain) { + + if (xdomain && 'undefined' != typeof XDomainRequest && !util.ua.hasCORS) { + return new XDomainRequest(); + } + + if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) { + return new XMLHttpRequest(); + } + + if (!xdomain) { + try { + return new window[(['Active'].concat('Object').join('X'))]('Microsoft.XMLHTTP'); + } catch(e) { } + } + + return null; + }; + + /** + * XHR based transport constructor. + * + * @constructor + * @api public + */ + + /** + * Change the internal pageLoaded value. + */ + + if ('undefined' != typeof window) { + util.load(function () { + pageLoaded = true; + }); + } + + /** + * Defers a function to ensure a spinner is not displayed by the browser + * + * @param {Function} fn + * @api public + */ + + util.defer = function (fn) { + if (!util.ua.webkit || 'undefined' != typeof importScripts) { + return fn(); + } + + util.load(function () { + setTimeout(fn, 100); + }); + }; + + /** + * Merges two objects. + * + * @api public + */ + + util.merge = function merge (target, additional, deep, lastseen) { + var seen = lastseen || [] + , depth = typeof deep == 'undefined' ? 2 : deep + , prop; + + for (prop in additional) { + if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) { + if (typeof target[prop] !== 'object' || !depth) { + target[prop] = additional[prop]; + seen.push(additional[prop]); + } else { + util.merge(target[prop], additional[prop], depth - 1, seen); + } + } + } + + return target; + }; + + /** + * Merges prototypes from objects + * + * @api public + */ + + util.mixin = function (ctor, ctor2) { + util.merge(ctor.prototype, ctor2.prototype); + }; + + /** + * Shortcut for prototypical and static inheritance. + * + * @api private + */ + + util.inherit = function (ctor, ctor2) { + function f() {}; + f.prototype = ctor2.prototype; + ctor.prototype = new f; + }; + + /** + * Checks if the given object is an Array. + * + * io.util.isArray([]); // true + * io.util.isArray({}); // false + * + * @param Object obj + * @api public + */ + + util.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + + /** + * Intersects values of two arrays into a third + * + * @api public + */ + + util.intersect = function (arr, arr2) { + var ret = [] + , longest = arr.length > arr2.length ? arr : arr2 + , shortest = arr.length > arr2.length ? arr2 : arr; + + for (var i = 0, l = shortest.length; i < l; i++) { + if (~util.indexOf(longest, shortest[i])) + ret.push(shortest[i]); + } + + return ret; + }; + + /** + * Array indexOf compatibility. + * + * @see bit.ly/a5Dxa2 + * @api public + */ + + util.indexOf = function (arr, o, i) { + + for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; + i < j && arr[i] !== o; i++) {} + + return j <= i ? -1 : i; + }; + + /** + * Converts enumerables to array. + * + * @api public + */ + + util.toArray = function (enu) { + var arr = []; + + for (var i = 0, l = enu.length; i < l; i++) + arr.push(enu[i]); + + return arr; + }; + + /** + * UA / engines detection namespace. + * + * @namespace + */ + + util.ua = {}; + + /** + * Whether the UA supports CORS for XHR. + * + * @api public + */ + + util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () { + try { + var a = new XMLHttpRequest(); + } catch (e) { + return false; + } + + return a.withCredentials != undefined; + })(); + + /** + * Detect webkit. + * + * @api public + */ + + util.ua.webkit = 'undefined' != typeof navigator + && /webkit/i.test(navigator.userAgent); + + /** + * Detect iPad/iPhone/iPod. + * + * @api public + */ + + util.ua.iDevice = 'undefined' != typeof navigator + && /iPad|iPhone|iPod/i.test(navigator.userAgent); + +})('undefined' != typeof io ? io : module.exports, this); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.EventEmitter = EventEmitter; + + /** + * Event emitter constructor. + * + * @api public. + */ + + function EventEmitter () {}; + + /** + * Adds a listener + * + * @api public + */ + + EventEmitter.prototype.on = function (name, fn) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = fn; + } else if (io.util.isArray(this.$events[name])) { + this.$events[name].push(fn); + } else { + this.$events[name] = [this.$events[name], fn]; + } + + return this; + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + /** + * Adds a volatile listener. + * + * @api public + */ + + EventEmitter.prototype.once = function (name, fn) { + var self = this; + + function on () { + self.removeListener(name, on); + fn.apply(this, arguments); + }; + + on.listener = fn; + this.on(name, on); + + return this; + }; + + /** + * Removes a listener. + * + * @api public + */ + + EventEmitter.prototype.removeListener = function (name, fn) { + if (this.$events && this.$events[name]) { + var list = this.$events[name]; + + if (io.util.isArray(list)) { + var pos = -1; + + for (var i = 0, l = list.length; i < l; i++) { + if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { + pos = i; + break; + } + } + + if (pos < 0) { + return this; + } + + list.splice(pos, 1); + + if (!list.length) { + delete this.$events[name]; + } + } else if (list === fn || (list.listener && list.listener === fn)) { + delete this.$events[name]; + } + } + + return this; + }; + + /** + * Removes all listeners for an event. + * + * @api public + */ + + EventEmitter.prototype.removeAllListeners = function (name) { + if (name === undefined) { + this.$events = {}; + return this; + } + + if (this.$events && this.$events[name]) { + this.$events[name] = null; + } + + return this; + }; + + /** + * Gets all listeners for a certain event. + * + * @api publci + */ + + EventEmitter.prototype.listeners = function (name) { + if (!this.$events) { + this.$events = {}; + } + + if (!this.$events[name]) { + this.$events[name] = []; + } + + if (!io.util.isArray(this.$events[name])) { + this.$events[name] = [this.$events[name]]; + } + + return this.$events[name]; + }; + + /** + * Emits an event. + * + * @api public + */ + + EventEmitter.prototype.emit = function (name) { + if (!this.$events) { + return false; + } + + var handler = this.$events[name]; + + if (!handler) { + return false; + } + + var args = Array.prototype.slice.call(arguments, 1); + + if ('function' == typeof handler) { + handler.apply(this, args); + } else if (io.util.isArray(handler)) { + var listeners = handler.slice(); + + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + } else { + return false; + } + + return true; + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +/** + * Based on JSON2 (http://www.JSON.org/js.html). + */ + +(function (exports, nativeJSON) { + "use strict"; + + // use native JSON if it's available + if (nativeJSON && nativeJSON.parse){ + return exports.JSON = { + parse: nativeJSON.parse + , stringify: nativeJSON.stringify + }; + } + + var JSON = exports.JSON = {}; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + function date(d, key) { + return isFinite(d.valueOf()) ? + d.getUTCFullYear() + '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + 'T' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()) + ':' + + f(d.getUTCSeconds()) + 'Z' : null; + }; + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value instanceof Date) { + value = date(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + +// If the JSON object does not yet have a parse method, give it one. + + JSON.parse = function (text, reviver) { + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? + walk({'': j}, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , typeof JSON !== 'undefined' ? JSON : undefined +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Parser namespace. + * + * @namespace + */ + + var parser = exports.parser = {}; + + /** + * Packet types. + */ + + var packets = parser.packets = [ + 'disconnect' + , 'connect' + , 'heartbeat' + , 'message' + , 'json' + , 'event' + , 'ack' + , 'error' + , 'noop' + ]; + + /** + * Errors reasons. + */ + + var reasons = parser.reasons = [ + 'transport not supported' + , 'client not handshaken' + , 'unauthorized' + ]; + + /** + * Errors advice. + */ + + var advice = parser.advice = [ + 'reconnect' + ]; + + /** + * Shortcuts. + */ + + var JSON = io.JSON + , indexOf = io.util.indexOf; + + /** + * Encodes a packet. + * + * @api private + */ + + parser.encodePacket = function (packet) { + var type = indexOf(packets, packet.type) + , id = packet.id || '' + , endpoint = packet.endpoint || '' + , ack = packet.ack + , data = null; + + switch (packet.type) { + case 'error': + var reason = packet.reason ? indexOf(reasons, packet.reason) : '' + , adv = packet.advice ? indexOf(advice, packet.advice) : ''; + + if (reason !== '' || adv !== '') + data = reason + (adv !== '' ? ('+' + adv) : ''); + + break; + + case 'message': + if (packet.data !== '') + data = packet.data; + break; + + case 'event': + var ev = { name: packet.name }; + + if (packet.args && packet.args.length) { + ev.args = packet.args; + } + + data = JSON.stringify(ev); + break; + + case 'json': + data = JSON.stringify(packet.data); + break; + + case 'connect': + if (packet.qs) + data = packet.qs; + break; + + case 'ack': + data = packet.ackId + + (packet.args && packet.args.length + ? '+' + JSON.stringify(packet.args) : ''); + break; + } + + // construct packet with required fragments + var encoded = [ + type + , id + (ack == 'data' ? '+' : '') + , endpoint + ]; + + // data fragment is optional + if (data !== null && data !== undefined) + encoded.push(data); + + return encoded.join(':'); + }; + + /** + * Encodes multiple messages (payload). + * + * @param {Array} messages + * @api private + */ + + parser.encodePayload = function (packets) { + var decoded = ''; + + if (packets.length == 1) + return packets[0]; + + for (var i = 0, l = packets.length; i < l; i++) { + var packet = packets[i]; + decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]; + } + + return decoded; + }; + + /** + * Decodes a packet + * + * @api private + */ + + var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/; + + parser.decodePacket = function (data) { + var pieces = data.match(regexp); + + if (!pieces) return {}; + + var id = pieces[2] || '' + , data = pieces[5] || '' + , packet = { + type: packets[pieces[1]] + , endpoint: pieces[4] || '' + }; + + // whether we need to acknowledge the packet + if (id) { + packet.id = id; + if (pieces[3]) + packet.ack = 'data'; + else + packet.ack = true; + } + + // handle different packet types + switch (packet.type) { + case 'error': + var pieces = data.split('+'); + packet.reason = reasons[pieces[0]] || ''; + packet.advice = advice[pieces[1]] || ''; + break; + + case 'message': + packet.data = data || ''; + break; + + case 'event': + try { + var opts = JSON.parse(data); + packet.name = opts.name; + packet.args = opts.args; + } catch (e) { } + + packet.args = packet.args || []; + break; + + case 'json': + try { + packet.data = JSON.parse(data); + } catch (e) { } + break; + + case 'connect': + packet.qs = data || ''; + break; + + case 'ack': + var pieces = data.match(/^([0-9]+)(\+)?(.*)/); + if (pieces) { + packet.ackId = pieces[1]; + packet.args = []; + + if (pieces[3]) { + try { + packet.args = pieces[3] ? JSON.parse(pieces[3]) : []; + } catch (e) { } + } + } + break; + + case 'disconnect': + case 'heartbeat': + break; + }; + + return packet; + }; + + /** + * Decodes data payload. Detects multiple messages + * + * @return {Array} messages + * @api public + */ + + parser.decodePayload = function (data) { + // IE doesn't like data[i] for unicode chars, charAt works fine + if (data.charAt(0) == '\ufffd') { + var ret = []; + + for (var i = 1, length = ''; i < data.length; i++) { + if (data.charAt(i) == '\ufffd') { + ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length))); + i += Number(length) + 1; + length = ''; + } else { + length += data.charAt(i); + } + } + + return ret; + } else { + return [parser.decodePacket(data)]; + } + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.Transport = Transport; + + /** + * This is the transport template for all supported transport methods. + * + * @constructor + * @api public + */ + + function Transport (socket, sessid) { + this.socket = socket; + this.sessid = sessid; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Transport, io.EventEmitter); + + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + Transport.prototype.heartbeats = function () { + return true; + }; + + /** + * Handles the response from the server. When a new response is received + * it will automatically update the timeout, decode the message and + * forwards the response to the onMessage function for further processing. + * + * @param {String} data Response from the server. + * @api private + */ + + Transport.prototype.onData = function (data) { + this.clearCloseTimeout(); + + // If the connection in currently open (or in a reopening state) reset the close + // timeout since we have just received data. This check is necessary so + // that we don't reset the timeout on an explicitly disconnected connection. + if (this.socket.connected || this.socket.connecting || this.socket.reconnecting) { + this.setCloseTimeout(); + } + + if (data !== '') { + // todo: we should only do decodePayload for xhr transports + var msgs = io.parser.decodePayload(data); + + if (msgs && msgs.length) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.onPacket(msgs[i]); + } + } + } + + return this; + }; + + /** + * Handles packets. + * + * @api private + */ + + Transport.prototype.onPacket = function (packet) { + this.socket.setHeartbeatTimeout(); + + if (packet.type == 'heartbeat') { + return this.onHeartbeat(); + } + + if (packet.type == 'connect' && packet.endpoint == '') { + this.onConnect(); + } + + if (packet.type == 'error' && packet.advice == 'reconnect') { + this.isOpen = false; + } + + this.socket.onPacket(packet); + + return this; + }; + + /** + * Sets close timeout + * + * @api private + */ + + Transport.prototype.setCloseTimeout = function () { + if (!this.closeTimeout) { + var self = this; + + this.closeTimeout = setTimeout(function () { + self.onDisconnect(); + }, this.socket.closeTimeout); + } + }; + + /** + * Called when transport disconnects. + * + * @api private + */ + + Transport.prototype.onDisconnect = function () { + if (this.isOpen) this.close(); + this.clearTimeouts(); + this.socket.onDisconnect(); + return this; + }; + + /** + * Called when transport connects + * + * @api private + */ + + Transport.prototype.onConnect = function () { + this.socket.onConnect(); + return this; + }; + + /** + * Clears close timeout + * + * @api private + */ + + Transport.prototype.clearCloseTimeout = function () { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }; + + /** + * Clear timeouts + * + * @api private + */ + + Transport.prototype.clearTimeouts = function () { + this.clearCloseTimeout(); + + if (this.reopenTimeout) { + clearTimeout(this.reopenTimeout); + } + }; + + /** + * Sends a packet + * + * @param {Object} packet object. + * @api private + */ + + Transport.prototype.packet = function (packet) { + this.send(io.parser.encodePacket(packet)); + }; + + /** + * Send the received heartbeat message back to server. So the server + * knows we are still connected. + * + * @param {String} heartbeat Heartbeat response from the server. + * @api private + */ + + Transport.prototype.onHeartbeat = function (heartbeat) { + this.packet({ type: 'heartbeat' }); + }; + + /** + * Called when the transport opens. + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.isOpen = true; + this.clearCloseTimeout(); + this.socket.onOpen(); + }; + + /** + * Notifies the base when the connection with the Socket.IO server + * has been disconnected. + * + * @api private + */ + + Transport.prototype.onClose = function () { + var self = this; + + /* FIXME: reopen delay causing a infinit loop + this.reopenTimeout = setTimeout(function () { + self.open(); + }, this.socket.options['reopen delay']);*/ + + this.isOpen = false; + this.socket.onClose(); + this.onDisconnect(); + }; + + /** + * Generates a connection url based on the Socket.IO URL Protocol. + * See <https://github.com/learnboost/socket.io-node/> for more details. + * + * @returns {String} Connection url + * @api private + */ + + Transport.prototype.prepareUrl = function () { + var options = this.socket.options; + + return this.scheme() + '://' + + options.host + ':' + options.port + '/' + + options.resource + '/' + io.protocol + + '/' + this.name + '/' + this.sessid; + }; + + /** + * Checks if the transport is ready to start a connection. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Transport.prototype.ready = function (socket, fn) { + fn.call(this); + }; +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.Socket = Socket; + + /** + * Create a new `Socket.IO client` which can establish a persistent + * connection with a Socket.IO enabled server. + * + * @api public + */ + + function Socket (options) { + this.options = { + port: 80 + , secure: false + , document: 'document' in global ? document : false + , resource: 'socket.io' + , transports: io.transports + , 'connect timeout': 10000 + , 'try multiple transports': true + , 'reconnect': true + , 'reconnection delay': 500 + , 'reconnection limit': Infinity + , 'reopen delay': 3000 + , 'max reconnection attempts': 10 + , 'sync disconnect on unload': false + , 'auto connect': true + , 'flash policy port': 10843 + , 'manualFlush': false + }; + + io.util.merge(this.options, options); + + this.connected = false; + this.open = false; + this.connecting = false; + this.reconnecting = false; + this.namespaces = {}; + this.buffer = []; + this.doBuffer = false; + + if (this.options['sync disconnect on unload'] && + (!this.isXDomain() || io.util.ua.hasCORS)) { + var self = this; + io.util.on(global, 'beforeunload', function () { + self.disconnectSync(); + }, false); + } + + if (this.options['auto connect']) { + this.connect(); + } +}; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(Socket, io.EventEmitter); + + /** + * Returns a namespace listener/emitter for this socket + * + * @api public + */ + + Socket.prototype.of = function (name) { + if (!this.namespaces[name]) { + this.namespaces[name] = new io.SocketNamespace(this, name); + + if (name !== '') { + this.namespaces[name].packet({ type: 'connect' }); + } + } + + return this.namespaces[name]; + }; + + /** + * Emits the given event to the Socket and all namespaces + * + * @api private + */ + + Socket.prototype.publish = function () { + this.emit.apply(this, arguments); + + var nsp; + + for (var i in this.namespaces) { + if (this.namespaces.hasOwnProperty(i)) { + nsp = this.of(i); + nsp.$emit.apply(nsp, arguments); + } + } + }; + + /** + * Performs the handshake + * + * @api private + */ + + function empty () { }; + + Socket.prototype.handshake = function (fn) { + var self = this + , options = this.options; + + function complete (data) { + if (data instanceof Error) { + self.connecting = false; + self.onError(data.message); + } else { + fn.apply(null, data.split(':')); + } + }; + + var url = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , io.protocol + , io.util.query(this.options.query, 't=' + +new Date) + ].join('/'); + + if (this.isXDomain() && !io.util.ua.hasCORS) { + var insertAt = document.getElementsByTagName('script')[0] + , script = document.createElement('script'); + + script.src = url + '&jsonp=' + io.j.length; + insertAt.parentNode.insertBefore(script, insertAt); + + io.j.push(function (data) { + complete(data); + script.parentNode.removeChild(script); + }); + } else { + var xhr = io.util.request(); + + xhr.open('GET', url, true); + if (this.isXDomain()) { + xhr.withCredentials = true; + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + xhr.onreadystatechange = empty; + + if (xhr.status == 200) { + complete(xhr.responseText); + } else if (xhr.status == 403) { + self.onError(xhr.responseText); + } else { + self.connecting = false; + !self.reconnecting && self.onError(xhr.responseText); + } + } + }; + xhr.send(null); + } + }; + + /** + * Find an available transport based on the options supplied in the constructor. + * + * @api private + */ + + Socket.prototype.getTransport = function (override) { + var transports = override || this.transports, match; + + for (var i = 0, transport; transport = transports[i]; i++) { + if (io.Transport[transport] + && io.Transport[transport].check(this) + && (!this.isXDomain() || io.Transport[transport].xdomainCheck(this))) { + return new io.Transport[transport](this, this.sessionid); + } + } + + return null; + }; + + /** + * Connects to the server. + * + * @param {Function} [fn] Callback. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.connect = function (fn) { + if (this.connecting) { + return this; + } + + var self = this; + self.connecting = true; + + this.handshake(function (sid, heartbeat, close, transports) { + self.sessionid = sid; + self.closeTimeout = close * 1000; + self.heartbeatTimeout = heartbeat * 1000; + if(!self.transports) + self.transports = self.origTransports = (transports ? io.util.intersect( + transports.split(',') + , self.options.transports + ) : self.options.transports); + + self.setHeartbeatTimeout(); + + function connect (transports){ + if (self.transport) self.transport.clearTimeouts(); + + self.transport = self.getTransport(transports); + if (!self.transport) return self.publish('connect_failed'); + + // once the transport is ready + self.transport.ready(self, function () { + self.connecting = true; + self.publish('connecting', self.transport.name); + self.transport.open(); + + if (self.options['connect timeout']) { + self.connectTimeoutTimer = setTimeout(function () { + if (!self.connected) { + self.connecting = false; + + if (self.options['try multiple transports']) { + var remaining = self.transports; + + while (remaining.length > 0 && remaining.splice(0,1)[0] != + self.transport.name) {} + + if (remaining.length){ + connect(remaining); + } else { + self.publish('connect_failed'); + } + } + } + }, self.options['connect timeout']); + } + }); + } + + connect(self.transports); + + self.once('connect', function (){ + clearTimeout(self.connectTimeoutTimer); + + fn && typeof fn == 'function' && fn(); + }); + }); + + return this; + }; + + /** + * Clears and sets a new heartbeat timeout using the value given by the + * server during the handshake. + * + * @api private + */ + + Socket.prototype.setHeartbeatTimeout = function () { + clearTimeout(this.heartbeatTimeoutTimer); + if(this.transport && !this.transport.heartbeats()) return; + + var self = this; + this.heartbeatTimeoutTimer = setTimeout(function () { + self.transport.onClose(); + }, this.heartbeatTimeout); + }; + + /** + * Sends a message. + * + * @param {Object} data packet. + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.packet = function (data) { + if (this.connected && !this.doBuffer) { + this.transport.packet(data); + } else { + this.buffer.push(data); + } + + return this; + }; + + /** + * Sets buffer state + * + * @api private + */ + + Socket.prototype.setBuffer = function (v) { + this.doBuffer = v; + + if (!v && this.connected && this.buffer.length) { + if (!this.options['manualFlush']) { + this.flushBuffer(); + } + } + }; + + /** + * Flushes the buffer data over the wire. + * To be invoked manually when 'manualFlush' is set to true. + * + * @api public + */ + + Socket.prototype.flushBuffer = function() { + this.transport.payload(this.buffer); + this.buffer = []; + }; + + + /** + * Disconnect the established connect. + * + * @returns {io.Socket} + * @api public + */ + + Socket.prototype.disconnect = function () { + if (this.connected || this.connecting) { + if (this.open) { + this.of('').packet({ type: 'disconnect' }); + } + + // handle disconnection immediately + this.onDisconnect('booted'); + } + + return this; + }; + + /** + * Disconnects the socket with a sync XHR. + * + * @api private + */ + + Socket.prototype.disconnectSync = function () { + // ensure disconnection + var xhr = io.util.request(); + var uri = [ + 'http' + (this.options.secure ? 's' : '') + ':/' + , this.options.host + ':' + this.options.port + , this.options.resource + , io.protocol + , '' + , this.sessionid + ].join('/') + '/?disconnect=1'; + + xhr.open('GET', uri, false); + xhr.send(null); + + // handle disconnection immediately + this.onDisconnect('booted'); + }; + + /** + * Check if we need to use cross domain enabled transports. Cross domain would + * be a different port or different domain name. + * + * @returns {Boolean} + * @api private + */ + + Socket.prototype.isXDomain = function () { + + var port = global.location.port || + ('https:' == global.location.protocol ? 443 : 80); + + return this.options.host !== global.location.hostname + || this.options.port != port; + }; + + /** + * Called upon handshake. + * + * @api private + */ + + Socket.prototype.onConnect = function () { + if (!this.connected) { + this.connected = true; + this.connecting = false; + if (!this.doBuffer) { + // make sure to flush the buffer + this.setBuffer(false); + } + this.emit('connect'); + } + }; + + /** + * Called when the transport opens + * + * @api private + */ + + Socket.prototype.onOpen = function () { + this.open = true; + }; + + /** + * Called when the transport closes. + * + * @api private + */ + + Socket.prototype.onClose = function () { + this.open = false; + clearTimeout(this.heartbeatTimeoutTimer); + }; + + /** + * Called when the transport first opens a connection + * + * @param text + */ + + Socket.prototype.onPacket = function (packet) { + this.of(packet.endpoint).onPacket(packet); + }; + + /** + * Handles an error. + * + * @api private + */ + + Socket.prototype.onError = function (err) { + if (err && err.advice) { + if (err.advice === 'reconnect' && (this.connected || this.connecting)) { + this.disconnect(); + if (this.options.reconnect) { + this.reconnect(); + } + } + } + + this.publish('error', err && err.reason ? err.reason : err); + }; + + /** + * Called when the transport disconnects. + * + * @api private + */ + + Socket.prototype.onDisconnect = function (reason) { + var wasConnected = this.connected + , wasConnecting = this.connecting; + + this.connected = false; + this.connecting = false; + this.open = false; + + if (wasConnected || wasConnecting) { + this.transport.close(); + this.transport.clearTimeouts(); + if (wasConnected) { + this.publish('disconnect', reason); + + if ('booted' != reason && this.options.reconnect && !this.reconnecting) { + this.reconnect(); + } + } + } + }; + + /** + * Called upon reconnection. + * + * @api private + */ + + Socket.prototype.reconnect = function () { + this.reconnecting = true; + this.reconnectionAttempts = 0; + this.reconnectionDelay = this.options['reconnection delay']; + + var self = this + , maxAttempts = this.options['max reconnection attempts'] + , tryMultiple = this.options['try multiple transports'] + , limit = this.options['reconnection limit']; + + function reset () { + if (self.connected) { + for (var i in self.namespaces) { + if (self.namespaces.hasOwnProperty(i) && '' !== i) { + self.namespaces[i].packet({ type: 'connect' }); + } + } + self.publish('reconnect', self.transport.name, self.reconnectionAttempts); + } + + clearTimeout(self.reconnectionTimer); + + self.removeListener('connect_failed', maybeReconnect); + self.removeListener('connect', maybeReconnect); + + self.reconnecting = false; + + delete self.reconnectionAttempts; + delete self.reconnectionDelay; + delete self.reconnectionTimer; + delete self.redoTransports; + + self.options['try multiple transports'] = tryMultiple; + }; + + function maybeReconnect () { + if (!self.reconnecting) { + return; + } + + if (self.connected) { + return reset(); + }; + + if (self.connecting && self.reconnecting) { + return self.reconnectionTimer = setTimeout(maybeReconnect, 1000); + } + + if (self.reconnectionAttempts++ >= maxAttempts) { + if (!self.redoTransports) { + self.on('connect_failed', maybeReconnect); + self.options['try multiple transports'] = true; + self.transports = self.origTransports; + self.transport = self.getTransport(); + self.redoTransports = true; + self.connect(); + } else { + self.publish('reconnect_failed'); + reset(); + } + } else { + if (self.reconnectionDelay < limit) { + self.reconnectionDelay *= 2; // exponential back off + } + + self.connect(); + self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts); + self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay); + } + }; + + this.options['try multiple transports'] = false; + this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay); + + this.on('connect', maybeReconnect); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.SocketNamespace = SocketNamespace; + + /** + * Socket namespace constructor. + * + * @constructor + * @api public + */ + + function SocketNamespace (socket, name) { + this.socket = socket; + this.name = name || ''; + this.flags = {}; + this.json = new Flag(this, 'json'); + this.ackPackets = 0; + this.acks = {}; + }; + + /** + * Apply EventEmitter mixin. + */ + + io.util.mixin(SocketNamespace, io.EventEmitter); + + /** + * Copies emit since we override it + * + * @api private + */ + + SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit; + + /** + * Creates a new namespace, by proxying the request to the socket. This + * allows us to use the synax as we do on the server. + * + * @api public + */ + + SocketNamespace.prototype.of = function () { + return this.socket.of.apply(this.socket, arguments); + }; + + /** + * Sends a packet. + * + * @api private + */ + + SocketNamespace.prototype.packet = function (packet) { + packet.endpoint = this.name; + this.socket.packet(packet); + this.flags = {}; + return this; + }; + + /** + * Sends a message + * + * @api public + */ + + SocketNamespace.prototype.send = function (data, fn) { + var packet = { + type: this.flags.json ? 'json' : 'message' + , data: data + }; + + if ('function' == typeof fn) { + packet.id = ++this.ackPackets; + packet.ack = true; + this.acks[packet.id] = fn; + } + + return this.packet(packet); + }; + + /** + * Emits an event + * + * @api public + */ + + SocketNamespace.prototype.emit = function (name) { + var args = Array.prototype.slice.call(arguments, 1) + , lastArg = args[args.length - 1] + , packet = { + type: 'event' + , name: name + }; + + if ('function' == typeof lastArg) { + packet.id = ++this.ackPackets; + packet.ack = 'data'; + this.acks[packet.id] = lastArg; + args = args.slice(0, args.length - 1); + } + + packet.args = args; + + return this.packet(packet); + }; + + /** + * Disconnects the namespace + * + * @api private + */ + + SocketNamespace.prototype.disconnect = function () { + if (this.name === '') { + this.socket.disconnect(); + } else { + this.packet({ type: 'disconnect' }); + this.$emit('disconnect'); + } + + return this; + }; + + /** + * Handles a packet + * + * @api private + */ + + SocketNamespace.prototype.onPacket = function (packet) { + var self = this; + + function ack () { + self.packet({ + type: 'ack' + , args: io.util.toArray(arguments) + , ackId: packet.id + }); + }; + + switch (packet.type) { + case 'connect': + this.$emit('connect'); + break; + + case 'disconnect': + if (this.name === '') { + this.socket.onDisconnect(packet.reason || 'booted'); + } else { + this.$emit('disconnect', packet.reason); + } + break; + + case 'message': + case 'json': + var params = ['message', packet.data]; + + if (packet.ack == 'data') { + params.push(ack); + } else if (packet.ack) { + this.packet({ type: 'ack', ackId: packet.id }); + } + + this.$emit.apply(this, params); + break; + + case 'event': + var params = [packet.name].concat(packet.args); + + if (packet.ack == 'data') + params.push(ack); + + this.$emit.apply(this, params); + break; + + case 'ack': + if (this.acks[packet.ackId]) { + this.acks[packet.ackId].apply(this, packet.args); + delete this.acks[packet.ackId]; + } + break; + + case 'error': + if (packet.advice){ + this.socket.onError(packet); + } else { + if (packet.reason == 'unauthorized') { + this.$emit('connect_failed', packet.reason); + } else { + this.$emit('error', packet.reason); + } + } + break; + } + }; + + /** + * Flag interface. + * + * @api private + */ + + function Flag (nsp, name) { + this.namespace = nsp; + this.name = name; + }; + + /** + * Send a message + * + * @api public + */ + + Flag.prototype.send = function () { + this.namespace.flags[this.name] = true; + this.namespace.send.apply(this.namespace, arguments); + }; + + /** + * Emit an event + * + * @api public + */ + + Flag.prototype.emit = function () { + this.namespace.flags[this.name] = true; + this.namespace.emit.apply(this.namespace, arguments); + }; + +})( + 'undefined' != typeof io ? io : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports.websocket = WS; + + /** + * The WebSocket transport uses the HTML5 WebSocket API to establish an + * persistent connection with the Socket.IO server. This transport will also + * be inherited by the FlashSocket fallback as it provides a API compatible + * polyfill for the WebSockets. + * + * @constructor + * @extends {io.Transport} + * @api public + */ + + function WS (socket) { + io.Transport.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(WS, io.Transport); + + /** + * Transport name + * + * @api public + */ + + WS.prototype.name = 'websocket'; + + /** + * Initializes a new `WebSocket` connection with the Socket.IO server. We attach + * all the appropriate listeners to handle the responses from the server. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.open = function () { + var query = io.util.query(this.socket.options.query) + , self = this + , Socket + + + if (!Socket) { + Socket = global.MozWebSocket || global.WebSocket; + } + + this.websocket = new Socket(this.prepareUrl() + query); + + this.websocket.onopen = function () { + self.onOpen(); + self.socket.setBuffer(false); + }; + this.websocket.onmessage = function (ev) { + self.onData(ev.data); + }; + this.websocket.onclose = function () { + self.onClose(); + self.socket.setBuffer(true); + }; + this.websocket.onerror = function (e) { + self.onError(e); + }; + + return this; + }; + + /** + * Send a message to the Socket.IO server. The message will automatically be + * encoded in the correct message format. + * + * @returns {Transport} + * @api public + */ + + // Do to a bug in the current IDevices browser, we need to wrap the send in a + // setTimeout, when they resume from sleeping the browser will crash if + // we don't allow the browser time to detect the socket has been closed + if (io.util.ua.iDevice) { + WS.prototype.send = function (data) { + var self = this; + setTimeout(function() { + self.websocket.send(data); + },0); + return this; + }; + } else { + WS.prototype.send = function (data) { + this.websocket.send(data); + return this; + }; + } + + /** + * Payload + * + * @api private + */ + + WS.prototype.payload = function (arr) { + for (var i = 0, l = arr.length; i < l; i++) { + this.packet(arr[i]); + } + return this; + }; + + /** + * Disconnect the established `WebSocket` connection. + * + * @returns {Transport} + * @api public + */ + + WS.prototype.close = function () { + this.websocket.close(); + return this; + }; + + /** + * Handle the errors that `WebSocket` might be giving when we + * are attempting to connect or send messages. + * + * @param {Error} e The error. + * @api private + */ + + WS.prototype.onError = function (e) { + this.socket.onError(e); + }; + + /** + * Returns the appropriate scheme for the URI generation. + * + * @api private + */ + WS.prototype.scheme = function () { + return this.socket.options.secure ? 'wss' : 'ws'; + }; + + /** + * Checks if the browser has support for native `WebSockets` and that + * it's not the polyfill created for the FlashSocket transport. + * + * @return {Boolean} + * @api public + */ + + WS.check = function () { + return ('WebSocket' in global && !('__addTask' in WebSocket)) + || 'MozWebSocket' in global; + }; + + /** + * Check if the `WebSocket` transport support cross domain communications. + * + * @returns {Boolean} + * @api public + */ + + WS.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('websocket'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.flashsocket = Flashsocket; + + /** + * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket + * specification. It uses a .swf file to communicate with the server. If you want + * to serve the .swf file from a other server than where the Socket.IO script is + * coming from you need to use the insecure version of the .swf. More information + * about this can be found on the github page. + * + * @constructor + * @extends {io.Transport.websocket} + * @api public + */ + + function Flashsocket () { + io.Transport.websocket.apply(this, arguments); + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(Flashsocket, io.Transport.websocket); + + /** + * Transport name + * + * @api public + */ + + Flashsocket.prototype.name = 'flashsocket'; + + /** + * Disconnect the established `FlashSocket` connection. This is done by adding a + * new task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.open = function () { + var self = this + , args = arguments; + + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.open.apply(self, args); + }); + return this; + }; + + /** + * Sends a message to the Socket.IO server. This is done by adding a new + * task to the FlashSocket. The rest will be handled off by the `WebSocket` + * transport. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.send = function () { + var self = this, args = arguments; + WebSocket.__addTask(function () { + io.Transport.websocket.prototype.send.apply(self, args); + }); + return this; + }; + + /** + * Disconnects the established `FlashSocket` connection. + * + * @returns {Transport} + * @api public + */ + + Flashsocket.prototype.close = function () { + WebSocket.__tasks.length = 0; + io.Transport.websocket.prototype.close.call(this); + return this; + }; + + /** + * The WebSocket fall back needs to append the flash container to the body + * element, so we need to make sure we have access to it. Or defer the call + * until we are sure there is a body element. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + Flashsocket.prototype.ready = function (socket, fn) { + function init () { + var options = socket.options + , port = options['flash policy port'] + , path = [ + 'http' + (options.secure ? 's' : '') + ':/' + , options.host + ':' + options.port + , options.resource + , 'static/flashsocket' + , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf' + ]; + + // Only start downloading the swf file when the checked that this browser + // actually supports it + if (!Flashsocket.loaded) { + if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') { + // Set the correct file based on the XDomain settings + WEB_SOCKET_SWF_LOCATION = path.join('/'); + } + + if (port !== 843) { + WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port); + } + + WebSocket.__initialize(); + Flashsocket.loaded = true; + } + + fn.call(self); + } + + var self = this; + if (document.body) return init(); + + io.util.load(init); + }; + + /** + * Check if the FlashSocket transport is supported as it requires that the Adobe + * Flash Player plug-in version `10.0.0` or greater is installed. And also check if + * the polyfill is correctly loaded. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.check = function () { + if ( + typeof WebSocket == 'undefined' + || !('__initialize' in WebSocket) || !swfobject + ) return false; + + return swfobject.getFlashPlayerVersion().major >= 10; + }; + + /** + * Check if the FlashSocket transport can be used as cross domain / cross origin + * transport. Because we can't see which type (secure or insecure) of .swf is used + * we will just return true. + * + * @returns {Boolean} + * @api public + */ + + Flashsocket.xdomainCheck = function () { + return true; + }; + + /** + * Disable AUTO_INITIALIZATION + */ + + if (typeof window != 'undefined') { + WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true; + } + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('flashsocket'); +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); +/* SWFObject v2.2 <http://code.google.com/p/swfobject/> + is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> +*/ +if ('undefined' != typeof window) { +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O[(['Active'].concat('Object').join('X'))]!=D){try{var ad=new window[(['Active'].concat('Object').join('X'))](W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?(['Active'].concat('').join('X')):"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}(); +} +// Copyright: Hiroshi Ichikawa <http://gimite.net/en/> +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if ('undefined' == typeof window || window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("10.0.0")) { + console.error("Flash Player >= 10.0.0 is required."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + /** + * This class represents a faux web socket. + * @param {string} url + * @param {array or string} protocols + * @param {string} proxyHost + * @param {int} proxyPort + * @param {string} headers + */ + WebSocket = function(url, protocols, proxyHost, proxyPort, headers) { + var self = this; + self.__id = WebSocket.__nextId++; + WebSocket.__instances[self.__id] = self; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + self.__events = {}; + if (!protocols) { + protocols = []; + } else if (typeof protocols == "string") { + protocols = [protocols]; + } + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + WebSocket.__flash.create( + self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null); + }); + }, 0); + }; + + /** + * Send data to the web socket. + * @param {string} data The data to send to the socket. + * @return {boolean} True for success, false for failure. + */ + WebSocket.prototype.send = function(data) { + if (this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + // Note by wtritch: Hopefully this will not be necessary using ExternalInterface. Will require + // additional testing. + var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + /** + * Close this web socket gracefully. + */ + WebSocket.prototype.close = function() { + if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { + return; + } + this.readyState = WebSocket.CLOSING; + WebSocket.__flash.close(this.__id); + }; + + /** + * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) { + this.__events[type] = []; + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!(type in this.__events)) return; + var events = this.__events[type]; + for (var i = events.length - 1; i >= 0; --i) { + if (events[i] === listener) { + events.splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>} + * + * @param {Event} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + var events = this.__events[event.type] || []; + for (var i = 0; i < events.length; ++i) { + events[i](event); + } + var handler = this["on" + event.type]; + if (handler) handler(event); + }; + + /** + * Handles an event from Flash. + * @param {Object} flashEvent + */ + WebSocket.prototype.__handleEvent = function(flashEvent) { + if ("readyState" in flashEvent) { + this.readyState = flashEvent.readyState; + } + if ("protocol" in flashEvent) { + this.protocol = flashEvent.protocol; + } + + var jsEvent; + if (flashEvent.type == "open" || flashEvent.type == "error") { + jsEvent = this.__createSimpleEvent(flashEvent.type); + } else if (flashEvent.type == "close") { + // TODO implement jsEvent.wasClean + jsEvent = this.__createSimpleEvent("close"); + } else if (flashEvent.type == "message") { + var data = decodeURIComponent(flashEvent.message); + jsEvent = this.__createMessageEvent("message", data); + } else { + throw "unknown event type: " + flashEvent.type; + } + + this.dispatchEvent(jsEvent); + }; + + WebSocket.prototype.__createSimpleEvent = function(type) { + if (document.createEvent && window.Event) { + var event = document.createEvent("Event"); + event.initEvent(type, false, false); + return event; + } else { + return {type: type, bubbles: false, cancelable: false}; + } + }; + + WebSocket.prototype.__createMessageEvent = function(type, data) { + if (document.createEvent && window.MessageEvent && !window.opera) { + var event = document.createEvent("MessageEvent"); + event.initMessageEvent("message", false, false, data, null, null, window, null); + return event; + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + return {type: type, data: data, bubbles: false, cancelable: false}; + } + }; + + /** + * Define the WebSocket readyState enumeration. + */ + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__flash = null; + WebSocket.__instances = {}; + WebSocket.__tasks = []; + WebSocket.__nextId = 0; + + /** + * Load a new flash security policy file. + * @param {string} url + */ + WebSocket.loadFlashPolicyFile = function(url){ + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + }; + + /** + * Loads WebSocketMain.swf and creates WebSocketMain object in Flash. + */ + WebSocket.__initialize = function() { + if (WebSocket.__flash) return; + + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, + "webSocketFlash", + "1" /* width */, + "1" /* height */, + "10.0.0" /* SWF version */, + null, + null, + {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"}, + null, + function(e) { + if (!e.success) { + console.error("[WebSocket] swfobject.embedSWF failed"); + } + }); + }; + + /** + * Called by Flash to notify JS that it's fully loaded and ready + * for communication. + */ + WebSocket.__onFlashInitialized = function() { + // We need to set a timeout here to avoid round-trip calls + // to flash during the initialization process. + setTimeout(function() { + WebSocket.__flash = document.getElementById("webSocketFlash"); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + }, 0); + }; + + /** + * Called by Flash to notify WebSockets events are fired. + */ + WebSocket.__onFlashEvent = function() { + setTimeout(function() { + try { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = WebSocket.__flash.receiveEvents(); + for (var i = 0; i < events.length; ++i) { + WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]); + } + } catch (e) { + console.error(e); + } + }, 0); + return true; + }; + + // Called by Flash. + WebSocket.__log = function(message) { + console.log(decodeURIComponent(message)); + }; + + // Called by Flash. + WebSocket.__error = function(message) { + console.error(decodeURIComponent(message)); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + /** + * Test if the browser is running flash lite. + * @return {boolean} True if flash lite is running, false otherwise. + */ + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) { + return false; + } + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) { + return false; + } + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", function(){ + WebSocket.__initialize(); + }, false); + } else { + window.attachEvent("onload", function(){ + WebSocket.__initialize(); + }); + } + } + +})(); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + * + * @api public + */ + + exports.XHR = XHR; + + /** + * XHR constructor + * + * @costructor + * @api public + */ + + function XHR (socket) { + if (!socket) return; + + io.Transport.apply(this, arguments); + this.sendBuffer = []; + }; + + /** + * Inherits from Transport. + */ + + io.util.inherit(XHR, io.Transport); + + /** + * Establish a connection + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.open = function () { + this.socket.setBuffer(false); + this.onOpen(); + this.get(); + + // we need to make sure the request succeeds since we have no indication + // whether the request opened or not until it succeeded. + this.setCloseTimeout(); + + return this; + }; + + /** + * Check if we need to send data to the Socket.IO server, if we have data in our + * buffer we encode it and forward it to the `post` method. + * + * @api private + */ + + XHR.prototype.payload = function (payload) { + var msgs = []; + + for (var i = 0, l = payload.length; i < l; i++) { + msgs.push(io.parser.encodePacket(payload[i])); + } + + this.send(io.parser.encodePayload(msgs)); + }; + + /** + * Send data to the Socket.IO server. + * + * @param data The message + * @returns {Transport} + * @api public + */ + + XHR.prototype.send = function (data) { + this.post(data); + return this; + }; + + /** + * Posts a encoded message to the Socket.IO server. + * + * @param {String} data A encoded message. + * @api private + */ + + function empty () { }; + + XHR.prototype.post = function (data) { + var self = this; + this.socket.setBuffer(true); + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + self.posting = false; + + if (this.status == 200){ + self.socket.setBuffer(false); + } else { + self.onClose(); + } + } + } + + function onload () { + this.onload = empty; + self.socket.setBuffer(false); + }; + + this.sendXHR = this.request('POST'); + + if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) { + this.sendXHR.onload = this.sendXHR.onerror = onload; + } else { + this.sendXHR.onreadystatechange = stateChange; + } + + this.sendXHR.send(data); + }; + + /** + * Disconnects the established `XHR` connection. + * + * @returns {Transport} + * @api public + */ + + XHR.prototype.close = function () { + this.onClose(); + return this; + }; + + /** + * Generates a configured XHR request + * + * @param {String} url The url that needs to be requested. + * @param {String} method The method the request should use. + * @returns {XMLHttpRequest} + * @api private + */ + + XHR.prototype.request = function (method) { + var req = io.util.request(this.socket.isXDomain()) + , query = io.util.query(this.socket.options.query, 't=' + +new Date); + + req.open(method || 'GET', this.prepareUrl() + query, true); + + if (method == 'POST') { + try { + if (req.setRequestHeader) { + req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } else { + // XDomainRequest + req.contentType = 'text/plain'; + } + } catch (e) {} + } + + return req; + }; + + /** + * Returns the scheme to use for the transport URLs. + * + * @api private + */ + + XHR.prototype.scheme = function () { + return this.socket.options.secure ? 'https' : 'http'; + }; + + /** + * Check if the XHR transports are supported + * + * @param {Boolean} xdomain Check if we support cross domain requests. + * @returns {Boolean} + * @api public + */ + + XHR.check = function (socket, xdomain) { + try { + var request = io.util.request(xdomain), + usesXDomReq = (global.XDomainRequest && request instanceof XDomainRequest), + socketProtocol = (socket && socket.options && socket.options.secure ? 'https:' : 'http:'), + isXProtocol = (global.location && socketProtocol != global.location.protocol); + if (request && !(usesXDomReq && isXProtocol)) { + return true; + } + } catch(e) {} + + return false; + }; + + /** + * Check if the XHR transport supports cross domain requests. + * + * @returns {Boolean} + * @api public + */ + + XHR.xdomainCheck = function (socket) { + return XHR.check(socket, true); + }; + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io) { + + /** + * Expose constructor. + */ + + exports.htmlfile = HTMLFile; + + /** + * The HTMLFile transport creates a `forever iframe` based transport + * for Internet Explorer. Regular forever iframe implementations will + * continuously trigger the browsers buzy indicators. If the forever iframe + * is created inside a `htmlfile` these indicators will not be trigged. + * + * @constructor + * @extends {io.Transport.XHR} + * @api public + */ + + function HTMLFile (socket) { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(HTMLFile, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + HTMLFile.prototype.name = 'htmlfile'; + + /** + * Creates a new Ac...eX `htmlfile` with a forever loading iframe + * that can be used to listen to messages. Inside the generated + * `htmlfile` a reference will be made to the HTMLFile transport. + * + * @api private + */ + + HTMLFile.prototype.get = function () { + this.doc = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + this.doc.open(); + this.doc.write('<html></html>'); + this.doc.close(); + this.doc.parentWindow.s = this; + + var iframeC = this.doc.createElement('div'); + iframeC.className = 'socketio'; + + this.doc.body.appendChild(iframeC); + this.iframe = this.doc.createElement('iframe'); + + iframeC.appendChild(this.iframe); + + var self = this + , query = io.util.query(this.socket.options.query, 't='+ +new Date); + + this.iframe.src = this.prepareUrl() + query; + + io.util.on(window, 'unload', function () { + self.destroy(); + }); + }; + + /** + * The Socket.IO server will write script tags inside the forever + * iframe, this function will be used as callback for the incoming + * information. + * + * @param {String} data The message + * @param {document} doc Reference to the context + * @api private + */ + + HTMLFile.prototype._ = function (data, doc) { + // unescape all forward slashes. see GH-1251 + data = data.replace(/\\\//g, '/'); + this.onData(data); + try { + var script = doc.getElementsByTagName('script')[0]; + script.parentNode.removeChild(script); + } catch (e) { } + }; + + /** + * Destroy the established connection, iframe and `htmlfile`. + * And calls the `CollectGarbage` function of Internet Explorer + * to release the memory. + * + * @api private + */ + + HTMLFile.prototype.destroy = function () { + if (this.iframe){ + try { + this.iframe.src = 'about:blank'; + } catch(e){} + + this.doc = null; + this.iframe.parentNode.removeChild(this.iframe); + this.iframe = null; + + CollectGarbage(); + } + }; + + /** + * Disconnects the established connection. + * + * @returns {Transport} Chaining. + * @api public + */ + + HTMLFile.prototype.close = function () { + this.destroy(); + return io.Transport.XHR.prototype.close.call(this); + }; + + /** + * Checks if the browser supports this transport. The browser + * must have an `Ac...eXObject` implementation. + * + * @return {Boolean} + * @api public + */ + + HTMLFile.check = function (socket) { + if (typeof window != "undefined" && (['Active'].concat('Object').join('X')) in window){ + try { + var a = new window[(['Active'].concat('Object').join('X'))]('htmlfile'); + return a && io.Transport.XHR.check(socket); + } catch(e){} + } + return false; + }; + + /** + * Check if cross domain requests are supported. + * + * @returns {Boolean} + * @api public + */ + + HTMLFile.xdomainCheck = function () { + // we can probably do handling for sub-domains, we should + // test that it's cross domain but a subdomain here + return false; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('htmlfile'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + + /** + * Expose constructor. + */ + + exports['xhr-polling'] = XHRPolling; + + /** + * The XHR-polling transport uses long polling XHR requests to create a + * "persistent" connection with the server. + * + * @constructor + * @api public + */ + + function XHRPolling () { + io.Transport.XHR.apply(this, arguments); + }; + + /** + * Inherits from XHR transport. + */ + + io.util.inherit(XHRPolling, io.Transport.XHR); + + /** + * Merge the properties from XHR transport + */ + + io.util.merge(XHRPolling, io.Transport.XHR); + + /** + * Transport name + * + * @api public + */ + + XHRPolling.prototype.name = 'xhr-polling'; + + /** + * Indicates whether heartbeats is enabled for this transport + * + * @api private + */ + + XHRPolling.prototype.heartbeats = function () { + return false; + }; + + /** + * Establish a connection, for iPhone and Android this will be done once the page + * is loaded. + * + * @returns {Transport} Chaining. + * @api public + */ + + XHRPolling.prototype.open = function () { + var self = this; + + io.Transport.XHR.prototype.open.call(self); + return false; + }; + + /** + * Starts a XHR request to wait for incoming messages. + * + * @api private + */ + + function empty () {}; + + XHRPolling.prototype.get = function () { + if (!this.isOpen) return; + + var self = this; + + function stateChange () { + if (this.readyState == 4) { + this.onreadystatechange = empty; + + if (this.status == 200) { + self.onData(this.responseText); + self.get(); + } else { + self.onClose(); + } + } + }; + + function onload () { + this.onload = empty; + this.onerror = empty; + self.retryCounter = 1; + self.onData(this.responseText); + self.get(); + }; + + function onerror () { + self.retryCounter ++; + if(!self.retryCounter || self.retryCounter > 3) { + self.onClose(); + } else { + self.get(); + } + }; + + this.xhr = this.request(); + + if (global.XDomainRequest && this.xhr instanceof XDomainRequest) { + this.xhr.onload = onload; + this.xhr.onerror = onerror; + } else { + this.xhr.onreadystatechange = stateChange; + } + + this.xhr.send(null); + }; + + /** + * Handle the unclean close behavior. + * + * @api private + */ + + XHRPolling.prototype.onClose = function () { + io.Transport.XHR.prototype.onClose.call(this); + + if (this.xhr) { + this.xhr.onreadystatechange = this.xhr.onload = this.xhr.onerror = empty; + try { + this.xhr.abort(); + } catch(e){} + this.xhr = null; + } + }; + + /** + * Webkit based browsers show a infinit spinner when you start a XHR request + * before the browsers onload event is called so we need to defer opening of + * the transport until the onload event is called. Wrapping the cb in our + * defer method solve this. + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + XHRPolling.prototype.ready = function (socket, fn) { + var self = this; + + io.util.defer(function () { + fn.call(self); + }); + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('xhr-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +/** + * socket.io + * Copyright(c) 2011 LearnBoost <dev@learnboost.com> + * MIT Licensed + */ + +(function (exports, io, global) { + /** + * There is a way to hide the loading indicator in Firefox. If you create and + * remove a iframe it will stop showing the current loading indicator. + * Unfortunately we can't feature detect that and UA sniffing is evil. + * + * @api private + */ + + var indicator = global.document && "MozAppearance" in + global.document.documentElement.style; + + /** + * Expose constructor. + */ + + exports['jsonp-polling'] = JSONPPolling; + + /** + * The JSONP transport creates an persistent connection by dynamically + * inserting a script tag in the page. This script tag will receive the + * information of the Socket.IO server. When new information is received + * it creates a new script tag for the new data stream. + * + * @constructor + * @extends {io.Transport.xhr-polling} + * @api public + */ + + function JSONPPolling (socket) { + io.Transport['xhr-polling'].apply(this, arguments); + + this.index = io.j.length; + + var self = this; + + io.j.push(function (msg) { + self._(msg); + }); + }; + + /** + * Inherits from XHR polling transport. + */ + + io.util.inherit(JSONPPolling, io.Transport['xhr-polling']); + + /** + * Transport name + * + * @api public + */ + + JSONPPolling.prototype.name = 'jsonp-polling'; + + /** + * Posts a encoded message to the Socket.IO server using an iframe. + * The iframe is used because script tags can create POST based requests. + * The iframe is positioned outside of the view so the user does not + * notice it's existence. + * + * @param {String} data A encoded message. + * @api private + */ + + JSONPPolling.prototype.post = function (data) { + var self = this + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (!this.form) { + var form = document.createElement('form') + , area = document.createElement('textarea') + , id = this.iframeId = 'socketio_iframe_' + this.index + , iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '0px'; + form.style.left = '0px'; + form.style.display = 'none'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.prepareUrl() + query; + + function complete () { + initIframe(); + self.socket.setBuffer(false); + }; + + function initIframe () { + if (self.iframe) { + self.form.removeChild(self.iframe); + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + iframe = document.createElement('<iframe name="'+ self.iframeId +'">'); + } catch (e) { + iframe = document.createElement('iframe'); + iframe.name = self.iframeId; + } + + iframe.id = self.iframeId; + + self.form.appendChild(iframe); + self.iframe = iframe; + }; + + initIframe(); + + // we temporarily stringify until we figure out how to prevent + // browsers from turning `\n` into `\r\n` in form inputs + this.area.value = io.JSON.stringify(data); + + try { + this.form.submit(); + } catch(e) {} + + if (this.iframe.attachEvent) { + iframe.onreadystatechange = function () { + if (self.iframe.readyState == 'complete') { + complete(); + } + }; + } else { + this.iframe.onload = complete; + } + + this.socket.setBuffer(true); + }; + + /** + * Creates a new JSONP poll that can be used to listen + * for messages from the Socket.IO server. + * + * @api private + */ + + JSONPPolling.prototype.get = function () { + var self = this + , script = document.createElement('script') + , query = io.util.query( + this.socket.options.query + , 't='+ (+new Date) + '&i=' + this.index + ); + + if (this.script) { + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + script.async = true; + script.src = this.prepareUrl() + query; + script.onerror = function () { + self.onClose(); + }; + + var insertAt = document.getElementsByTagName('script')[0]; + insertAt.parentNode.insertBefore(script, insertAt); + this.script = script; + + if (indicator) { + setTimeout(function () { + var iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + document.body.removeChild(iframe); + }, 100); + } + }; + + /** + * Callback function for the incoming message stream from the Socket.IO server. + * + * @param {String} data The message + * @api private + */ + + JSONPPolling.prototype._ = function (msg) { + this.onData(msg); + if (this.isOpen) { + this.get(); + } + return this; + }; + + /** + * The indicator hack only works after onload + * + * @param {Socket} socket The socket instance that needs a transport + * @param {Function} fn The callback + * @api private + */ + + JSONPPolling.prototype.ready = function (socket, fn) { + var self = this; + if (!indicator) return fn.call(this); + + io.util.load(function () { + fn.call(self); + }); + }; + + /** + * Checks if browser supports this transport. + * + * @return {Boolean} + * @api public + */ + + JSONPPolling.check = function () { + return 'document' in global; + }; + + /** + * Check if cross domain requests are supported + * + * @returns {Boolean} + * @api public + */ + + JSONPPolling.xdomainCheck = function () { + return true; + }; + + /** + * Add the transport to your public io.transports array. + * + * @api private + */ + + io.transports.push('jsonp-polling'); + +})( + 'undefined' != typeof io ? io.Transport : module.exports + , 'undefined' != typeof io ? io : module.parent.exports + , this +); + +if (typeof define === "function" && define.amd) { + define("socket.io", [], function () { return io; }); +} +})(); +/* @source lib/jquery.tooltipster.js */; + +/* + + Tooltipster 3.3.0 | 2014-11-08 + A rockin' custom tooltip jQuery plugin + + Developed by Caleb Jacob under the MIT license http://opensource.org/licenses/MIT + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + */ + +;(function ($, window, document) { + + var pluginName = "tooltipster", + defaults = { + animation: 'fade', + arrow: true, + arrowColor: '', + autoClose: true, + content: null, + contentAsHTML: false, + contentCloning: true, + debug: true, + delay: 200, + minWidth: 0, + maxWidth: null, + functionInit: function(origin, content) {}, + functionBefore: function(origin, continueTooltip) { + continueTooltip(); + }, + functionReady: function(origin, tooltip) {}, + functionAfter: function(origin) {}, + hideOnClick: false, + icon: '(?)', + iconCloning: true, + iconDesktop: false, + iconTouch: false, + iconTheme: 'tooltipster-icon', + interactive: false, + interactiveTolerance: 350, + multiple: false, + offsetX: 0, + offsetY: 0, + onlyOne: false, + position: 'top', + positionTracker: false, + positionTrackerCallback: function(origin){ + // the default tracker callback will close the tooltip when the trigger is + // 'hover' (see https://github.com/iamceege/tooltipster/pull/253) + if(this.option('trigger') == 'hover' && this.option('autoClose')) { + this.hide(); + } + }, + restoration: 'current', + speed: 350, + timer: 0, + theme: 'tooltipster-default', + touchDevices: true, + trigger: 'hover', + updateAnimation: true + }; + + function Plugin(element, options) { + + // list of instance variables + + this.bodyOverflowX; + // stack of custom callbacks provided as parameters to API methods + this.callbacks = { + hide: [], + show: [] + }; + this.checkInterval = null; + // this will be the user content shown in the tooltip. A capital "C" is used because there is also a method called content() + this.Content; + // this is the original element which is being applied the tooltipster plugin + this.$el = $(element); + // this will be the element which triggers the appearance of the tooltip on hover/click/custom events. + // it will be the same as this.$el if icons are not used (see in the options), otherwise it will correspond to the created icon + this.$elProxy; + this.elProxyPosition; + this.enabled = true; + this.options = $.extend({}, defaults, options); + this.mouseIsOverProxy = false; + // a unique namespace per instance, for easy selective unbinding + this.namespace = 'tooltipster-'+ Math.round(Math.random()*100000); + // Status (capital S) can be either : appearing, shown, disappearing, hidden + this.Status = 'hidden'; + this.timerHide = null; + this.timerShow = null; + // this will be the tooltip element (jQuery wrapped HTML element) + this.$tooltip; + + // for backward compatibility + this.options.iconTheme = this.options.iconTheme.replace('.', ''); + this.options.theme = this.options.theme.replace('.', ''); + + // launch + + this._init(); + } + + Plugin.prototype = { + + _init: function() { + + var self = this; + + // disable the plugin on old browsers (including IE7 and lower) + if (document.querySelector) { + + // note : the content is null (empty) by default and can stay that way if the plugin remains initialized but not fed any content. The tooltip will just not appear. + + // let's save the initial value of the title attribute for later restoration if need be. + var initialTitle = null; + // it will already have been saved in case of multiple tooltips + if (self.$el.data('tooltipster-initialTitle') === undefined) { + + initialTitle = self.$el.attr('title'); + + // we do not want initialTitle to have the value "undefined" because of how jQuery's .data() method works + if (initialTitle === undefined) initialTitle = null; + + self.$el.data('tooltipster-initialTitle', initialTitle); + } + + // if content is provided in the options, its has precedence over the title attribute. + // Note : an empty string is considered content, only 'null' represents the absence of content. + // Also, an existing title="" attribute will result in an empty string content + if (self.options.content !== null){ + self._content_set(self.options.content); + } + else { + self._content_set(initialTitle); + } + + var c = self.options.functionInit.call(self.$el, self.$el, self.Content); + if(typeof c !== 'undefined') self._content_set(c); + + self.$el + // strip the title off of the element to prevent the default tooltips from popping up + .removeAttr('title') + // to be able to find all instances on the page later (upon window events in particular) + .addClass('tooltipstered'); + + // detect if we're changing the tooltip origin to an icon + // note about this condition : if the device has touch capability and self.options.iconTouch is false, you'll have no icons event though you may consider your device as a desktop if it also has a mouse. Not sure why someone would have this use case though. + if ((!deviceHasTouchCapability && self.options.iconDesktop) || (deviceHasTouchCapability && self.options.iconTouch)) { + + // TODO : the tooltip should be automatically be given an absolute position to be near the origin. Otherwise, when the origin is floating or what, it's going to be nowhere near it and disturb the position flow of the page elements. It will imply that the icon also detects when its origin moves, to follow it : not trivial. + // Until it's done, the icon feature does not really make sense since the user still has most of the work to do by himself + + // if the icon provided is in the form of a string + if(typeof self.options.icon === 'string'){ + // wrap it in a span with the icon class + self.$elProxy = $('<span class="'+ self.options.iconTheme +'"></span>'); + self.$elProxy.text(self.options.icon); + } + // if it is an object (sensible choice) + else { + // (deep) clone the object if iconCloning == true, to make sure every instance has its own proxy. We use the icon without wrapping, no need to. We do not give it a class either, as the user will undoubtedly style the object on his own and since our css properties may conflict with his own + if (self.options.iconCloning) self.$elProxy = self.options.icon.clone(true); + else self.$elProxy = self.options.icon; + } + + self.$elProxy.insertAfter(self.$el); + } + else { + self.$elProxy = self.$el; + } + + // for 'click' and 'hover' triggers : bind on events to open the tooltip. Closing is now handled in _showNow() because of its bindings. + // Notes about touch events : + // - mouseenter, mouseleave and clicks happen even on pure touch devices because they are emulated. deviceIsPureTouch() is a simple attempt to detect them. + // - on hybrid devices, we do not prevent touch gesture from opening tooltips. It would be too complex to differentiate real mouse events from emulated ones. + // - we check deviceIsPureTouch() at each event rather than prior to binding because the situation may change during browsing + if (self.options.trigger == 'hover') { + + // these binding are for mouse interaction only + self.$elProxy + .on('mouseenter.'+ self.namespace, function() { + if (!deviceIsPureTouch() || self.options.touchDevices) { + self.mouseIsOverProxy = true; + self._show(); + } + }) + .on('mouseleave.'+ self.namespace, function() { + if (!deviceIsPureTouch() || self.options.touchDevices) { + self.mouseIsOverProxy = false; + } + }); + + // for touch interaction only + if (deviceHasTouchCapability && self.options.touchDevices) { + + // for touch devices, we immediately display the tooltip because we cannot rely on mouseleave to handle the delay + self.$elProxy.on('touchstart.'+ self.namespace, function() { + self._showNow(); + }); + } + } + else if (self.options.trigger == 'click') { + + // note : for touch devices, we do not bind on touchstart, we only rely on the emulated clicks (triggered by taps) + self.$elProxy.on('click.'+ self.namespace, function() { + if (!deviceIsPureTouch() || self.options.touchDevices) { + self._show(); + } + }); + } + } + }, + + // this function will schedule the opening of the tooltip after the delay, if there is one + _show: function() { + + var self = this; + + if (self.Status != 'shown' && self.Status != 'appearing') { + + if (self.options.delay) { + self.timerShow = setTimeout(function(){ + + // for hover trigger, we check if the mouse is still over the proxy, otherwise we do not show anything + if (self.options.trigger == 'click' || (self.options.trigger == 'hover' && self.mouseIsOverProxy)) { + self._showNow(); + } + }, self.options.delay); + } + else self._showNow(); + } + }, + + // this function will open the tooltip right away + _showNow: function(callback) { + + var self = this; + + // call our constructor custom function before continuing + self.options.functionBefore.call(self.$el, self.$el, function() { + + // continue only if the tooltip is enabled and has any content + if (self.enabled && self.Content !== null) { + + // save the method callback and cancel hide method callbacks + if (callback) self.callbacks.show.push(callback); + self.callbacks.hide = []; + + //get rid of any appearance timer + clearTimeout(self.timerShow); + self.timerShow = null; + clearTimeout(self.timerHide); + self.timerHide = null; + + // if we only want one tooltip open at a time, close all auto-closing tooltips currently open and not already disappearing + if (self.options.onlyOne) { + $('.tooltipstered').not(self.$el).each(function(i,el) { + + var $el = $(el), + nss = $el.data('tooltipster-ns'); + + // iterate on all tooltips of the element + $.each(nss, function(i, ns){ + var instance = $el.data(ns), + // we have to use the public methods here + s = instance.status(), + ac = instance.option('autoClose'); + + if (s !== 'hidden' && s !== 'disappearing' && ac) { + instance.hide(); + } + }); + }); + } + + var finish = function() { + self.Status = 'shown'; + + // trigger any show method custom callbacks and reset them + $.each(self.callbacks.show, function(i,c) { c.call(self.$el); }); + self.callbacks.show = []; + }; + + // if this origin already has its tooltip open + if (self.Status !== 'hidden') { + + // the timer (if any) will start (or restart) right now + var extraTime = 0; + + // if it was disappearing, cancel that + if (self.Status === 'disappearing') { + + self.Status = 'appearing'; + + if (supportsTransitions()) { + + self.$tooltip + .clearQueue() + .removeClass('tooltipster-dying') + .addClass('tooltipster-'+ self.options.animation +'-show'); + + if (self.options.speed > 0) self.$tooltip.delay(self.options.speed); + + self.$tooltip.queue(finish); + } + else { + // in case the tooltip was currently fading out, bring it back to life + self.$tooltip + .stop() + .fadeIn(finish); + } + } + // if the tooltip is already open, we still need to trigger the method custom callback + else if(self.Status === 'shown') { + finish(); + } + } + // if the tooltip isn't already open, open that sucker up! + else { + + self.Status = 'appearing'; + + // the timer (if any) will start when the tooltip has fully appeared after its transition + var extraTime = self.options.speed; + + // disable horizontal scrollbar to keep overflowing tooltips from jacking with it and then restore it to its previous value + self.bodyOverflowX = $('body').css('overflow-x'); + $('body').css('overflow-x', 'hidden'); + + // get some other settings related to building the tooltip + var animation = 'tooltipster-' + self.options.animation, + animationSpeed = '-webkit-transition-duration: '+ self.options.speed +'ms; -webkit-animation-duration: '+ self.options.speed +'ms; -moz-transition-duration: '+ self.options.speed +'ms; -moz-animation-duration: '+ self.options.speed +'ms; -o-transition-duration: '+ self.options.speed +'ms; -o-animation-duration: '+ self.options.speed +'ms; -ms-transition-duration: '+ self.options.speed +'ms; -ms-animation-duration: '+ self.options.speed +'ms; transition-duration: '+ self.options.speed +'ms; animation-duration: '+ self.options.speed +'ms;', + minWidth = self.options.minWidth ? 'min-width:'+ Math.round(self.options.minWidth) +'px;' : '', + maxWidth = self.options.maxWidth ? 'max-width:'+ Math.round(self.options.maxWidth) +'px;' : '', + pointerEvents = self.options.interactive ? 'pointer-events: auto;' : ''; + + // build the base of our tooltip + self.$tooltip = $('<div class="tooltipster-base '+ self.options.theme +'" style="'+ minWidth +' '+ maxWidth +' '+ pointerEvents +' '+ animationSpeed +'"><div class="tooltipster-content"></div></div>'); + + // only add the animation class if the user has a browser that supports animations + if (supportsTransitions()) self.$tooltip.addClass(animation); + + // insert the content + self._content_insert(); + + // attach + self.$tooltip.appendTo('body'); + + // do all the crazy calculations and positioning + self.reposition(); + + // call our custom callback since the content of the tooltip is now part of the DOM + self.options.functionReady.call(self.$el, self.$el, self.$tooltip); + + // animate in the tooltip + if (supportsTransitions()) { + + self.$tooltip.addClass(animation + '-show'); + + if(self.options.speed > 0) self.$tooltip.delay(self.options.speed); + + self.$tooltip.queue(finish); + } + else { + self.$tooltip.css('display', 'none').fadeIn(self.options.speed, finish); + } + + // will check if our tooltip origin is removed while the tooltip is shown + self._interval_set(); + + // reposition on scroll (otherwise position:fixed element's tooltips will move away form their origin) and on resize (in case position can/has to be changed) + $(window).on('scroll.'+ self.namespace +' resize.'+ self.namespace, function() { + self.reposition(); + }); + + // auto-close bindings + if (self.options.autoClose) { + + // in case a listener is already bound for autoclosing (mouse or touch, hover or click), unbind it first + $('body').off('.'+ self.namespace); + + // here we'll have to set different sets of bindings for both touch and mouse + if (self.options.trigger == 'hover') { + + // if the user touches the body, hide + if (deviceHasTouchCapability) { + // timeout 0 : explanation below in click section + setTimeout(function() { + // we don't want to bind on click here because the initial touchstart event has not yet triggered its click event, which is thus about to happen + $('body').on('touchstart.'+ self.namespace, function() { + self.hide(); + }); + }, 0); + } + + // if we have to allow interaction + if (self.options.interactive) { + + // touch events inside the tooltip must not close it + if (deviceHasTouchCapability) { + self.$tooltip.on('touchstart.'+ self.namespace, function(event) { + event.stopPropagation(); + }); + } + + // as for mouse interaction, we get rid of the tooltip only after the mouse has spent some time out of it + var tolerance = null; + + self.$elProxy.add(self.$tooltip) + // hide after some time out of the proxy and the tooltip + .on('mouseleave.'+ self.namespace + '-autoClose', function() { + clearTimeout(tolerance); + tolerance = setTimeout(function(){ + self.hide(); + }, self.options.interactiveTolerance); + }) + // suspend timeout when the mouse is over the proxy or the tooltip + .on('mouseenter.'+ self.namespace + '-autoClose', function() { + clearTimeout(tolerance); + }); + } + // if this is a non-interactive tooltip, get rid of it if the mouse leaves + else { + self.$elProxy.on('mouseleave.'+ self.namespace + '-autoClose', function() { + self.hide(); + }); + } + + // close the tooltip when the proxy gets a click (common behavior of native tooltips) + if (self.options.hideOnClick) { + + self.$elProxy.on('click.'+ self.namespace + '-autoClose', function() { + self.hide(); + }); + } + } + // here we'll set the same bindings for both clicks and touch on the body to hide the tooltip + else if(self.options.trigger == 'click'){ + + // use a timeout to prevent immediate closing if the method was called on a click event and if options.delay == 0 (because of bubbling) + setTimeout(function() { + $('body').on('click.'+ self.namespace +' touchstart.'+ self.namespace, function() { + self.hide(); + }); + }, 0); + + // if interactive, we'll stop the events that were emitted from inside the tooltip to stop autoClosing + if (self.options.interactive) { + + // note : the touch events will just not be used if the plugin is not enabled on touch devices + self.$tooltip.on('click.'+ self.namespace +' touchstart.'+ self.namespace, function(event) { + event.stopPropagation(); + }); + } + } + } + } + + // if we have a timer set, let the countdown begin + if (self.options.timer > 0) { + + self.timerHide = setTimeout(function() { + self.timerHide = null; + self.hide(); + }, self.options.timer + extraTime); + } + } + }); + }, + + _interval_set: function() { + + var self = this; + + self.checkInterval = setInterval(function() { + + // if the tooltip and/or its interval should be stopped + if ( + // if the origin has been removed + $('body').find(self.$el).length === 0 + // if the elProxy has been removed + || $('body').find(self.$elProxy).length === 0 + // if the tooltip has been closed + || self.Status == 'hidden' + // if the tooltip has somehow been removed + || $('body').find(self.$tooltip).length === 0 + ) { + // remove the tooltip if it's still here + if (self.Status == 'shown' || self.Status == 'appearing') self.hide(); + + // clear this interval as it is no longer necessary + self._interval_cancel(); + } + // if everything is alright + else { + // compare the former and current positions of the elProxy to reposition the tooltip if need be + if(self.options.positionTracker){ + + var p = self._repositionInfo(self.$elProxy), + identical = false; + + // compare size first (a change requires repositioning too) + if(areEqual(p.dimension, self.elProxyPosition.dimension)){ + + // for elements with a fixed position, we track the top and left properties (relative to window) + if(self.$elProxy.css('position') === 'fixed'){ + if(areEqual(p.position, self.elProxyPosition.position)) identical = true; + } + // otherwise, track total offset (relative to document) + else { + if(areEqual(p.offset, self.elProxyPosition.offset)) identical = true; + } + } + + if(!identical){ + self.reposition(); + self.options.positionTrackerCallback.call(self, self.$el); + } + } + } + }, 200); + }, + + _interval_cancel: function() { + clearInterval(this.checkInterval); + // clean delete + this.checkInterval = null; + }, + + _content_set: function(content) { + // clone if asked. Cloning the object makes sure that each instance has its own version of the content (in case a same object were provided for several instances) + // reminder : typeof null === object + if (typeof content === 'object' && content !== null && this.options.contentCloning) { + content = content.clone(true); + } + this.Content = content; + }, + + _content_insert: function() { + + var self = this, + $d = this.$tooltip.find('.tooltipster-content'); + + if (typeof self.Content === 'string' && !self.options.contentAsHTML) { + $d.text(self.Content); + } + else { + $d + .empty() + .append(self.Content); + } + }, + + _update: function(content) { + + var self = this; + + // change the content + self._content_set(content); + + if (self.Content !== null) { + + // update the tooltip if it is open + if (self.Status !== 'hidden') { + + // reset the content in the tooltip + self._content_insert(); + + // reposition and resize the tooltip + self.reposition(); + + // if we want to play a little animation showing the content changed + if (self.options.updateAnimation) { + + if (supportsTransitions()) { + + self.$tooltip.css({ + 'width': '', + '-webkit-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms', + '-moz-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms', + '-o-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms', + '-ms-transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms', + 'transition': 'all ' + self.options.speed + 'ms, width 0ms, height 0ms, left 0ms, top 0ms' + }).addClass('tooltipster-content-changing'); + + // reset the CSS transitions and finish the change animation + setTimeout(function() { + + if(self.Status != 'hidden'){ + + self.$tooltip.removeClass('tooltipster-content-changing'); + + // after the changing animation has completed, reset the CSS transitions + setTimeout(function() { + + if(self.Status !== 'hidden'){ + self.$tooltip.css({ + '-webkit-transition': self.options.speed + 'ms', + '-moz-transition': self.options.speed + 'ms', + '-o-transition': self.options.speed + 'ms', + '-ms-transition': self.options.speed + 'ms', + 'transition': self.options.speed + 'ms' + }); + } + }, self.options.speed); + } + }, self.options.speed); + } + else { + self.$tooltip.fadeTo(self.options.speed, 0.5, function() { + if(self.Status != 'hidden'){ + self.$tooltip.fadeTo(self.options.speed, 1); + } + }); + } + } + } + } + else { + self.hide(); + } + }, + + _repositionInfo: function($el) { + return { + dimension: { + height: $el.outerHeight(false), + width: $el.outerWidth(false) + }, + offset: $el.offset(), + position: { + left: parseInt($el.css('left')), + top: parseInt($el.css('top')) + } + }; + }, + + hide: function(callback) { + + var self = this; + + // save the method custom callback and cancel any show method custom callbacks + if (callback) self.callbacks.hide.push(callback); + self.callbacks.show = []; + + // get rid of any appearance timeout + clearTimeout(self.timerShow); + self.timerShow = null; + clearTimeout(self.timerHide); + self.timerHide = null; + + var finishCallbacks = function() { + // trigger any hide method custom callbacks and reset them + $.each(self.callbacks.hide, function(i,c) { c.call(self.$el); }); + self.callbacks.hide = []; + }; + + // hide + if (self.Status == 'shown' || self.Status == 'appearing') { + + self.Status = 'disappearing'; + + var finish = function() { + + self.Status = 'hidden'; + + // detach our content object first, so the next jQuery's remove() call does not unbind its event handlers + if (typeof self.Content == 'object' && self.Content !== null) { + self.Content.detach(); + } + + self.$tooltip.remove(); + self.$tooltip = null; + + // unbind orientationchange, scroll and resize listeners + $(window).off('.'+ self.namespace); + + $('body') + // unbind any auto-closing click/touch listeners + .off('.'+ self.namespace) + .css('overflow-x', self.bodyOverflowX); + + // unbind any auto-closing click/touch listeners + $('body').off('.'+ self.namespace); + + // unbind any auto-closing hover listeners + self.$elProxy.off('.'+ self.namespace + '-autoClose'); + + // call our constructor custom callback function + self.options.functionAfter.call(self.$el, self.$el); + + // call our method custom callbacks functions + finishCallbacks(); + }; + + if (supportsTransitions()) { + + self.$tooltip + .clearQueue() + .removeClass('tooltipster-' + self.options.animation + '-show') + // for transitions only + .addClass('tooltipster-dying'); + + if(self.options.speed > 0) self.$tooltip.delay(self.options.speed); + + self.$tooltip.queue(finish); + } + else { + self.$tooltip + .stop() + .fadeOut(self.options.speed, finish); + } + } + // if the tooltip is already hidden, we still need to trigger the method custom callback + else if(self.Status == 'hidden') { + finishCallbacks(); + } + + return self; + }, + + // the public show() method is actually an alias for the private showNow() method + show: function(callback) { + this._showNow(callback); + return this; + }, + + // 'update' is deprecated in favor of 'content' but is kept for backward compatibility + update: function(c) { + return this.content(c); + }, + content: function(c) { + // getter method + if(typeof c === 'undefined'){ + return this.Content; + } + // setter method + else { + this._update(c); + return this; + } + }, + + reposition: function() { + + var self = this; + + // in case the tooltip has been removed from DOM manually + if ($('body').find(self.$tooltip).length !== 0) { + + // reset width + self.$tooltip.css('width', ''); + + // find variables to determine placement + self.elProxyPosition = self._repositionInfo(self.$elProxy); + var arrowReposition = null, + windowWidth = $(window).width(), + // shorthand + proxy = self.elProxyPosition, + tooltipWidth = self.$tooltip.outerWidth(false), + tooltipInnerWidth = self.$tooltip.innerWidth() + 1, // this +1 stops FireFox from sometimes forcing an additional text line + tooltipHeight = self.$tooltip.outerHeight(false); + + // if this is an <area> tag inside a <map>, all hell breaks loose. Recalculate all the measurements based on coordinates + if (self.$elProxy.is('area')) { + var areaShape = self.$elProxy.attr('shape'), + mapName = self.$elProxy.parent().attr('name'), + map = $('img[usemap="#'+ mapName +'"]'), + mapOffsetLeft = map.offset().left, + mapOffsetTop = map.offset().top, + areaMeasurements = self.$elProxy.attr('coords') !== undefined ? self.$elProxy.attr('coords').split(',') : undefined; + + if (areaShape == 'circle') { + var areaLeft = parseInt(areaMeasurements[0]), + areaTop = parseInt(areaMeasurements[1]), + areaWidth = parseInt(areaMeasurements[2]); + proxy.dimension.height = areaWidth * 2; + proxy.dimension.width = areaWidth * 2; + proxy.offset.top = mapOffsetTop + areaTop - areaWidth; + proxy.offset.left = mapOffsetLeft + areaLeft - areaWidth; + } + else if (areaShape == 'rect') { + var areaLeft = parseInt(areaMeasurements[0]), + areaTop = parseInt(areaMeasurements[1]), + areaRight = parseInt(areaMeasurements[2]), + areaBottom = parseInt(areaMeasurements[3]); + proxy.dimension.height = areaBottom - areaTop; + proxy.dimension.width = areaRight - areaLeft; + proxy.offset.top = mapOffsetTop + areaTop; + proxy.offset.left = mapOffsetLeft + areaLeft; + } + else if (areaShape == 'poly') { + var areaXs = [], + areaYs = [], + areaSmallestX = 0, + areaSmallestY = 0, + areaGreatestX = 0, + areaGreatestY = 0, + arrayAlternate = 'even'; + + for (var i = 0; i < areaMeasurements.length; i++) { + var areaNumber = parseInt(areaMeasurements[i]); + + if (arrayAlternate == 'even') { + if (areaNumber > areaGreatestX) { + areaGreatestX = areaNumber; + if (i === 0) { + areaSmallestX = areaGreatestX; + } + } + + if (areaNumber < areaSmallestX) { + areaSmallestX = areaNumber; + } + + arrayAlternate = 'odd'; + } + else { + if (areaNumber > areaGreatestY) { + areaGreatestY = areaNumber; + if (i == 1) { + areaSmallestY = areaGreatestY; + } + } + + if (areaNumber < areaSmallestY) { + areaSmallestY = areaNumber; + } + + arrayAlternate = 'even'; + } + } + + proxy.dimension.height = areaGreatestY - areaSmallestY; + proxy.dimension.width = areaGreatestX - areaSmallestX; + proxy.offset.top = mapOffsetTop + areaSmallestY; + proxy.offset.left = mapOffsetLeft + areaSmallestX; + } + else { + proxy.dimension.height = map.outerHeight(false); + proxy.dimension.width = map.outerWidth(false); + proxy.offset.top = mapOffsetTop; + proxy.offset.left = mapOffsetLeft; + } + } + + // our function and global vars for positioning our tooltip + var myLeft = 0, + myLeftMirror = 0, + myTop = 0, + offsetY = parseInt(self.options.offsetY), + offsetX = parseInt(self.options.offsetX), + // this is the arrow position that will eventually be used. It may differ from the position option if the tooltip cannot be displayed in this position + practicalPosition = self.options.position; + + // a function to detect if the tooltip is going off the screen horizontally. If so, reposition the crap out of it! + function dontGoOffScreenX() { + + var windowLeft = $(window).scrollLeft(); + + // if the tooltip goes off the left side of the screen, line it up with the left side of the window + if((myLeft - windowLeft) < 0) { + arrowReposition = myLeft - windowLeft; + myLeft = windowLeft; + } + + // if the tooltip goes off the right of the screen, line it up with the right side of the window + if (((myLeft + tooltipWidth) - windowLeft) > windowWidth) { + arrowReposition = myLeft - ((windowWidth + windowLeft) - tooltipWidth); + myLeft = (windowWidth + windowLeft) - tooltipWidth; + } + } + + // a function to detect if the tooltip is going off the screen vertically. If so, switch to the opposite! + function dontGoOffScreenY(switchTo, switchFrom) { + // if it goes off the top off the page + if(((proxy.offset.top - $(window).scrollTop() - tooltipHeight - offsetY - 12) < 0) && (switchFrom.indexOf('top') > -1)) { + practicalPosition = switchTo; + } + + // if it goes off the bottom of the page + if (((proxy.offset.top + proxy.dimension.height + tooltipHeight + 12 + offsetY) > ($(window).scrollTop() + $(window).height())) && (switchFrom.indexOf('bottom') > -1)) { + practicalPosition = switchTo; + myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12; + } + } + + if(practicalPosition == 'top') { + var leftDifference = (proxy.offset.left + tooltipWidth) - (proxy.offset.left + proxy.dimension.width); + myLeft = (proxy.offset.left + offsetX) - (leftDifference / 2); + myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12; + dontGoOffScreenX(); + dontGoOffScreenY('bottom', 'top'); + } + + if(practicalPosition == 'top-left') { + myLeft = proxy.offset.left + offsetX; + myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12; + dontGoOffScreenX(); + dontGoOffScreenY('bottom-left', 'top-left'); + } + + if(practicalPosition == 'top-right') { + myLeft = (proxy.offset.left + proxy.dimension.width + offsetX) - tooltipWidth; + myTop = (proxy.offset.top - tooltipHeight) - offsetY - 12; + dontGoOffScreenX(); + dontGoOffScreenY('bottom-right', 'top-right'); + } + + if(practicalPosition == 'bottom') { + var leftDifference = (proxy.offset.left + tooltipWidth) - (proxy.offset.left + proxy.dimension.width); + myLeft = proxy.offset.left - (leftDifference / 2) + offsetX; + myTop = (proxy.offset.top + proxy.dimension.height) + offsetY + 12; + dontGoOffScreenX(); + dontGoOffScreenY('top', 'bottom'); + } + + if(practicalPosition == 'bottom-left') { + myLeft = proxy.offset.left + offsetX; + myTop = (proxy.offset.top + proxy.dimension.height) + offsetY + 12; + dontGoOffScreenX(); + dontGoOffScreenY('top-left', 'bottom-left'); + } + + if(practicalPosition == 'bottom-right') { + myLeft = (proxy.offset.left + proxy.dimension.width + offsetX) - tooltipWidth; + myTop = (proxy.offset.top + proxy.dimension.height) + offsetY + 12; + dontGoOffScreenX(); + dontGoOffScreenY('top-right', 'bottom-right'); + } + + if(practicalPosition == 'left') { + myLeft = proxy.offset.left - offsetX - tooltipWidth - 12; + myLeftMirror = proxy.offset.left + offsetX + proxy.dimension.width + 12; + var topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height); + myTop = proxy.offset.top - (topDifference / 2) - offsetY; + + // if the tooltip goes off boths sides of the page + if((myLeft < 0) && ((myLeftMirror + tooltipWidth) > windowWidth)) { + var borderWidth = parseFloat(self.$tooltip.css('border-width')) * 2, + newWidth = (tooltipWidth + myLeft) - borderWidth; + self.$tooltip.css('width', newWidth + 'px'); + + tooltipHeight = self.$tooltip.outerHeight(false); + myLeft = proxy.offset.left - offsetX - newWidth - 12 - borderWidth; + topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height); + myTop = proxy.offset.top - (topDifference / 2) - offsetY; + } + + // if it only goes off one side, flip it to the other side + else if(myLeft < 0) { + myLeft = proxy.offset.left + offsetX + proxy.dimension.width + 12; + arrowReposition = 'left'; + } + } + + if(practicalPosition == 'right') { + myLeft = proxy.offset.left + offsetX + proxy.dimension.width + 12; + myLeftMirror = proxy.offset.left - offsetX - tooltipWidth - 12; + var topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height); + myTop = proxy.offset.top - (topDifference / 2) - offsetY; + + // if the tooltip goes off boths sides of the page + if(((myLeft + tooltipWidth) > windowWidth) && (myLeftMirror < 0)) { + var borderWidth = parseFloat(self.$tooltip.css('border-width')) * 2, + newWidth = (windowWidth - myLeft) - borderWidth; + self.$tooltip.css('width', newWidth + 'px'); + + tooltipHeight = self.$tooltip.outerHeight(false); + topDifference = (proxy.offset.top + tooltipHeight) - (proxy.offset.top + proxy.dimension.height); + myTop = proxy.offset.top - (topDifference / 2) - offsetY; + } + + // if it only goes off one side, flip it to the other side + else if((myLeft + tooltipWidth) > windowWidth) { + myLeft = proxy.offset.left - offsetX - tooltipWidth - 12; + arrowReposition = 'right'; + } + } + + // if arrow is set true, style it and append it + if (self.options.arrow) { + + var arrowClass = 'tooltipster-arrow-' + practicalPosition; + + // set color of the arrow + if(self.options.arrowColor.length < 1) { + var arrowColor = self.$tooltip.css('background-color'); + } + else { + var arrowColor = self.options.arrowColor; + } + + // if the tooltip was going off the page and had to re-adjust, we need to update the arrow's position + if (!arrowReposition) { + arrowReposition = ''; + } + else if (arrowReposition == 'left') { + arrowClass = 'tooltipster-arrow-right'; + arrowReposition = ''; + } + else if (arrowReposition == 'right') { + arrowClass = 'tooltipster-arrow-left'; + arrowReposition = ''; + } + else { + arrowReposition = 'left:'+ Math.round(arrowReposition) +'px;'; + } + + // building the logic to create the border around the arrow of the tooltip + if ((practicalPosition == 'top') || (practicalPosition == 'top-left') || (practicalPosition == 'top-right')) { + var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-bottom-width')), + tooltipBorderColor = self.$tooltip.css('border-bottom-color'); + } + else if ((practicalPosition == 'bottom') || (practicalPosition == 'bottom-left') || (practicalPosition == 'bottom-right')) { + var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-top-width')), + tooltipBorderColor = self.$tooltip.css('border-top-color'); + } + else if (practicalPosition == 'left') { + var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-right-width')), + tooltipBorderColor = self.$tooltip.css('border-right-color'); + } + else if (practicalPosition == 'right') { + var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-left-width')), + tooltipBorderColor = self.$tooltip.css('border-left-color'); + } + else { + var tooltipBorderWidth = parseFloat(self.$tooltip.css('border-bottom-width')), + tooltipBorderColor = self.$tooltip.css('border-bottom-color'); + } + + if (tooltipBorderWidth > 1) { + tooltipBorderWidth++; + } + + var arrowBorder = ''; + if (tooltipBorderWidth !== 0) { + var arrowBorderSize = '', + arrowBorderColor = 'border-color: '+ tooltipBorderColor +';'; + if (arrowClass.indexOf('bottom') !== -1) { + arrowBorderSize = 'margin-top: -'+ Math.round(tooltipBorderWidth) +'px;'; + } + else if (arrowClass.indexOf('top') !== -1) { + arrowBorderSize = 'margin-bottom: -'+ Math.round(tooltipBorderWidth) +'px;'; + } + else if (arrowClass.indexOf('left') !== -1) { + arrowBorderSize = 'margin-right: -'+ Math.round(tooltipBorderWidth) +'px;'; + } + else if (arrowClass.indexOf('right') !== -1) { + arrowBorderSize = 'margin-left: -'+ Math.round(tooltipBorderWidth) +'px;'; + } + arrowBorder = '<span class="tooltipster-arrow-border" style="'+ arrowBorderSize +' '+ arrowBorderColor +';"></span>'; + } + + // if the arrow already exists, remove and replace it + self.$tooltip.find('.tooltipster-arrow').remove(); + + // build out the arrow and append it + var arrowConstruct = '<div class="'+ arrowClass +' tooltipster-arrow" style="'+ arrowReposition +'">'+ arrowBorder +'<span style="border-color:'+ arrowColor +';"></span></div>'; + self.$tooltip.append(arrowConstruct); + } + + // position the tooltip + self.$tooltip.css({'top': Math.round(myTop) + 'px', 'left': Math.round(myLeft) + 'px'}); + } + + return self; + }, + + enable: function() { + this.enabled = true; + return this; + }, + + disable: function() { + // hide first, in case the tooltip would not disappear on its own (autoClose false) + this.hide(); + this.enabled = false; + return this; + }, + + destroy: function() { + + var self = this; + + self.hide(); + + // remove the icon, if any + if (self.$el[0] !== self.$elProxy[0]) { + self.$elProxy.remove(); + } + + self.$el + .removeData(self.namespace) + .off('.'+ self.namespace); + + var ns = self.$el.data('tooltipster-ns'); + + // if there are no more tooltips on this element + if(ns.length === 1){ + + // optional restoration of a title attribute + var title = null; + if (self.options.restoration === 'previous'){ + title = self.$el.data('tooltipster-initialTitle'); + } + else if(self.options.restoration === 'current'){ + + // old school technique to stringify when outerHTML is not supported + title = + (typeof self.Content === 'string') ? + self.Content : + $('<div></div>').append(self.Content).html(); + } + + if (title) { + self.$el.attr('title', title); + } + + // final cleaning + self.$el + .removeClass('tooltipstered') + .removeData('tooltipster-ns') + .removeData('tooltipster-initialTitle'); + } + else { + // remove the instance namespace from the list of namespaces of tooltips present on the element + ns = $.grep(ns, function(el, i){ + return el !== self.namespace; + }); + self.$el.data('tooltipster-ns', ns); + } + + return self; + }, + + elementIcon: function() { + return (this.$el[0] !== this.$elProxy[0]) ? this.$elProxy[0] : undefined; + }, + + elementTooltip: function() { + return this.$tooltip ? this.$tooltip[0] : undefined; + }, + + // public methods but for internal use only + // getter if val is ommitted, setter otherwise + option: function(o, val) { + if (typeof val == 'undefined') return this.options[o]; + else { + this.options[o] = val; + return this; + } + }, + status: function() { + return this.Status; + } + }; + + $.fn[pluginName] = function () { + + // for using in closures + var args = arguments; + + // if we are not in the context of jQuery wrapped HTML element(s) : + // this happens when calling static methods in the form $.fn.tooltipster('methodName'), or when calling $(sel).tooltipster('methodName or options') where $(sel) does not match anything + if (this.length === 0) { + + // if the first argument is a method name + if (typeof args[0] === 'string') { + + var methodIsStatic = true; + + // list static methods here (usable by calling $.fn.tooltipster('methodName');) + switch (args[0]) { + + case 'setDefaults': + // change default options for all future instances + $.extend(defaults, args[1]); + break; + + default: + methodIsStatic = false; + break; + } + + // $.fn.tooltipster('methodName') calls will return true + if (methodIsStatic) return true; + // $(sel).tooltipster('methodName') calls will return the list of objects event though it's empty because chaining should work on empty lists + else return this; + } + // the first argument is undefined or an object of options : we are initalizing but there is no element matched by selector + else { + // still chainable : same as above + return this; + } + } + // this happens when calling $(sel).tooltipster('methodName or options') where $(sel) matches one or more elements + else { + + // method calls + if (typeof args[0] === 'string') { + + var v = '#*$~&'; + + this.each(function() { + + // retrieve the namepaces of the tooltip(s) that exist on that element. We will interact with the first tooltip only. + var ns = $(this).data('tooltipster-ns'), + // self represents the instance of the first tooltipster plugin associated to the current HTML object of the loop + self = ns ? $(this).data(ns[0]) : null; + + // if the current element holds a tooltipster instance + if (self) { + + if (typeof self[args[0]] === 'function') { + // note : args[1] and args[2] may not be defined + var resp = self[args[0]](args[1], args[2]); + } + else { + throw new Error('Unknown method .tooltipster("' + args[0] + '")'); + } + + // if the function returned anything other than the instance itself (which implies chaining) + if (resp !== self){ + v = resp; + // return false to stop .each iteration on the first element matched by the selector + return false; + } + } + else { + throw new Error('You called Tooltipster\'s "' + args[0] + '" method on an uninitialized element'); + } + }); + + return (v !== '#*$~&') ? v : this; + } + // first argument is undefined or an object : the tooltip is initializing + else { + + var instances = [], + // is there a defined value for the multiple option in the options object ? + multipleIsSet = args[0] && typeof args[0].multiple !== 'undefined', + // if the multiple option is set to true, or if it's not defined but set to true in the defaults + multiple = (multipleIsSet && args[0].multiple) || (!multipleIsSet && defaults.multiple), + // same for debug + debugIsSet = args[0] && typeof args[0].debug !== 'undefined', + debug = (debugIsSet && args[0].debug) || (!debugIsSet && defaults.debug); + + // initialize a tooltipster instance for each element if it doesn't already have one or if the multiple option is set, and attach the object to it + this.each(function () { + + var go = false, + ns = $(this).data('tooltipster-ns'), + instance = null; + + if (!ns) { + go = true; + } + else if (multiple) { + go = true; + } + else if (debug) { + console.log('Tooltipster: one or more tooltips are already attached to this element: ignoring. Use the "multiple" option to attach more tooltips.'); + } + + if (go) { + instance = new Plugin(this, args[0]); + + // save the reference of the new instance + if (!ns) ns = []; + ns.push(instance.namespace); + $(this).data('tooltipster-ns', ns) + + // save the instance itself + $(this).data(instance.namespace, instance); + } + + instances.push(instance); + }); + + if (multiple) return instances; + else return this; + } + } + }; + + // quick & dirty compare function (not bijective nor multidimensional) + function areEqual(a,b) { + var same = true; + $.each(a, function(i, el){ + if(typeof b[i] === 'undefined' || a[i] !== b[i]){ + same = false; + return false; + } + }); + return same; + } + + // detect if this device can trigger touch events + var deviceHasTouchCapability = !!('ontouchstart' in window); + + // we'll assume the device has no mouse until we detect any mouse movement + var deviceHasMouse = false; + $('body').one('mousemove', function() { + deviceHasMouse = true; + }); + + function deviceIsPureTouch() { + return (!deviceHasMouse && deviceHasTouchCapability); + } + + // detecting support for CSS transitions + function supportsTransitions() { + var b = document.body || document.documentElement, + s = b.style, + p = 'transition'; + + if(typeof s[p] == 'string') {return true; } + + v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'], + p = p.charAt(0).toUpperCase() + p.substr(1); + for(var i=0; i<v.length; i++) { + if(typeof s[v[i] + p] == 'string') { return true; } + } + return false; + } +})( jQuery, window, document ); + +/* autogeneration */ +define("jquery-tooltipster", [ + "jquery" +], function(){}); + +/* @source lib/jquery.zclip.js */; + +/* + * zClip :: jQuery ZeroClipboard v1.1.1 + * http://steamdev.com/zclip + * + * Copyright 2011, SteamDev + * Released under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + * Date: Wed Jun 01, 2011 + */ + + +(function ($) { + + $.fn.zclip = function (params) { + + if (typeof params == "object" && !params.length) { + + var settings = $.extend({ + + path: 'ZeroClipboard.swf', + copy: null, + beforeCopy: null, + afterCopy: null, + clickAfter: true, + setHandCursor: true, + setCSSEffects: true + + }, params); + + + return this.each(function () { + + var o = $(this); + + if (o.is(':visible') && (typeof settings.copy == 'string' || $.isFunction(settings.copy))) { + + ZeroClipboard.setMoviePath(settings.path); + var clip = new ZeroClipboard.Client(); + + if($.isFunction(settings.copy)){ + o.bind('zClip_copy',settings.copy); + } + if($.isFunction(settings.beforeCopy)){ + o.bind('zClip_beforeCopy',settings.beforeCopy); + } + if($.isFunction(settings.afterCopy)){ + o.bind('zClip_afterCopy',settings.afterCopy); + } + + clip.setHandCursor(settings.setHandCursor); + clip.setCSSEffects(settings.setCSSEffects); + clip.addEventListener('mouseOver', function (client) { + o.trigger('mouseenter'); + }); + clip.addEventListener('mouseOut', function (client) { + o.trigger('mouseleave'); + }); + clip.addEventListener('mouseDown', function (client) { + + o.trigger('mousedown'); + + if(!$.isFunction(settings.copy)){ + clip.setText(settings.copy); + } else { + clip.setText(o.triggerHandler('zClip_copy')); + } + + if ($.isFunction(settings.beforeCopy)) { + o.trigger('zClip_beforeCopy'); + } + + }); + + clip.addEventListener('complete', function (client, text) { + + if ($.isFunction(settings.afterCopy)) { + + o.trigger('zClip_afterCopy'); + + } else { + if (text.length > 500) { + text = text.substr(0, 500) + "...\n\n(" + (text.length - 500) + " characters not shown)"; + } + + o.removeClass('hover'); + alert("Copied text to clipboard:\n\n " + text); + } + + if (settings.clickAfter) { + o.trigger('click'); + } + + }); + + + clip.glue(o[0], o.parent()[0]); + + $(window).bind('load resize',function(){clip.reposition();}); + + + } + + }); + + } else if (typeof params == "string") { + + return this.each(function () { + + var o = $(this); + + params = params.toLowerCase(); + var zclipId = o.data('zclipId'); + var clipElm = $('#' + zclipId + '.zclip'); + + if (params == "remove") { + + clipElm.remove(); + o.removeClass('active hover'); + + } else if (params == "hide") { + + clipElm.hide(); + o.removeClass('active hover'); + + } else if (params == "show") { + + clipElm.show(); + + } + + }); + + } + + } + + + +})(jQuery); + + + + + + + +// ZeroClipboard +// Simple Set Clipboard System +// Author: Joseph Huckaby +var ZeroClipboard = { + + version: "1.0.7", + clients: {}, + // registered upload clients on page, indexed by id + moviePath: 'ZeroClipboard.swf', + // URL to movie + nextId: 1, + // ID of next movie + $: function (thingy) { + // simple DOM lookup utility function + if (typeof(thingy) == 'string') thingy = document.getElementById(thingy); + if (!thingy.addClass) { + // extend element with a few useful methods + thingy.hide = function () { + this.style.display = 'none'; + }; + thingy.show = function () { + this.style.display = ''; + }; + thingy.addClass = function (name) { + this.removeClass(name); + this.className += ' ' + name; + }; + thingy.removeClass = function (name) { + var classes = this.className.split(/\s+/); + var idx = -1; + for (var k = 0; k < classes.length; k++) { + if (classes[k] == name) { + idx = k; + k = classes.length; + } + } + if (idx > -1) { + classes.splice(idx, 1); + this.className = classes.join(' '); + } + return this; + }; + thingy.hasClass = function (name) { + return !!this.className.match(new RegExp("\\s*" + name + "\\s*")); + }; + } + return thingy; + }, + + setMoviePath: function (path) { + // set path to ZeroClipboard.swf + this.moviePath = path; + }, + + dispatch: function (id, eventName, args) { + // receive event from flash movie, send to client + var client = this.clients[id]; + if (client) { + client.receiveEvent(eventName, args); + } + }, + + register: function (id, client) { + // register new client to receive events + this.clients[id] = client; + }, + + getDOMObjectPosition: function (obj, stopObj) { + // get absolute coordinates for dom element + var info = { + left: 0, + top: 0, + width: obj.width ? obj.width : obj.offsetWidth, + height: obj.height ? obj.height : obj.offsetHeight + }; + + if (obj && (obj != stopObj)) { + info.left += obj.offsetLeft; + info.top += obj.offsetTop; + } + + return info; + }, + + Client: function (elem) { + // constructor for new simple upload client + this.handlers = {}; + + // unique ID + this.id = ZeroClipboard.nextId++; + this.movieId = 'ZeroClipboardMovie_' + this.id; + + // register client with singleton to receive flash events + ZeroClipboard.register(this.id, this); + + // create movie + if (elem) this.glue(elem); + } +}; + +ZeroClipboard.Client.prototype = { + + id: 0, + // unique ID for us + ready: false, + // whether movie is ready to receive events or not + movie: null, + // reference to movie object + clipText: '', + // text to copy to clipboard + handCursorEnabled: true, + // whether to show hand cursor, or default pointer cursor + cssEffects: true, + // enable CSS mouse effects on dom container + handlers: null, + // user event handlers + glue: function (elem, appendElem, stylesToAdd) { + // glue to DOM element + // elem can be ID or actual DOM element object + this.domElement = ZeroClipboard.$(elem); + + // float just above object, or zIndex 99 if dom element isn't set + var zIndex = 99; + if (this.domElement.style.zIndex) { + zIndex = parseInt(this.domElement.style.zIndex, 10) + 1; + } + + if (typeof(appendElem) == 'string') { + appendElem = ZeroClipboard.$(appendElem); + } else if (typeof(appendElem) == 'undefined') { + appendElem = document.getElementsByTagName('body')[0]; + } + + // find X/Y position of domElement + var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem); + + // create floating DIV above element + this.div = document.createElement('div'); + this.div.className = "zclip"; + this.div.id = "zclip-" + this.movieId; + $(this.domElement).data('zclipId', 'zclip-' + this.movieId); + var style = this.div.style; + style.position = 'absolute'; + style.left = '' + box.left + 'px'; + style.top = '' + box.top + 'px'; + style.width = '' + box.width + 'px'; + style.height = '' + box.height + 'px'; + style.zIndex = zIndex; + + if (typeof(stylesToAdd) == 'object') { + for (addedStyle in stylesToAdd) { + style[addedStyle] = stylesToAdd[addedStyle]; + } + } + + // style.backgroundColor = '#f00'; // debug + appendElem.appendChild(this.div); + + this.div.innerHTML = this.getHTML(box.width, box.height); + }, + + getHTML: function (width, height) { + // return HTML for movie + var html = ''; + var flashvars = 'id=' + this.id + '&width=' + width + '&height=' + height; + + if (navigator.userAgent.match(/MSIE/)) { + // IE gets an OBJECT tag + var protocol = location.href.match(/^https/i) ? 'https://' : 'http://'; + html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' + protocol + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + width + '" height="' + height + '" id="' + this.movieId + '" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="' + ZeroClipboard.moviePath + '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="' + flashvars + '"/><param name="wmode" value="transparent"/></object>'; + } else { + // all other browsers get an EMBED tag + html += '<embed id="' + this.movieId + '" src="' + ZeroClipboard.moviePath + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="' + width + '" height="' + height + '" name="' + this.movieId + '" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + flashvars + '" wmode="transparent" />'; + } + return html; + }, + + hide: function () { + // temporarily hide floater offscreen + if (this.div) { + this.div.style.left = '-2000px'; + } + }, + + show: function () { + // show ourselves after a call to hide() + this.reposition(); + }, + + destroy: function () { + // destroy control and floater + if (this.domElement && this.div) { + this.hide(); + this.div.innerHTML = ''; + + var body = document.getElementsByTagName('body')[0]; + try { + body.removeChild(this.div); + } catch (e) {; + } + + this.domElement = null; + this.div = null; + } + }, + + reposition: function (elem) { + // reposition our floating div, optionally to new container + // warning: container CANNOT change size, only position + if (elem) { + this.domElement = ZeroClipboard.$(elem); + if (!this.domElement) this.hide(); + } + + if (this.domElement && this.div) { + var box = ZeroClipboard.getDOMObjectPosition(this.domElement); + var style = this.div.style; + style.left = '' + box.left + 'px'; + style.top = '' + box.top + 'px'; + } + }, + + setText: function (newText) { + // set text to be copied to clipboard + this.clipText = newText; + if (this.ready) { + this.movie.setText(newText); + } + }, + + addEventListener: function (eventName, func) { + // add user event listener for event + // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel + eventName = eventName.toString().toLowerCase().replace(/^on/, ''); + if (!this.handlers[eventName]) { + this.handlers[eventName] = []; + } + this.handlers[eventName].push(func); + }, + + setHandCursor: function (enabled) { + // enable hand cursor (true), or default arrow cursor (false) + this.handCursorEnabled = enabled; + if (this.ready) { + this.movie.setHandCursor(enabled); + } + }, + + setCSSEffects: function (enabled) { + // enable or disable CSS effects on DOM container + this.cssEffects = !! enabled; + }, + + receiveEvent: function (eventName, args) { + // receive event from flash + eventName = eventName.toString().toLowerCase().replace(/^on/, ''); + + // special behavior for certain events + switch (eventName) { + case 'load': + // movie claims it is ready, but in IE this isn't always the case... + // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function + this.movie = document.getElementById(this.movieId); + if (!this.movie) { + var self = this; + setTimeout(function () { + self.receiveEvent('load', null); + }, 1); + return; + } + + // firefox on pc needs a "kick" in order to set these in certain cases + if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) { + var self = this; + setTimeout(function () { + self.receiveEvent('load', null); + }, 100); + this.ready = true; + return; + } + + this.ready = true; + try { + this.movie.setText(this.clipText); + } catch (e) {} + try { + this.movie.setHandCursor(this.handCursorEnabled); + } catch (e) {} + break; + + case 'mouseover': + if (this.domElement && this.cssEffects) { + this.domElement.addClass('hover'); + if (this.recoverActive) { + this.domElement.addClass('active'); + } + + + } + + + break; + + case 'mouseout': + if (this.domElement && this.cssEffects) { + this.recoverActive = false; + if (this.domElement.hasClass('active')) { + this.domElement.removeClass('active'); + this.recoverActive = true; + } + this.domElement.removeClass('hover'); + + } + break; + + case 'mousedown': + if (this.domElement && this.cssEffects) { + this.domElement.addClass('active'); + } + break; + + case 'mouseup': + if (this.domElement && this.cssEffects) { + this.domElement.removeClass('active'); + this.recoverActive = false; + } + break; + } // switch eventName + if (this.handlers[eventName]) { + for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) { + var func = this.handlers[eventName][idx]; + + if (typeof(func) == 'function') { + // actual function reference + func(this, args); + } else if ((typeof(func) == 'object') && (func.length == 2)) { + // PHP style object + method, i.e. [myObject, 'myMethod'] + func[0][func[1]](this, args); + } else if (typeof(func) == 'string') { + // name of function + window[func](this, args); + } + } // foreach event handler defined + } // user defined handler for event + } + +}; + + +/* autogeneration */ +define("jquery-zclip", [ + "jquery" +], function(){}); + +/* @source lib/unobtrusive.js */; + +jQuery(function ($) { + var csrf_token = $('meta[name=csrf-token]').attr('content'), + csrf_param = $('meta[name=csrf-param]').attr('content'); + + + $.fn.extend({ + triggerAndReturn: function (name, data) { + var event = new $.Event(name); + this.trigger(event, data); + + return event.result !== false; + }, + + /** + * Handles execution of remote calls firing overridable events along the way + */ + callRemote: function () { + var el = this, + method = el.attr('method') || el.attr('data-method') || 'GET', + url = el.attr('action') || el.attr('href'), + dataType = el.attr('data-type') || 'script'; + + if (url === undefined) { + throw "No URL specified for remote call (action or href must be present)."; + } else { + if (el.triggerAndReturn('ajax:before')) { + var data = el.is('form') ? el.serializeArray() : []; + $.ajax({ + url: url, + data: data, + dataType: dataType, + type: method.toUpperCase(), + beforeSend: function (xhr) { + el.trigger('ajax:loading', xhr); + }, + success: function (data, status, xhr) { + el.trigger('ajax:success', [data, status, xhr]); + }, + complete: function (xhr) { + el.trigger('ajax:complete', xhr); + }, + error: function (xhr, status, error) { + el.trigger('ajax:failure', [xhr, status, error]); + } + }); + } + + el.trigger('ajax:after'); + } + } + }); + + /** + * confirmation handler + */ + $('a[data-confirm],input[data-confirm]').on('click', function () { + var el = $(this); + if (el.triggerAndReturn('confirm')) { + if (!confirm(el.attr('data-confirm'))) { + return false; + } + } + }); + + + /** + * remote handlers + */ + $('form[data-remote]').on('submit', function (e) { + $(this).callRemote(); + e.preventDefault(); + }); + + $('a[data-remote],input[data-remote]').on('click', function (e) { + $(this).callRemote(); + e.preventDefault(); + }); + + $('a[data-method]:not([data-remote])').on('click', function (e){ + var link = $(this), + href = link.attr('href'), + method = link.attr('data-method'), + form = $('<form method="post" action="'+href+'"></form>'), + metadata_input = '<input name="_method" value="'+method+'" type="hidden" />'; + + form.hide() + .append(metadata_input) + .appendTo('body'); + + e.preventDefault(); + form.submit(); + }); + + /** + * disable-with handlers + */ + var disable_with_input_selector = 'input[data-disable-with]'; + var disable_with_form_remote_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')'; + var disable_with_form_not_remote_selector = 'form:not([data-remote]):has(' + disable_with_input_selector + ')'; + + var disable_with_input_function = function () { + $(this).find(disable_with_input_selector).each(function () { + var input = $(this); + input.data('enable-with', input.val()) + .attr('value', input.attr('data-disable-with')) + .attr('disabled', 'disabled'); + }); + }; + + $(disable_with_form_remote_selector).on('ajax:before', disable_with_input_function); + $(disable_with_form_not_remote_selector).on('submit', disable_with_input_function); + + $(disable_with_form_remote_selector).on('ajax:complete', function () { + $(this).find(disable_with_input_selector).each(function () { + var input = $(this); + input.removeAttr('disabled') + .val(input.data('enable-with')); + }); + }); + +}); + +/* autogeneration */ +define("jquery-unobstrusive", [ + "jquery" +], function(){}); + +/* @source lib/jquery.forms.js */; + +/*! + * jQuery Form Plugin + * version: 3.24 (26-DEC-2012) + * @requires jQuery v1.5 or later + * + * Examples and documentation at: http://malsup.com/jquery/form/ + * Project repository: https://github.com/malsup/form + * Dual licensed under the MIT and GPL licenses: + * http://malsup.github.com/mit-license.txt + * http://malsup.github.com/gpl-license-v2.txt + */ +/*global ActiveXObject alert */ +;(function($) { +"use strict"; + +/* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are mutually exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').on('submit', function(e) { + e.preventDefault(); // <-- important + $(this).ajaxSubmit({ + target: '#output' + }); + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ + target: '#output' + }); + }); + + You can also use ajaxForm with delegation (requires jQuery v1.7+), so the + form does not have to exist when you invoke ajaxForm: + + $('#myForm').ajaxForm({ + delegation: true, + target: '#output' + }); + + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. +*/ + +/** + * Feature detection + */ +var feature = {}; +feature.fileapi = $("<input type='file'/>").get(0).files !== undefined; +feature.formdata = window.FormData !== undefined; + +/** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + */ +$.fn.ajaxSubmit = function(options) { + /*jshint scripturl:true */ + + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); + return this; + } + + var method, action, url, $form = this; + + if (typeof options == 'function') { + options = { success: options }; + } + + method = this.attr('method'); + action = this.attr('action'); + url = (typeof action === 'string') ? $.trim(action) : ''; + url = url || window.location.href || ''; + if (url) { + // clean url (don't include hash vaue) + url = (url.match(/^([^#]+)/)||[])[1]; + } + + options = $.extend(true, { + url: url, + success: $.ajaxSettings.success, + type: method || 'GET', + iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' + }, options); + + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; + this.trigger('form-pre-serialize', [this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + return this; + } + + // provide opportunity to alter form data before it is serialized + if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSerialize callback'); + return this; + } + + var traditional = options.traditional; + if ( traditional === undefined ) { + traditional = $.ajaxSettings.traditional; + } + + var elements = []; + var qx, a = this.formToArray(options.semantic, elements); + if (options.data) { + options.extraData = options.data; + qx = $.param(options.data, traditional); + } + + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + return this; + } + + // fire vetoable 'validate' event + this.trigger('form-submit-validate', [a, this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); + return this; + } + + var q = $.param(a, traditional); + if (qx) { + q = ( q ? (q + '&' + qx) : qx ); + } + if (options.type.toUpperCase() == 'GET') { + options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; + options.data = null; // data is null for 'get' + } + else { + options.data = q; // data is the query string for 'post' + } + + var callbacks = []; + if (options.resetForm) { + callbacks.push(function() { $form.resetForm(); }); + } + if (options.clearForm) { + callbacks.push(function() { $form.clearForm(options.includeHidden); }); + } + + // perform a load on the target only if dataType is not provided + if (!options.dataType && options.target) { + var oldSuccess = options.success || function(){}; + callbacks.push(function(data) { + var fn = options.replaceTarget ? 'replaceWith' : 'html'; + $(options.target)[fn](data).each(oldSuccess, arguments); + }); + } + else if (options.success) { + callbacks.push(options.success); + } + + options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg + var context = options.context || this ; // jQuery 1.4+ supports scope context + for (var i=0, max=callbacks.length; i < max; i++) { + callbacks[i].apply(context, [data, status, xhr || $form, $form]); + } + }; + + // are there files to upload? + + // [value] (issue #113), also see comment: + // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219 + var fileInputs = $('input[type=file]:enabled[value!=""]', this); + + var hasFileInputs = fileInputs.length > 0; + var mp = 'multipart/form-data'; + var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); + + var fileAPI = feature.fileapi && feature.formdata; + log("fileAPI :" + fileAPI); + var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI; + + var jqxhr; + + // options.iframe allows user to force iframe mode + // 06-NOV-09: now defaulting to iframe mode if file input is detected + if (options.iframe !== false && (options.iframe || shouldUseFrame)) { + // hack to fix Safari hang (thanks to Tim Molendijk for this) + // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d + if (options.closeKeepAlive) { + $.get(options.closeKeepAlive, function() { + jqxhr = fileUploadIframe(a); + }); + } + else { + jqxhr = fileUploadIframe(a); + } + } + else if ((hasFileInputs || multipart) && fileAPI) { + jqxhr = fileUploadXhr(a); + } + else { + jqxhr = $.ajax(options); + } + + $form.removeData('jqxhr').data('jqxhr', jqxhr); + + // clear element array + for (var k=0; k < elements.length; k++) + elements[k] = null; + + // fire 'notify' event + this.trigger('form-submit-notify', [this, options]); + return this; + + // utility fn for deep serialization + function deepSerialize(extraData){ + var serialized = $.param(extraData).split('&'); + var len = serialized.length; + var result = {}; + var i, part; + for (i=0; i < len; i++) { + // #252; undo param space replacement + serialized[i] = serialized[i].replace(/\+/g,' '); + part = serialized[i].split('='); + result[decodeURIComponent(part[0])] = decodeURIComponent(part[1]); + } + return result; + } + + // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz) + function fileUploadXhr(a) { + var formdata = new FormData(); + + for (var i=0; i < a.length; i++) { + formdata.append(a[i].name, a[i].value); + } + + if (options.extraData) { + var serializedData = deepSerialize(options.extraData); + for (var p in serializedData) + if (serializedData.hasOwnProperty(p)) + formdata.append(p, serializedData[p]); + } + + options.data = null; + + var s = $.extend(true, {}, $.ajaxSettings, options, { + contentType: false, + processData: false, + cache: false, + type: method || 'POST' + }); + + if (options.uploadProgress) { + // workaround because jqXHR does not expose upload property + s.xhr = function() { + var xhr = jQuery.ajaxSettings.xhr(); + if (xhr.upload) { + xhr.upload.onprogress = function(event) { + var percent = 0; + var position = event.loaded || event.position; /*event.position is deprecated*/ + var total = event.total; + if (event.lengthComputable) { + percent = Math.ceil(position / total * 100); + } + options.uploadProgress(event, position, total, percent); + }; + } + return xhr; + }; + } + + s.data = null; + var beforeSend = s.beforeSend; + s.beforeSend = function(xhr, o) { + o.data = formdata; + if(beforeSend) + beforeSend.call(this, xhr, o); + }; + return $.ajax(s); + } + + // private function for handling file uploads (hat tip to YAHOO!) + function fileUploadIframe(a) { + var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle; + var useProp = !!$.fn.prop; + var deferred = $.Deferred(); + + if ($('[name=submit],[id=submit]', form).length) { + // if there is an input with a name or id of 'submit' then we won't be + // able to invoke the submit fn on the form (at least not x-browser) + alert('Error: Form elements must not have name or id of "submit".'); + deferred.reject(); + return deferred; + } + + if (a) { + // ensure that every serialized input is still enabled + for (i=0; i < elements.length; i++) { + el = $(elements[i]); + if ( useProp ) + el.prop('disabled', false); + else + el.removeAttr('disabled'); + } + } + + s = $.extend(true, {}, $.ajaxSettings, options); + s.context = s.context || s; + id = 'jqFormIO' + (new Date().getTime()); + if (s.iframeTarget) { + $io = $(s.iframeTarget); + n = $io.attr('name'); + if (!n) + $io.attr('name', id); + else + id = n; + } + else { + $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />'); + $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' }); + } + io = $io[0]; + + + xhr = { // mock object + aborted: 0, + responseText: null, + responseXML: null, + status: 0, + statusText: 'n/a', + getAllResponseHeaders: function() {}, + getResponseHeader: function() {}, + setRequestHeader: function() {}, + abort: function(status) { + var e = (status === 'timeout' ? 'timeout' : 'aborted'); + log('aborting upload... ' + e); + this.aborted = 1; + + try { // #214, #257 + if (io.contentWindow.document.execCommand) { + io.contentWindow.document.execCommand('Stop'); + } + } + catch(ignore) {} + + $io.attr('src', s.iframeSrc); // abort op in progress + xhr.error = e; + if (s.error) + s.error.call(s.context, xhr, e, status); + if (g) + $.event.trigger("ajaxError", [xhr, s, e]); + if (s.complete) + s.complete.call(s.context, xhr, e); + } + }; + + g = s.global; + // trigger ajax global events so that activity/block indicators work like normal + if (g && 0 === $.active++) { + $.event.trigger("ajaxStart"); + } + if (g) { + $.event.trigger("ajaxSend", [xhr, s]); + } + + if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) { + if (s.global) { + $.active--; + } + deferred.reject(); + return deferred; + } + if (xhr.aborted) { + deferred.reject(); + return deferred; + } + + // add submitting element to data if we know it + sub = form.clk; + if (sub) { + n = sub.name; + if (n && !sub.disabled) { + s.extraData = s.extraData || {}; + s.extraData[n] = sub.value; + if (sub.type == "image") { + s.extraData[n+'.x'] = form.clk_x; + s.extraData[n+'.y'] = form.clk_y; + } + } + } + + var CLIENT_TIMEOUT_ABORT = 1; + var SERVER_ABORT = 2; + + function getDoc(frame) { + var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document; + return doc; + } + + // Rails CSRF hack (thanks to Yvan Barthelemy) + var csrf_token = $('meta[name=csrf-token]').attr('content'); + var csrf_param = $('meta[name=csrf-param]').attr('content'); + if (csrf_param && csrf_token) { + s.extraData = s.extraData || {}; + s.extraData[csrf_param] = csrf_token; + } + + // take a breath so that pending repaints get some cpu time before the upload starts + function doSubmit() { + // make sure form attrs are set + var t = $form.attr('target'), a = $form.attr('action'); + + // update form attrs in IE friendly way + form.setAttribute('target',id); + if (!method) { + form.setAttribute('method', 'POST'); + } + if (a != s.url) { + form.setAttribute('action', s.url); + } + + // ie borks in some cases when setting encoding + if (! s.skipEncodingOverride && (!method || /post/i.test(method))) { + $form.attr({ + encoding: 'multipart/form-data', + enctype: 'multipart/form-data' + }); + } + + // support timout + if (s.timeout) { + timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout); + } + + // look for server aborts + function checkState() { + try { + var state = getDoc(io).readyState; + log('state = ' + state); + if (state && state.toLowerCase() == 'uninitialized') + setTimeout(checkState,50); + } + catch(e) { + log('Server abort: ' , e, ' (', e.name, ')'); + cb(SERVER_ABORT); + if (timeoutHandle) + clearTimeout(timeoutHandle); + timeoutHandle = undefined; + } + } + + // add "extra" data to form if provided in options + var extraInputs = []; + try { + if (s.extraData) { + for (var n in s.extraData) { + if (s.extraData.hasOwnProperty(n)) { + // if using the $.param format that allows for multiple values with the same name + if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) { + extraInputs.push( + $('<input type="hidden" name="'+s.extraData[n].name+'">').val(s.extraData[n].value) + .appendTo(form)[0]); + } else { + extraInputs.push( + $('<input type="hidden" name="'+n+'">').val(s.extraData[n]) + .appendTo(form)[0]); + } + } + } + } + + if (!s.iframeTarget) { + // add iframe to doc and submit the form + $io.appendTo('body'); + if (io.attachEvent) + io.attachEvent('onload', cb); + else + io.addEventListener('load', cb, false); + } + setTimeout(checkState,15); + form.submit(); + } + finally { + // reset attrs and remove "extra" input elements + form.setAttribute('action',a); + if(t) { + form.setAttribute('target', t); + } else { + $form.removeAttr('target'); + } + $(extraInputs).remove(); + } + } + + if (s.forceSync) { + doSubmit(); + } + else { + setTimeout(doSubmit, 10); // this lets dom updates render + } + + var data, doc, domCheckCount = 50, callbackProcessed; + + function cb(e) { + if (xhr.aborted || callbackProcessed) { + return; + } + try { + doc = getDoc(io); + } + catch(ex) { + log('cannot access response document: ', ex); + e = SERVER_ABORT; + } + if (e === CLIENT_TIMEOUT_ABORT && xhr) { + xhr.abort('timeout'); + deferred.reject(xhr, 'timeout'); + return; + } + else if (e == SERVER_ABORT && xhr) { + xhr.abort('server abort'); + deferred.reject(xhr, 'error', 'server abort'); + return; + } + + if (!doc || doc.location.href == s.iframeSrc) { + // response not received yet + if (!timedOut) + return; + } + if (io.detachEvent) + io.detachEvent('onload', cb); + else + io.removeEventListener('load', cb, false); + + var status = 'success', errMsg; + try { + if (timedOut) { + throw 'timeout'; + } + + var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc); + log('isXml='+isXml); + if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) { + if (--domCheckCount) { + // in some browsers (Opera) the iframe DOM is not always traversable when + // the onload callback fires, so we loop a bit to accommodate + log('requeing onLoad callback, DOM not available'); + setTimeout(cb, 250); + return; + } + // let this fall through because server response could be an empty document + //log('Could not access iframe DOM after mutiple tries.'); + //throw 'DOMException: not available'; + } + + //log('response detected'); + var docRoot = doc.body ? doc.body : doc.documentElement; + xhr.responseText = docRoot ? docRoot.innerHTML : null; + xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc; + if (isXml) + s.dataType = 'xml'; + xhr.getResponseHeader = function(header){ + var headers = {'content-type': s.dataType}; + return headers[header]; + }; + // support for XHR 'status' & 'statusText' emulation : + if (docRoot) { + xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status; + xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText; + } + + var dt = (s.dataType || '').toLowerCase(); + var scr = /(json|script|text)/.test(dt); + if (scr || s.textarea) { + // see if user embedded response in textarea + var ta = doc.getElementsByTagName('textarea')[0]; + if (ta) { + xhr.responseText = ta.value; + // support for XHR 'status' & 'statusText' emulation : + xhr.status = Number( ta.getAttribute('status') ) || xhr.status; + xhr.statusText = ta.getAttribute('statusText') || xhr.statusText; + } + else if (scr) { + // account for browsers injecting pre around json response + var pre = doc.getElementsByTagName('pre')[0]; + var b = doc.getElementsByTagName('body')[0]; + if (pre) { + xhr.responseText = pre.textContent ? pre.textContent : pre.innerText; + } + else if (b) { + xhr.responseText = b.textContent ? b.textContent : b.innerText; + } + } + } + else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) { + xhr.responseXML = toXml(xhr.responseText); + } + + try { + data = httpData(xhr, dt, s); + } + catch (e) { + status = 'parsererror'; + xhr.error = errMsg = (e || status); + } + } + catch (e) { + log('error caught: ',e); + status = 'error'; + xhr.error = errMsg = (e || status); + } + + if (xhr.aborted) { + log('upload aborted'); + status = null; + } + + if (xhr.status) { // we've set xhr.status + status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error'; + } + + // ordering of these callbacks/triggers is odd, but that's how $.ajax does it + if (status === 'success') { + if (s.success) + s.success.call(s.context, data, 'success', xhr); + deferred.resolve(xhr.responseText, 'success', xhr); + if (g) + $.event.trigger("ajaxSuccess", [xhr, s]); + } + else if (status) { + if (errMsg === undefined) + errMsg = xhr.statusText; + if (s.error) + s.error.call(s.context, xhr, status, errMsg); + deferred.reject(xhr, 'error', errMsg); + if (g) + $.event.trigger("ajaxError", [xhr, s, errMsg]); + } + + if (g) + $.event.trigger("ajaxComplete", [xhr, s]); + + if (g && ! --$.active) { + $.event.trigger("ajaxStop"); + } + + if (s.complete) + s.complete.call(s.context, xhr, status); + + callbackProcessed = true; + if (s.timeout) + clearTimeout(timeoutHandle); + + // clean up + setTimeout(function() { + if (!s.iframeTarget) + $io.remove(); + xhr.responseXML = null; + }, 100); + } + + var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+) + if (window.ActiveXObject) { + doc = new ActiveXObject('Microsoft.XMLDOM'); + doc.async = 'false'; + doc.loadXML(s); + } + else { + doc = (new DOMParser()).parseFromString(s, 'text/xml'); + } + return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null; + }; + var parseJSON = $.parseJSON || function(s) { + /*jslint evil:true */ + return window['eval']('(' + s + ')'); + }; + + var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4 + + var ct = xhr.getResponseHeader('content-type') || '', + xml = type === 'xml' || !type && ct.indexOf('xml') >= 0, + data = xml ? xhr.responseXML : xhr.responseText; + + if (xml && data.documentElement.nodeName === 'parsererror') { + if ($.error) + $.error('parsererror'); + } + if (s && s.dataFilter) { + data = s.dataFilter(data, type); + } + if (typeof data === 'string') { + if (type === 'json' || !type && ct.indexOf('json') >= 0) { + data = parseJSON(data); + } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) { + $.globalEval(data); + } + } + return data; + }; + + return deferred; + } +}; + +/** + * ajaxForm() provides a mechanism for fully automating form submission. + * + * The advantages of using this method instead of ajaxSubmit() are: + * + * 1: This method will include coordinates for <input type="image" /> elements (if the element + * is used to submit the form). + * 2. This method will include the submit element's name/value data (for the element that was + * used to submit the form). + * 3. This method binds the submit() method to the form for you. + * + * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely + * passes the options argument along after properly binding events for submit elements and + * the form itself. + */ +$.fn.ajaxForm = function(options) { + options = options || {}; + options.delegation = options.delegation && $.isFunction($.fn.on); + + // in jQuery 1.3+ we can fix mistakes with the ready state + if (!options.delegation && this.length === 0) { + var o = { s: this.selector, c: this.context }; + if (!$.isReady && o.s) { + log('DOM not ready, queuing ajaxForm'); + $(function() { + $(o.s,o.c).ajaxForm(options); + }); + return this; + } + // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready() + log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)')); + return this; + } + + if ( options.delegation ) { + $(document) + .off('submit.form-plugin', this.selector, doAjaxSubmit) + .off('click.form-plugin', this.selector, captureSubmittingElement) + .on('submit.form-plugin', this.selector, options, doAjaxSubmit) + .on('click.form-plugin', this.selector, options, captureSubmittingElement); + return this; + } + + return this.ajaxFormUnbind() + .bind('submit.form-plugin', options, doAjaxSubmit) + .bind('click.form-plugin', options, captureSubmittingElement); +}; + +// private event handlers +function doAjaxSubmit(e) { + /*jshint validthis:true */ + var options = e.data; + if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed + e.preventDefault(); + $(this).ajaxSubmit(options); + } +} + +function captureSubmittingElement(e) { + /*jshint validthis:true */ + var target = e.target; + var $el = $(target); + if (!($el.is("[type=submit],[type=image]"))) { + // is this a child element of the submit el? (ex: a span within a button) + var t = $el.closest('[type=submit]'); + if (t.length === 0) { + return; + } + target = t[0]; + } + var form = this; + form.clk = target; + if (target.type == 'image') { + if (e.offsetX !== undefined) { + form.clk_x = e.offsetX; + form.clk_y = e.offsetY; + } else if (typeof $.fn.offset == 'function') { + var offset = $el.offset(); + form.clk_x = e.pageX - offset.left; + form.clk_y = e.pageY - offset.top; + } else { + form.clk_x = e.pageX - target.offsetLeft; + form.clk_y = e.pageY - target.offsetTop; + } + } + // clear form vars + setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100); +} + + +// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm +$.fn.ajaxFormUnbind = function() { + return this.unbind('submit.form-plugin click.form-plugin'); +}; + +/** + * formToArray() gathers form element data into an array of objects that can + * be passed to any of the following ajax functions: $.get, $.post, or load. + * Each object in the array has both a 'name' and 'value' property. An example of + * an array for a simple login form might be: + * + * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] + * + * It is this array that is passed to pre-submit callback functions provided to the + * ajaxSubmit() and ajaxForm() methods. + */ +$.fn.formToArray = function(semantic, elements) { + var a = []; + if (this.length === 0) { + return a; + } + + var form = this[0]; + var els = semantic ? form.getElementsByTagName('*') : form.elements; + if (!els) { + return a; + } + + var i,j,n,v,el,max,jmax; + for(i=0, max=els.length; i < max; i++) { + el = els[i]; + n = el.name; + if (!n) { + continue; + } + + if (semantic && form.clk && el.type == "image") { + // handle image inputs on the fly when semantic == true + if(!el.disabled && form.clk == el) { + a.push({name: n, value: $(el).val(), type: el.type }); + a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); + } + continue; + } + + v = $.fieldValue(el, true); + if (v && v.constructor == Array) { + if (elements) + elements.push(el); + for(j=0, jmax=v.length; j < jmax; j++) { + a.push({name: n, value: v[j]}); + } + } + else if (feature.fileapi && el.type == 'file' && !el.disabled) { + if (elements) + elements.push(el); + var files = el.files; + if (files.length) { + for (j=0; j < files.length; j++) { + a.push({name: n, value: files[j], type: el.type}); + } + } + else { + // #180 + a.push({ name: n, value: '', type: el.type }); + } + } + else if (v !== null && typeof v != 'undefined') { + if (elements) + elements.push(el); + a.push({name: n, value: v, type: el.type, required: el.required}); + } + } + + if (!semantic && form.clk) { + // input type=='image' are not found in elements array! handle it here + var $input = $(form.clk), input = $input[0]; + n = input.name; + if (n && !input.disabled && input.type == 'image') { + a.push({name: n, value: $input.val()}); + a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); + } + } + return a; +}; + +/** + * Serializes form data into a 'submittable' string. This method will return a string + * in the format: name1=value1&name2=value2 + */ +$.fn.formSerialize = function(semantic) { + //hand off to jQuery.param for proper encoding + return $.param(this.formToArray(semantic)); +}; + +/** + * Serializes all field elements in the jQuery object into a query string. + * This method will return a string in the format: name1=value1&name2=value2 + */ +$.fn.fieldSerialize = function(successful) { + var a = []; + this.each(function() { + var n = this.name; + if (!n) { + return; + } + var v = $.fieldValue(this, successful); + if (v && v.constructor == Array) { + for (var i=0,max=v.length; i < max; i++) { + a.push({name: n, value: v[i]}); + } + } + else if (v !== null && typeof v != 'undefined') { + a.push({name: this.name, value: v}); + } + }); + //hand off to jQuery.param for proper encoding + return $.param(a); +}; + +/** + * Returns the value(s) of the element in the matched set. For example, consider the following form: + * + * <form><fieldset> + * <input name="A" type="text" /> + * <input name="A" type="text" /> + * <input name="B" type="checkbox" value="B1" /> + * <input name="B" type="checkbox" value="B2"/> + * <input name="C" type="radio" value="C1" /> + * <input name="C" type="radio" value="C2" /> + * </fieldset></form> + * + * var v = $('input[type=text]').fieldValue(); + * // if no values are entered into the text inputs + * v == ['',''] + * // if values entered into the text inputs are 'foo' and 'bar' + * v == ['foo','bar'] + * + * var v = $('input[type=checkbox]').fieldValue(); + * // if neither checkbox is checked + * v === undefined + * // if both checkboxes are checked + * v == ['B1', 'B2'] + * + * var v = $('input[type=radio]').fieldValue(); + * // if neither radio is checked + * v === undefined + * // if first radio is checked + * v == ['C1'] + * + * The successful argument controls whether or not the field element must be 'successful' + * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). + * The default value of the successful argument is true. If this value is false the value(s) + * for each element is returned. + * + * Note: This method *always* returns an array. If no valid value can be determined the + * array will be empty, otherwise it will contain one or more values. + */ +$.fn.fieldValue = function(successful) { + for (var val=[], i=0, max=this.length; i < max; i++) { + var el = this[i]; + var v = $.fieldValue(el, successful); + if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) { + continue; + } + if (v.constructor == Array) + $.merge(val, v); + else + val.push(v); + } + return val; +}; + +/** + * Returns the value of the field element. + */ +$.fieldValue = function(el, successful) { + var n = el.name, t = el.type, tag = el.tagName.toLowerCase(); + if (successful === undefined) { + successful = true; + } + + if (successful && (!n || el.disabled || t == 'reset' || t == 'button' || + (t == 'checkbox' || t == 'radio') && !el.checked || + (t == 'submit' || t == 'image') && el.form && el.form.clk != el || + tag == 'select' && el.selectedIndex == -1)) { + return null; + } + + if (tag == 'select') { + var index = el.selectedIndex; + if (index < 0) { + return null; + } + var a = [], ops = el.options; + var one = (t == 'select-one'); + var max = (one ? index+1 : ops.length); + for(var i=(one ? index : 0); i < max; i++) { + var op = ops[i]; + if (op.selected) { + var v = op.value; + if (!v) { // extra pain for IE... + v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value; + } + if (one) { + return v; + } + a.push(v); + } + } + return a; + } + return $(el).val(); +}; + +/** + * Clears the form data. Takes the following actions on the form's input fields: + * - input text fields will have their 'value' property set to the empty string + * - select elements will have their 'selectedIndex' property set to -1 + * - checkbox and radio inputs will have their 'checked' property set to false + * - inputs of type submit, button, reset, and hidden will *not* be effected + * - button elements will *not* be effected + */ +$.fn.clearForm = function(includeHidden) { + return this.each(function() { + $('input,select,textarea', this).clearFields(includeHidden); + }); +}; + +/** + * Clears the selected form elements. + */ +$.fn.clearFields = $.fn.clearInputs = function(includeHidden) { + var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list + return this.each(function() { + var t = this.type, tag = this.tagName.toLowerCase(); + if (re.test(t) || tag == 'textarea') { + this.value = ''; + } + else if (t == 'checkbox' || t == 'radio') { + this.checked = false; + } + else if (tag == 'select') { + this.selectedIndex = -1; + } + else if (t == "file") { + if ($.browser.msie) { + $(this).replaceWith($(this).clone()); + } else { + $(this).val(''); + } + } + else if (includeHidden) { + // includeHidden can be the value true, or it can be a selector string + // indicating a special test; for example: + // $('#myForm').clearForm('.special:hidden') + // the above would clean hidden inputs that have the class of 'special' + if ( (includeHidden === true && /hidden/.test(t)) || + (typeof includeHidden == 'string' && $(this).is(includeHidden)) ) + this.value = ''; + } + }); +}; + +/** + * Resets the form data. Causes all form elements to be reset to their original value. + */ +$.fn.resetForm = function() { + return this.each(function() { + // guard against an input with the name of 'reset' + // note that IE reports the reset function as an 'object' + if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) { + this.reset(); + } + }); +}; + +/** + * Enables or disables any matching elements. + */ +$.fn.enable = function(b) { + if (b === undefined) { + b = true; + } + return this.each(function() { + this.disabled = !b; + }); +}; + +/** + * Checks/unchecks any matching checkboxes or radio buttons and + * selects/deselects and matching option elements. + */ +$.fn.selected = function(select) { + if (select === undefined) { + select = true; + } + return this.each(function() { + var t = this.type; + if (t == 'checkbox' || t == 'radio') { + this.checked = select; + } + else if (this.tagName.toLowerCase() == 'option') { + var $sel = $(this).parent('select'); + if (select && $sel[0] && $sel[0].type == 'select-one') { + // deselect all other options + $sel.find('option').selected(false); + } + this.selected = select; + } + }); +}; + +// expose debug var +$.fn.ajaxSubmit.debug = false; + +// helper fn for console logging +function log() { + if (!$.fn.ajaxSubmit.debug) + return; + var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,''); + if (window.console && window.console.log) { + window.console.log(msg); + } + else if (window.opera && window.opera.postError) { + window.opera.postError(msg); + } +} + +})(jQuery); + +/* autogeneration */ +define("jquery-forms", [ + "jquery" +], function(){}); + +/* @source lib/jquery.atwho.js */; + + +/* + Implement Github like autocomplete mentions + http://ichord.github.com/At.js + + Copyright (c) 2013 chord.luo@gmail.com + Licensed under the MIT license. +*/ + + +(function() { + + (function(factory) { + if (typeof define === 'function' && define.amd) { + return define("jquery-atwho", [ + "jquery" + ], factory); + } else { + return factory(window.jQuery); + } + })(function($) { + var Controller, DEFAULT_CALLBACKS, DEFAULT_TPL, KEY_CODE, Mirror, View; + Mirror = (function() { + + Mirror.prototype.css_attr = ["overflowY", "height", "width", "paddingTop", "paddingLeft", "paddingRight", "paddingBottom", "marginTop", "marginLeft", "marginRight", "marginBottom", 'fontFamily', 'borderStyle', 'borderWidth', 'wordWrap', 'fontSize', 'lineHeight', 'overflowX']; + + function Mirror($inputor) { + this.$inputor = $inputor; + } + + Mirror.prototype.copy_inputor_css = function() { + var css, + _this = this; + css = { + position: 'absolute', + left: -9999, + top: 0, + zIndex: -20000, + 'white-space': 'pre-wrap' + }; + $.each(this.css_attr, function(i, p) { + return css[p] = _this.$inputor.css(p); + }); + return css; + }; + + Mirror.prototype.create = function(html) { + this.$mirror = $('<div></div>'); + this.$mirror.css(this.copy_inputor_css()); + this.$mirror.html(html); + this.$inputor.after(this.$mirror); + return this; + }; + + Mirror.prototype.get_flag_rect = function() { + var $flag, pos, rect; + $flag = this.$mirror.find("span#flag"); + pos = $flag.position(); + rect = { + left: pos.left, + top: pos.top, + bottom: $flag.height() + pos.top + }; + this.$mirror.remove(); + return rect; + }; + + return Mirror; + + })(); + KEY_CODE = { + DOWN: 40, + UP: 38, + ESC: 27, + TAB: 9, + ENTER: 13 + }; + DEFAULT_CALLBACKS = { + data_refactor: function(data) { + return $.map(data, function(item, k) { + if (!$.isPlainObject(item)) { + item = { + name: item + }; + } + return item; + }); + }, + matcher: function(flag, subtext) { + var match, matched, regexp; + regexp = new RegExp(flag + '([A-Za-z0-9_\+\-]*)$|' + flag + '([^\\x00-\\xff]*)$', 'gi'); + match = regexp.exec(subtext); + matched = null; + if (match) { + matched = match[2] ? match[2] : match[1]; + } + return matched; + }, + filter: function(query, data, search_key) { + var _this = this; + return $.map(data, function(item, i) { + var name; + name = $.isPlainObject(item) ? item[search_key] : item; + if (name.toLowerCase().indexOf(query) >= 0) { + return item; + } + }); + }, + remote_filter: function(params, url, render_view) { + return $.ajax(url, { + data: params, + success: function(data) { + return render_view(data); + } + }); + }, + sorter: function(query, items, search_key) { + var item, results, text, _i, _len; + if (!query) { + items; + + } + results = []; + for (_i = 0, _len = items.length; _i < _len; _i++) { + item = items[_i]; + text = item[search_key]; + item.order = text.toLowerCase().indexOf(query); + results.push(item); + } + return results.sort(function(a, b) { + return a.order - b.order; + }); + }, + tpl_eval: function(tpl, map) { + var el; + try { + return el = tpl.replace(/\$\{([^\}]*)\}/g, function(tag, key, pos) { + return map[key]; + }); + } catch (error) { + return ""; + } + }, + highlighter: function(li, query) { + if (!query) { + return li; + } + return li.replace(new RegExp(">\\s*(\\w*)(" + query.replace("+", "\\+") + ")(\\w*)\\s*<", 'ig'), function(str, $1, $2, $3) { + return '> ' + $1 + '<strong>' + $2 + '</strong>' + $3 + ' <'; + }); + }, + selector: function($li) { + if ($li.length > 0) { + return this.replace_str($li.data("value") || ""); + } + } + }; + Controller = (function() { + + function Controller(inputor) { + this.settings = {}; + this.common_settings = {}; + this.pos = 0; + this.flags = null; + this.current_flag = null; + this.query = null; + this.$inputor = $(inputor); + this.mirror = new Mirror(this.$inputor); + this.common_settings = $.extend({}, $.fn.atwho["default"]); + this.view = new View(this, this.$el); + this.listen(); + } + + Controller.prototype.listen = function() { + var _this = this; + return this.$inputor.on('keyup.atwho', function(e) { + return _this.on_keyup(e); + }).on('keydown.atwho', function(e) { + return _this.on_keydown(e); + }).on('scroll.atwho', function(e) { + return _this.view.hide(); + }).on('blur.atwho', function(e) { + return _this.view.hide(_this.get_opt("display_timeout")); + }); + }; + + Controller.prototype.reg = function(flag, settings) { + var current_settings, data; + current_settings = {}; + current_settings = $.isPlainObject(flag) ? this.common_settings = $.extend({}, this.common_settings, flag) : !this.settings[flag] ? this.settings[flag] = $.extend({}, settings) : this.settings[flag] = $.extend({}, this.settings[flag], settings); + data = current_settings["data"]; + if (typeof data === "string") { + current_settings["data"] = data; + } else if (data) { + current_settings["data"] = this.callbacks("data_refactor").call(this, data); + } + return this; + }; + + Controller.prototype.trigger = function(name, data) { + data || (data = []); + data.push(this); + return this.$inputor.trigger("" + name + ".atwho", data); + }; + + Controller.prototype.data = function() { + return this.get_opt("data"); + }; + + Controller.prototype.callbacks = function(func_name) { + var func; + if (!(func = this.get_opt("callbacks", {})[func_name])) { + func = this.common_settings["callbacks"][func_name]; + } + return func; + }; + + Controller.prototype.get_opt = function(key, default_value) { + var value; + try { + if (this.current_flag) { + value = this.settings[this.current_flag][key]; + } + if (value === void 0) { + value = this.common_settings[key]; + } + return value = value === void 0 ? default_value : value; + } catch (e) { + return value = default_value === void 0 ? null : default_value; + } + }; + + Controller.prototype.rect = function() { + var $inputor, Sel, at_rect, bottom, format, html, offset, start_range, x, y; + $inputor = this.$inputor; + if (document.selection) { + Sel = document.selection.createRange(); + x = Sel.boundingLeft + $inputor.scrollLeft(); + y = Sel.boundingTop + $(window).scrollTop() + $inputor.scrollTop(); + bottom = y + Sel.boundingHeight; + return { + top: y - 2, + left: x - 2, + bottom: bottom - 2 + }; + } + format = function(value) { + return value.replace(/</g, '<').replace(/>/g, '>').replace(/`/g, '`').replace(/"/g, '"').replace(/\r\n|\r|\n/g, "<br />"); + }; + /* 克隆完inputor后将原来的文本内容根据 + @的位置进行分块,以获取@块在inputor(输入框)里的position + */ + + start_range = $inputor.val().slice(0, this.pos - 1); + html = "<span>" + format(start_range) + "</span>"; + html += "<span id='flag'>?</span>"; + /* + 将inputor的 offset(相对于document) + 和@在inputor里的position相加 + 就得到了@相对于document的offset. + 当然,还要加上行高和滚动条的偏移量. + */ + + offset = $inputor.offset(); + at_rect = this.mirror.create(html).get_flag_rect(); + x = offset.left + at_rect.left - $inputor.scrollLeft(); + y = offset.top - $inputor.scrollTop(); + bottom = y + at_rect.bottom; + y += at_rect.top; + return { + top: y, + left: x, + bottom: bottom + 2 + }; + }; + + Controller.prototype.catch_query = function() { + var caret_pos, content, end, query, start, subtext, + _this = this; + content = this.$inputor.val(); + caret_pos = this.$inputor.caretPos(); + /* 向在插入符前的的文本进行正则匹配 + * 考虑会有多个 @ 的存在, 匹配离插入符最近的一个 + */ + + subtext = content.slice(0, caret_pos); + query = null; + $.each(this.settings, function(flag, settings) { + query = _this.callbacks("matcher").call(_this, flag, subtext); + if (query != null) { + _this.current_flag = flag; + return false; + } + }); + if (typeof query === "string" && query.length <= 20) { + start = caret_pos - query.length; + end = start + query.length; + this.pos = start; + query = { + 'text': query.toLowerCase(), + 'head_pos': start, + 'end_pos': end + }; + this.trigger("matched", [this.current_flag, query.text]); + } else { + this.view.hide(); + } + return this.query = query; + }; + + Controller.prototype.replace_str = function(str) { + var $inputor, flag_len, source, start_str, text; + $inputor = this.$inputor; + source = $inputor.val(); + flag_len = this.get_opt("display_flag") ? 0 : this.current_flag.length; + start_str = source.slice(0, (this.query['head_pos'] || 0) - flag_len); + text = "" + start_str + str + " " + (source.slice(this.query['end_pos'] || 0)); + $inputor.val(text); + $inputor.caretPos(start_str.length + str.length + 1); + return $inputor.change(); + }; + + Controller.prototype.on_keyup = function(e) { + switch (e.keyCode) { + case KEY_CODE.ESC: + e.preventDefault(); + this.view.hide(); + break; + case KEY_CODE.DOWN: + case KEY_CODE.UP: + $.noop(); + break; + default: + this.look_up(); + } + return e.stopPropagation(); + }; + + Controller.prototype.on_keydown = function(e) { + if (!this.view.visible()) { + return; + } + switch (e.keyCode) { + case KEY_CODE.ESC: + e.preventDefault(); + this.view.hide(); + break; + case KEY_CODE.UP: + e.preventDefault(); + this.view.prev(); + break; + case KEY_CODE.DOWN: + e.preventDefault(); + this.view.next(); + break; + case KEY_CODE.TAB: + case KEY_CODE.ENTER: + if (!this.view.visible()) { + return; + } + e.preventDefault(); + this.view.choose(); + break; + default: + $.noop(); + } + return e.stopPropagation(); + }; + + Controller.prototype.render_view = function(data) { + var search_key; + search_key = this.get_opt("search_key"); + data = this.callbacks("sorter").call(this, this.query.text, data, search_key); + data = data.splice(0, this.get_opt('limit')); + return this.view.render(data); + }; + + Controller.prototype.look_up = function() { + var data, origin_data, params, query, search_key; + query = this.catch_query(); + if (!query) { + return false; + } + origin_data = this.get_opt("data"); + search_key = this.get_opt("search_key"); + if (typeof origin_data === "string") { + params = { + q: query.text, + limit: this.get_opt("limit") + }; + this.callbacks('remote_filter').call(this, params, origin_data, $.proxy(this.render_view, this)); + } else if ((data = this.callbacks('filter').call(this, query.text, origin_data, search_key))) { + this.render_view(data); + } else { + this.view.hide(); + } + return $.noop(); + }; + + return Controller; + + })(); + View = (function() { + + function View(controller) { + this.controller = controller; + this.id = this.controller.get_opt("view_id", "at-view"); + this.timeout_id = null; + this.$el = $("#" + this.id); + this.create_view(); + } + + View.prototype.create_view = function() { + var $menu, tpl, + _this = this; + if (this.exist()) { + return; + } + tpl = "<div id='" + this.id + "' class='at-view'><ul id='" + this.id + "-ul'></ul></div>"; + $("body").append(tpl); + this.$el = $("#" + this.id); + $menu = this.$el.find('ul'); + return $menu.on('mouseenter.view', 'li', function(e) { + $menu.find('.cur').removeClass('cur'); + return $(e.currentTarget).addClass('cur'); + }).on('click', function(e) { + e.stopPropagation(); + e.preventDefault(); + return _this.$el.data("_view").choose(); + }); + }; + + View.prototype.exist = function() { + return $("#" + this.id).length > 0; + }; + + View.prototype.visible = function() { + return this.$el.is(":visible"); + }; + + View.prototype.choose = function() { + var $li; + $li = this.$el.find(".cur"); + this.controller.callbacks("selector").call(this.controller, $li); + this.controller.trigger("choose", [$li]); + return this.hide(); + }; + + View.prototype.reposition = function() { + var offset, rect; + rect = this.controller.rect(); + if (rect.bottom + this.$el.height() - $(window).scrollTop() > $(window).height()) { + rect.bottom = rect.top - this.$el.height(); + } + offset = { + left: rect.left, + top: rect.bottom + }; + this.$el.offset(offset); + return this.controller.trigger("reposition", [offset]); + }; + + View.prototype.next = function() { + var cur, next; + cur = this.$el.find('.cur').removeClass('cur'); + next = cur.next(); + if (!next.length) { + next = $(this.$el.find('li')[0]); + } + return next.addClass('cur'); + }; + + View.prototype.prev = function() { + var cur, prev; + cur = this.$el.find('.cur').removeClass('cur'); + prev = cur.prev(); + if (!prev.length) { + prev = this.$el.find('li').last(); + } + return prev.addClass('cur'); + }; + + View.prototype.show = function() { + if (!this.visible()) { + this.$el.show(); + } + return this.reposition(); + }; + + View.prototype.hide = function(time) { + var callback, + _this = this; + if (isNaN(time)) { + if (this.visible()) { + return this.$el.hide(); + } + } else { + callback = function() { + return _this.hide(); + }; + clearTimeout(this.timeout_id); + return this.timeout_id = setTimeout(callback, time); + } + }; + + View.prototype.clear = function() { + return this.$el.find('ul').empty(); + }; + + View.prototype.render = function(list) { + var $ul, tpl, + _this = this; + if (!$.isArray(list)) { + return false; + } + if (list.length <= 0) { + this.hide(); + return true; + } + this.clear(); + this.$el.data("_view", this); + $ul = this.$el.find('ul'); + tpl = this.controller.get_opt('tpl', DEFAULT_TPL); + $.each(list, function(i, item) { + var $li, li; + li = _this.controller.callbacks("tpl_eval").call(_this.controller, tpl, item); + $li = $(_this.controller.callbacks("highlighter").call(_this.controller, li, _this.controller.query.text)); + $li.data("info", item); + return $ul.append($li); + }); + this.show(); + return $ul.find("li:eq(0)").addClass("cur"); + }; + + return View; + + })(); + DEFAULT_TPL = "<li data-value='${name}'>${name}</li>"; + $.fn.atwho = function(flag, options) { + return this.filter('textarea, input').each(function() { + var $this, data; + $this = $(this); + data = $this.data("atwho"); + if (!data) { + $this.data('atwho', (data = new Controller(this))); + } + return data.reg(flag, options); + }); + }; + $.fn.atwho.Controller = Controller; + $.fn.atwho.View = View; + $.fn.atwho.Mirror = Mirror; + return $.fn.atwho["default"] = { + data: null, + search_key: "name", + callbacks: DEFAULT_CALLBACKS, + limit: 5, + display_flag: true, + display_timeout: 300, + tpl: DEFAULT_TPL + }; + }); + +}).call(this); + +/* @source lib/jquery.caret.js */; + + +/* + Implement Twitter/Weibo @ mentions + + Copyright (c) 2012 chord.luo@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* +本插件操作 textarea 或者 input 内的插入符 +只实现了获得插入符在文本框中的位置,以及设置 +插入符的位置. +*/ + +(function() { + + (function($) { + var getCaretPos, setCaretPos; + getCaretPos = function(inputor) { + var end, endRange, len, normalizedValue, pos, range, start, textInputRange; + if (document.selection) { + /* + #assume we select "HATE" in the inputor such as textarea -> { }. + * start end-point. + * / + * < I really [HATE] IE > between the brackets is the selection range. + * \ + * end end-point. + */ + range = document.selection.createRange(); + pos = 0; + if (range && range.parentElement() === inputor) { + normalizedValue = inputor.value.replace(/\r\n/g, "\n"); + /* SOMETIME !!! + "/r/n" is counted as two char. + one line is two, two will be four. balalala. + so we have to using the normalized one's length.; + */ + len = normalizedValue.length; + /* + <[ I really HATE IE ]>: + the whole content in the inputor will be the textInputRange. + */ + textInputRange = inputor.createTextRange(); + /* _here must be the position of bookmark. + / + <[ I really [HATE] IE ]> + [---------->[ ] : this is what moveToBookmark do. + < I really [[HATE] IE ]> : here is result. + \ two brackets in should be in line. + */ + textInputRange.moveToBookmark(range.getBookmark()); + endRange = inputor.createTextRange(); + /* [--------------------->[] : if set false all end-point goto end. + < I really [[HATE] IE []]> + */ + endRange.collapse(false); + /* + ___VS____ + / \ + < I really [[HATE] IE []]> + \_endRange end-point. + + " > -1" mean the start end-point will be the same or right to the end end-point + * simplelly, all in the end. + */ + if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { + start = end = len; + } else { + /* + I really |HATE] IE ]> + <-| + I really[ [HATE] IE ]> + <-[ + I reall[y [HATE] IE ]> + + will return how many unit have moved. + */ + start = -textInputRange.moveStart("character", -len); + end = -textInputRange.moveEnd("character", -len); + } + } + } else { + start = inputor.selectionStart; + } + return start; + }; + setCaretPos = function(inputor, pos) { + var range; + if (document.selection) { + range = inputor.createTextRange(); + range.move("character", pos); + return range.select(); + } else { + return inputor.setSelectionRange(pos, pos); + } + }; + return $.fn.caretPos = function(pos) { + var inputor; + inputor = this[0]; + inputor.focus(); + if (pos) { + return setCaretPos(inputor, pos); + } else { + return getCaretPos(inputor); + } + }; + })(window.jQuery); + +}).call(this); + +/* autogeneration */ +define("jquery-caret", [ + "jquery" +], function(){}); + +/* @source lib/jquery.lazyload.js */; + +/* + * Lazy Load - jQuery plugin for lazy loading images + * + * Copyright (c) 2007-2012 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * http://www.appelsiini.net/projects/lazyload + * + * Version: 1.8.3 + * + */ +(function($, window, document, undefined) { + var $window = $(window); + + $.fn.lazyload = function(options) { + var elements = this; + var $container; + var settings = { + threshold : 0, + failure_limit : 0, + event : "scroll", + effect : "show", + container : window, + data_attribute : "original", + skip_invisible : true, + appear : null, + load : null + }; + + function update() { + var counter = 0; + + elements.each(function() { + var $this = $(this); + if (settings.skip_invisible && !$this.is(":visible")) { + return; + } + if ($.abovethetop(this, settings) || + $.leftofbegin(this, settings)) { + /* Nothing. */ + } else if (!$.belowthefold(this, settings) && + !$.rightoffold(this, settings)) { + $this.trigger("appear"); + /* if we found an image we'll load, reset the counter */ + counter = 0; + } else { + if (++counter > settings.failure_limit) { + return false; + } + } + }); + + } + + if(options) { + /* Maintain BC for a couple of versions. */ + if (undefined !== options.failurelimit) { + options.failure_limit = options.failurelimit; + delete options.failurelimit; + } + if (undefined !== options.effectspeed) { + options.effect_speed = options.effectspeed; + delete options.effectspeed; + } + + $.extend(settings, options); + } + + /* Cache container as jQuery as object. */ + $container = (settings.container === undefined || + settings.container === window) ? $window : $(settings.container); + + /* Fire one scroll event per scroll. Not one scroll event per image. */ + if (0 === settings.event.indexOf("scroll")) { + $container.bind(settings.event, function(event) { + return update(); + }); + } + + this.each(function() { + var self = this; + var $self = $(self); + + self.loaded = false; + + /* When appear is triggered load original image. */ + $self.one("appear", function() { + if (!this.loaded) { + if (settings.appear) { + var elements_left = elements.length; + settings.appear.call(self, elements_left, settings); + } + $("<img />") + .bind("load", function() { + $self + .hide() + .attr("src", $self.data(settings.data_attribute)) + [settings.effect](settings.effect_speed); + self.loaded = true; + + /* Remove image from array so it is not looped next time. */ + var temp = $.grep(elements, function(element) { + return !element.loaded; + }); + elements = $(temp); + + if (settings.load) { + var elements_left = elements.length; + settings.load.call(self, elements_left, settings); + } + }) + .attr("src", $self.data(settings.data_attribute)); + } + }); + + /* When wanted event is triggered load original image */ + /* by triggering appear. */ + if (0 !== settings.event.indexOf("scroll")) { + $self.bind(settings.event, function(event) { + if (!self.loaded) { + $self.trigger("appear"); + } + }); + } + }); + + /* Check if something appears when window is resized. */ + $window.bind("resize", function(event) { + update(); + }); + + /* With IOS5 force loading images when navigating with back button. */ + /* Non optimal workaround. */ + if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) { + $window.bind("pageshow", function(event) { + if (event.originalEvent.persisted) { + elements.each(function() { + $(this).trigger("appear"); + }); + } + }); + } + + /* Force initial check if images should appear. */ + $(window).load(function() { + update(); + }); + + return this; + }; + + /* Convenience methods in jQuery namespace. */ + /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ + + $.belowthefold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.height() + $window.scrollTop(); + } else { + fold = $(settings.container).offset().top + $(settings.container).height(); + } + + return fold <= $(element).offset().top - settings.threshold; + }; + + $.rightoffold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.width() + $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left + $(settings.container).width(); + } + + return fold <= $(element).offset().left - settings.threshold; + }; + + $.abovethetop = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollTop(); + } else { + fold = $(settings.container).offset().top; + } + + return fold >= $(element).offset().top + settings.threshold + $(element).height(); + }; + + $.leftofbegin = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left; + } + + return fold >= $(element).offset().left + settings.threshold + $(element).width(); + }; + + $.inviewport = function(element, settings) { + return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && + !$.belowthefold(element, settings) && !$.abovethetop(element, settings); + }; + + /* Custom selectors for your convenience. */ + /* Use as $("img:below-the-fold").something() or */ + /* $("img").filter(":below-the-fold").something() which is faster */ + + $.extend($.expr[':'], { + "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, + "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, + "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, + /* Maintain BC for couple of versions. */ + "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } + }); + +})(jQuery, window, document); + +/* autogeneration */ +define("jquery-lazyload", [ + "jquery" +], function(){}); + +/* @source lib/jquery.timeago.js */; + +/** + * Timeago is a jQuery plugin that makes it easy to support automatically + * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). + * + * @name timeago + * @version 0.11.1 + * @requires jQuery v1.2.3+ + * @author Ryan McGeary + * @license MIT License - http://www.opensource.org/licenses/mit-license.php + * + * For usage and examples, visit: + * http://timeago.yarp.com/ + * + * Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org) + */ +(function($) { + $.timeago = function(timestamp) { + if (timestamp instanceof Date) { + return inWords(timestamp); + } else if (typeof timestamp === "string") { + return inWords($.timeago.parse(timestamp)); + } else { + return inWords($.timeago.datetime(timestamp)); + } + }; + var $t = $.timeago; + + $.extend($.timeago, { + settings: { + refreshMillis: 60000, + allowFuture: false, + strings: { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "ago", + suffixFromNow: "from now", + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years", + wordSeparator: " ", + numbers: [] + } + }, + inWords: function(distanceMillis) { + var $l = this.settings.strings; + var prefix = $l.prefixAgo; + var suffix = $l.suffixAgo; + if (this.settings.allowFuture) { + if (distanceMillis < 0) { + prefix = $l.prefixFromNow; + suffix = $l.suffixFromNow; + } + } + + var seconds = Math.abs(distanceMillis) / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + function substitute(stringOrFunction, number) { + var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; + var value = ($l.numbers && $l.numbers[number]) || number; + return string.replace(/%d/i, value); + } + + var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || + seconds < 90 && substitute($l.minute, 1) || + minutes < 45 && substitute($l.minutes, Math.round(minutes)) || + minutes < 90 && substitute($l.hour, 1) || + hours < 24 && substitute($l.hours, Math.round(hours)) || + hours < 42 && substitute($l.day, 1) || + days < 30 && substitute($l.days, Math.round(days)) || + days < 45 && substitute($l.month, 1) || + days < 365 && substitute($l.months, Math.round(days / 30)) || + years < 1.5 && substitute($l.year, 1) || + substitute($l.years, Math.round(years)); + + var separator = $l.wordSeparator === undefined ? " " : $l.wordSeparator; + return $.trim([prefix, words, suffix].join(separator)); + }, + parse: function(iso8601) { + var s = $.trim(iso8601); + s = s.replace(/\.\d\d\d+/,""); // remove milliseconds + s = s.replace(/-/,"/").replace(/-/,"/"); + s = s.replace(/T/," ").replace(/Z/," UTC"); + s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 + return new Date(s); + }, + datetime: function(elem) { + // jQuery's `is()` doesn't play well with HTML5 in IE + var isTime = $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); + var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title"); + return $t.parse(iso8601); + } + }); + + $.fn.timeago = function() { + var self = this; + self.each(refresh); + + var $s = $t.settings; + if ($s.refreshMillis > 0) { + setInterval(function() { self.each(refresh); }, $s.refreshMillis); + } + return self; + }; + + function refresh() { + var data = prepareData(this); + if (!isNaN(data.datetime)) { + $(this).text(inWords(data.datetime)); + } + return this; + } + + function prepareData(element) { + element = $(element); + if (!element.data("timeago")) { + element.data("timeago", { datetime: $t.datetime(element) }); + var text = $.trim(element.text()); + if (text.length > 0) { + element.attr("title", text); + } + } + return element.data("timeago"); + } + + function inWords(date) { + return $t.inWords(distance(date)); + } + + function distance(date) { + return (new Date().getTime() - date.getTime()); + } + + // fix for IE6 suckage + document.createElement("abbr"); + document.createElement("time"); +}(jQuery)); + +/* autogeneration */ +define("jquery-timeago", [ + "jquery" +], function(){}); + +/* @source lib/jquery.tmpl.js */; + +/*! + * jQuery Templates Plugin 1.0.0pre + * http://github.com/jquery/jquery-tmpl + * Requires jQuery 1.4.2 + * + * Copyright 2011, Software Freedom Conservancy, Inc. + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ +(function( jQuery, undefined ){ + var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /, + newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = []; + + function newTmplItem( options, parentItem, fn, data ) { + // Returns a template item data structure for a new rendered instance of a template (a 'template item'). + // The content field is a hierarchical array of strings and nested items (to be + // removed and replaced by nodes field of dom elements, once inserted in DOM). + var newItem = { + data: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}), + _wrap: parentItem ? parentItem._wrap : null, + tmpl: null, + parent: parentItem || null, + nodes: [], + calls: tiCalls, + nest: tiNest, + wrap: tiWrap, + html: tiHtml, + update: tiUpdate + }; + if ( options ) { + jQuery.extend( newItem, options, { nodes: [], parent: parentItem }); + } + if ( fn ) { + // Build the hierarchical content to be used during insertion into DOM + newItem.tmpl = fn; + newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem ); + newItem.key = ++itemKey; + // Keep track of new template item, until it is stored as jQuery Data on DOM element + (stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem; + } + return newItem; + } + + // Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core). + jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems, + parent = this.length === 1 && this[0].parentNode; + + appendToTmplItems = newTmplItems || {}; + if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { + insert[ original ]( this[0] ); + ret = this; + } else { + for ( i = 0, l = insert.length; i < l; i++ ) { + cloneIndex = i; + elems = (i > 0 ? this.clone(true) : this).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } + cloneIndex = 0; + ret = this.pushStack( ret, name, insert.selector ); + } + tmplItems = appendToTmplItems; + appendToTmplItems = null; + jQuery.tmpl.complete( tmplItems ); + return ret; + }; + }); + + jQuery.fn.extend({ + // Use first wrapped element as template markup. + // Return wrapped set of template items, obtained by rendering template against data. + tmpl: function( data, options, parentItem ) { + return jQuery.tmpl( this[0], data, options, parentItem ); + }, + + // Find which rendered template item the first wrapped DOM element belongs to + tmplItem: function() { + return jQuery.tmplItem( this[0] ); + }, + + // Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template. + template: function( name ) { + return jQuery.template( name, this[0] ); + }, + + domManip: function( args, table, callback, options ) { + if ( args[0] && jQuery.isArray( args[0] )) { + var dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem; + while ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], "tmplItem" ))) {} + if ( tmplItem && cloneIndex ) { + dmArgs[2] = function( fragClone ) { + // Handler called by oldManip when rendered template has been inserted into DOM. + jQuery.tmpl.afterManip( this, fragClone, callback ); + }; + } + oldManip.apply( this, dmArgs ); + } else { + oldManip.apply( this, arguments ); + } + cloneIndex = 0; + if ( !appendToTmplItems ) { + jQuery.tmpl.complete( newTmplItems ); + } + return this; + } + }); + + jQuery.extend({ + // Return wrapped set of template items, obtained by rendering template against data. + tmpl: function( tmpl, data, options, parentItem ) { + var ret, topLevel = !parentItem; + if ( topLevel ) { + // This is a top-level tmpl call (not from a nested template using {{tmpl}}) + parentItem = topTmplItem; + tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl ); + wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level + } else if ( !tmpl ) { + // The template item is already associated with DOM - this is a refresh. + // Re-evaluate rendered template for the parentItem + tmpl = parentItem.tmpl; + newTmplItems[parentItem.key] = parentItem; + parentItem.nodes = []; + if ( parentItem.wrapped ) { + updateWrapped( parentItem, parentItem.wrapped ); + } + // Rebuild, without creating a new template item + return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) )); + } + if ( !tmpl ) { + return []; // Could throw... + } + if ( typeof data === "function" ) { + data = data.call( parentItem || {} ); + } + if ( options && options.wrapped ) { + updateWrapped( options, options.wrapped ); + } + ret = jQuery.isArray( data ) ? + jQuery.map( data, function( dataItem ) { + return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null; + }) : + [ newTmplItem( options, parentItem, tmpl, data ) ]; + return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret; + }, + + // Return rendered template item for an element. + tmplItem: function( elem ) { + var tmplItem; + if ( elem instanceof jQuery ) { + elem = elem[0]; + } + while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {} + return tmplItem || topTmplItem; + }, + + // Set: + // Use $.template( name, tmpl ) to cache a named template, + // where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc. + // Use $( "selector" ).template( name ) to provide access by name to a script block template declaration. + + // Get: + // Use $.template( name ) to access a cached template. + // Also $( selectorToScriptBlock ).template(), or $.template( null, templateString ) + // will return the compiled template, without adding a name reference. + // If templateString includes at least one HTML tag, $.template( templateString ) is equivalent + // to $.template( null, templateString ) + template: function( name, tmpl ) { + if (tmpl) { + // Compile template and associate with name + if ( typeof tmpl === "string" ) { + // This is an HTML string being passed directly in. + tmpl = buildTmplFn( tmpl ); + } else if ( tmpl instanceof jQuery ) { + tmpl = tmpl[0] || {}; + } + if ( tmpl.nodeType ) { + // If this is a template block, use cached copy, or generate tmpl function and cache. + tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML )); + // Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space. + // This means that foo="${x}" will not work if the value of x includes white space: foo="${x}" -> foo=value of x. + // To correct this, include space in tag: foo="${ x }" -> foo="value of x" + } + return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl; + } + // Return named compiled template + return name ? (typeof name !== "string" ? jQuery.template( null, name ): + (jQuery.template[name] || + // If not in map, and not containing at least on HTML tag, treat as a selector. + // (If integrated with core, use quickExpr.exec) + jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null; + }, + + encode: function( text ) { + // Do HTML encoding replacing < > & and ' and " by corresponding entities. + return ("" + text).split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'"); + } + }); + + jQuery.extend( jQuery.tmpl, { + tag: { + "tmpl": { + _default: { $2: "null" }, + open: "if($notnull_1){__=__.concat($item.nest($1,$2));}" + // tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions) + // This means that {{tmpl foo}} treats foo as a template (which IS a function). + // Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}. + }, + "wrap": { + _default: { $2: "null" }, + open: "$item.calls(__,$1,$2);__=[];", + close: "call=$item.calls();__=call._.concat($item.wrap(call,__));" + }, + "each": { + _default: { $2: "$index, $value" }, + open: "if($notnull_1){$.each($1a,function($2){with(this){", + close: "}});}" + }, + "if": { + open: "if(($notnull_1) && $1a){", + close: "}" + }, + "else": { + _default: { $1: "true" }, + open: "}else if(($notnull_1) && $1a){" + }, + "html": { + // Unecoded expression evaluation. + open: "if($notnull_1){__.push($1a);}" + }, + "=": { + // Encoded expression evaluation. Abbreviated form is ${}. + _default: { $1: "$data" }, + open: "if($notnull_1){__.push($.encode($1a));}" + }, + "!": { + // Comment tag. Skipped by parser + open: "" + } + }, + + // This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events + complete: function( items ) { + newTmplItems = {}; + }, + + // Call this from code which overrides domManip, or equivalent + // Manage cloning/storing template items etc. + afterManip: function afterManip( elem, fragClone, callback ) { + // Provides cloned fragment ready for fixup prior to and after insertion into DOM + var content = fragClone.nodeType === 11 ? + jQuery.makeArray(fragClone.childNodes) : + fragClone.nodeType === 1 ? [fragClone] : []; + + // Return fragment to original caller (e.g. append) for DOM insertion + callback.call( elem, fragClone ); + + // Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data. + storeTmplItems( content ); + cloneIndex++; + } + }); + + //========================== Private helper functions, used by code above ========================== + + function build( tmplItem, nested, content ) { + // Convert hierarchical content into flat string array + // and finally return array of fragments ready for DOM insertion + var frag, ret = content ? jQuery.map( content, function( item ) { + return (typeof item === "string") ? + // Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM. + (tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) : + // This is a child template item. Build nested template. + build( item, tmplItem, item._ctnt ); + }) : + // If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}. + tmplItem; + if ( nested ) { + return ret; + } + + // top-level template + ret = ret.join(""); + + // Support templates which have initial or final text nodes, or consist only of text + // Also support HTML entities within the HTML markup. + ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) { + frag = jQuery( middle ).get(); + + storeTmplItems( frag ); + if ( before ) { + frag = unencode( before ).concat(frag); + } + if ( after ) { + frag = frag.concat(unencode( after )); + } + }); + return frag ? frag : unencode( ret ); + } + + function unencode( text ) { + // Use createElement, since createTextNode will not render HTML entities correctly + var el = document.createElement( "div" ); + el.innerHTML = text; + return jQuery.makeArray(el.childNodes); + } + + // Generate a reusable function that will serve to render a template against data + function buildTmplFn( markup ) { + return new Function("jQuery","$item", + // Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10). + "var $=jQuery,call,__=[],$data=$item.data;" + + + // Introduce the data as local variables using with(){} + "with($data){__.push('" + + + // Convert the template into pure JavaScript + jQuery.trim(markup) + .replace( /([\\'])/g, "\\$1" ) + .replace( /[\r\t\n]/g, " " ) + .replace( /\$\{([^\}]*)\}/g, "{{= $1}}" ) + .replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g, + function( all, slash, type, fnargs, target, parens, args ) { + var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect; + if ( !tag ) { + throw "Unknown template tag: " + type; + } + def = tag._default || []; + if ( parens && !/\w$/.test(target)) { + target += parens; + parens = ""; + } + if ( target ) { + target = unescape( target ); + args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : ""); + // Support for target being things like a.toLowerCase(); + // In that case don't call with template item as 'this' pointer. Just evaluate... + expr = parens ? (target.indexOf(".") > -1 ? target + unescape( parens ) : ("(" + target + ").call($item" + args)) : target; + exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))"; + } else { + exprAutoFnDetect = expr = def.$1 || "null"; + } + fnargs = unescape( fnargs ); + return "');" + + tag[ slash ? "close" : "open" ] + .split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" ) + .split( "$1a" ).join( exprAutoFnDetect ) + .split( "$1" ).join( expr ) + .split( "$2" ).join( fnargs || def.$2 || "" ) + + "__.push('"; + }) + + "');}return __;" + ); + } + function updateWrapped( options, wrapped ) { + // Build the wrapped content. + options._wrap = build( options, true, + // Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string. + jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()] + ).join(""); + } + + function unescape( args ) { + return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null; + } + function outerHtml( elem ) { + var div = document.createElement("div"); + div.appendChild( elem.cloneNode(true) ); + return div.innerHTML; + } + + // Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance. + function storeTmplItems( content ) { + var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m; + for ( i = 0, l = content.length; i < l; i++ ) { + if ( (elem = content[i]).nodeType !== 1 ) { + continue; + } + elems = elem.getElementsByTagName("*"); + for ( m = elems.length - 1; m >= 0; m-- ) { + processItemKey( elems[m] ); + } + processItemKey( elem ); + } + function processItemKey( el ) { + var pntKey, pntNode = el, pntItem, tmplItem, key; + // Ensure that each rendered template inserted into the DOM has its own template item, + if ( (key = el.getAttribute( tmplItmAtt ))) { + while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { } + if ( pntKey !== key ) { + // The next ancestor with a _tmplitem expando is on a different key than this one. + // So this is a top-level element within this template item + // Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment. + pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0; + if ( !(tmplItem = newTmplItems[key]) ) { + // The item is for wrapped content, and was copied from the temporary parent wrappedItem. + tmplItem = wrappedItems[key]; + tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] ); + tmplItem.key = ++itemKey; + newTmplItems[itemKey] = tmplItem; + } + if ( cloneIndex ) { + cloneTmplItem( key ); + } + } + el.removeAttribute( tmplItmAtt ); + } else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) { + // This was a rendered element, cloned during append or appendTo etc. + // TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem. + cloneTmplItem( tmplItem.key ); + newTmplItems[tmplItem.key] = tmplItem; + pntNode = jQuery.data( el.parentNode, "tmplItem" ); + pntNode = pntNode ? pntNode.key : 0; + } + if ( tmplItem ) { + pntItem = tmplItem; + // Find the template item of the parent element. + // (Using !=, not !==, since pntItem.key is number, and pntNode may be a string) + while ( pntItem && pntItem.key != pntNode ) { + // Add this element as a top-level node for this rendered template item, as well as for any + // ancestor items between this item and the item of its parent element + pntItem.nodes.push( el ); + pntItem = pntItem.parent; + } + // Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering... + delete tmplItem._ctnt; + delete tmplItem._wrap; + // Store template item as jQuery data on the element + jQuery.data( el, "tmplItem", tmplItem ); + } + function cloneTmplItem( key ) { + key = key + keySuffix; + tmplItem = newClonedItems[key] = + (newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent )); + } + } + } + + //---- Helper functions for template item ---- + + function tiCalls( content, tmpl, data, options ) { + if ( !content ) { + return stack.pop(); + } + stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options }); + } + + function tiNest( tmpl, data, options ) { + // nested template, using {{tmpl}} tag + return jQuery.tmpl( jQuery.template( tmpl ), data, options, this ); + } + + function tiWrap( call, wrapped ) { + // nested template, using {{wrap}} tag + var options = call.options || {}; + options.wrapped = wrapped; + // Apply the template, which may incorporate wrapped content, + return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item ); + } + + function tiHtml( filter, textOnly ) { + var wrapped = this._wrap; + return jQuery.map( + jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ), + function(e) { + return textOnly ? + e.innerText || e.textContent : + e.outerHTML || outerHtml(e); + }); + } + + function tiUpdate() { + var coll = this.nodes; + jQuery.tmpl( null, null, null, this).insertBefore( coll[0] ); + jQuery( coll ).remove(); + } +})( jQuery ); + +/* autogeneration */ +define("jquery-tmpl", [ + "jquery" +], function(){}); + +/* @source lib/keymaster.js */; + +// keymaster.js +// (c) 2011-2012 Thomas Fuchs +// keymaster.js may be freely distributed under the MIT license. + +;(function(global){ + var k, + _handlers = {}, + _mods = { 16: false, 18: false, 17: false, 91: false }, + _scope = 'all', + // modifier keys + _MODIFIERS = { + '⇧': 16, shift: 16, + '⌥': 18, alt: 18, option: 18, + '⌃': 17, ctrl: 17, control: 17, + '⌘': 91, command: 91 + }, + // special keys + _MAP = { + backspace: 8, tab: 9, clear: 12, + enter: 13, 'return': 13, + esc: 27, escape: 27, space: 32, + left: 37, up: 38, + right: 39, down: 40, + del: 46, 'delete': 46, + home: 36, end: 35, + pageup: 33, pagedown: 34, + ',': 188, '.': 190, '/': 191, + '`': 192, '-': 189, '=': 187, + ';': 186, '\'': 222, + '[': 219, ']': 221, '\\': 220 + }, + _downKeys = []; + + for(k=1;k<20;k++) _MODIFIERS['f'+k] = 111+k; + + // IE doesn't support Array#indexOf, so have a simple replacement + function index(array, item){ + var i = array.length; + while(i--) if(array[i]===item) return i; + return -1; + } + + // handle keydown event + function dispatch(event, scope){ + var key, handler, k, i, modifiersMatch; + key = event.keyCode; + + if (index(_downKeys, key) == -1) { + _downKeys.push(key); + } + + // if a modifier key, set the key.<modifierkeyname> property to true and return + if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko + if(key in _mods) { + _mods[key] = true; + // 'assignKey' from inside this closure is exported to window.key + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true; + return; + } + + // see if we need to ignore the keypress (filter() can can be overridden) + // by default ignore key presses if a select, textarea, or input is focused + if(!assignKey.filter.call(this, event)) return; + + // abort if no potentially matching shortcuts found + if (!(key in _handlers)) return; + + // for each potential shortcut + for (i = 0; i < _handlers[key].length; i++) { + handler = _handlers[key][i]; + + // see if it's in the current scope + if(handler.scope == scope || handler.scope == 'all'){ + // check if modifiers match if any + modifiersMatch = handler.mods.length > 0; + for(k in _mods) + if((!_mods[k] && index(handler.mods, +k) > -1) || + (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false; + // call the handler and stop the event if neccessary + if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ + if(handler.method(event, handler)===false){ + if(event.preventDefault) event.preventDefault(); + else event.returnValue = false; + if(event.stopPropagation) event.stopPropagation(); + if(event.cancelBubble) event.cancelBubble = true; + } + } + } + } + }; + + // unset modifier keys on keyup + function clearModifier(event){ + var key = event.keyCode, k, + i = index(_downKeys, key); + + // remove key from _downKeys + if (i >= 0) { + _downKeys.splice(i, 1); + } + + if(key == 93 || key == 224) key = 91; + if(key in _mods) { + _mods[key] = false; + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false; + } + }; + + function resetModifiers() { + for(k in _mods) _mods[k] = false; + for(k in _MODIFIERS) assignKey[k] = false; + } + + // parse and assign shortcut + function assignKey(key, scope, method){ + var keys, mods, i, mi; + if (method === undefined) { + method = scope; + scope = 'all'; + } + key = key.replace(/\s/g,''); + keys = key.split(','); + + if((keys[keys.length-1])=='') + keys[keys.length-2] += ','; + // for each shortcut + for (i = 0; i < keys.length; i++) { + // set modifier keys if any + mods = []; + key = keys[i].split('+'); + if(key.length > 1){ + mods = key.slice(0,key.length-1); + for (mi = 0; mi < mods.length; mi++) + mods[mi] = _MODIFIERS[mods[mi]]; + key = [key[key.length-1]]; + } + // convert to keycode and... + key = key[0] + key = _MAP[key] || key.toUpperCase().charCodeAt(0); + // ...store handler + if (!(key in _handlers)) _handlers[key] = []; + _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods }); + } + }; + + // Returns true if the key with code 'keyCode' is currently down + // Converts strings into key codes. + function isPressed(keyCode) { + if (typeof(keyCode)=='string') { + if (keyCode.length == 1) { + keyCode = (keyCode.toUpperCase()).charCodeAt(0); + } else { + return false; + } + } + return index(_downKeys, keyCode) != -1; + } + + function getPressedKeyCodes() { + return _downKeys; + } + + function filter(event){ + var tagName = (event.target || event.srcElement).tagName; + // ignore keypressed in any elements that support keyboard data input + return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA'); + } + + // initialize key.<modifier> to false + for(k in _MODIFIERS) assignKey[k] = false; + + // set current scope (default 'all') + function setScope(scope){ _scope = scope || 'all' }; + function getScope(){ return _scope || 'all' }; + + // delete all handlers for a given scope + function deleteScope(scope){ + var key, handlers, i; + + for (key in _handlers) { + handlers = _handlers[key]; + for (i = 0; i < handlers.length; ) { + if (handlers[i].scope === scope) handlers.splice(i, 1); + else i++; + } + } + }; + + // cross-browser events + function addEvent(object, event, method) { + if (object.addEventListener) + object.addEventListener(event, method, false); + else if(object.attachEvent) + object.attachEvent('on'+event, function(){ method(window.event) }); + }; + + // set the handlers globally on document + addEvent(document, 'keydown', function(event) { dispatch(event, _scope) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 + addEvent(document, 'keyup', clearModifier); + + // reset modifiers to false whenever the window is (re)focused. + addEvent(window, 'focus', resetModifiers); + + // store previously defined key + var previousKey = global.key; + + // restore previously defined key and return reference to our key object + function noConflict() { + var k = global.key; + global.key = previousKey; + return k; + } + + // set window.key and window.key.set/get/deleteScope, and the default filter + global.key = assignKey; + global.key.setScope = setScope; + global.key.getScope = getScope; + global.key.deleteScope = deleteScope; + global.key.filter = filter; + global.key.isPressed = isPressed; + global.key.getPressedKeyCodes = getPressedKeyCodes; + global.key.noConflict = noConflict; + + if(typeof module !== 'undefined') module.exports = key; + +})(this); + +/* autogeneration */ +define("lib/keymaster.js", [], function(){}); + +/* @source mod/emoji-hint.js */; + +define('mod/emoji-hint', [ + "jquery", + "key" +], function($, key) { + var emojiHint; + $('#show-emoji-hint').click( + function () { + if (!emojiHint) { + emojiHint = $('<div class="emoji-hint"><iframe src="/hub/emoji" width="650" height="600" frameborder="0"></iframe><a href="javascript:void(0)" id="close">X</a></div>').appendTo('body'); + emojiHint.find('#close').click(function () {emojiHint.hide();}); + $('body').click(function () {emojiHint.hide();}); + } + emojiHint.show().css('top', $(window).scrollTop()); + return false; + }); + + key('esc', function(){ + emojiHint.hide(); + }); +}); + +/* @source mod/search_autocomplete.js */; + +define('mod/search_autocomplete', [ + "jquery" +], function($) { + var keyCode = {enter:13, esc:27, tab:9, up:38, down:40, ctrl:17, n:78, p:80}; + var searchInput = $('#global-search-field'), search_repos_menu, + hideReposMenu = function () { + search_repos_menu && !searchInput.is(":focus") + && !search_repos_menu.is(":focus") && search_repos_menu.empty().hide(); + }, + showIntro = function () { + if (!search_repos_menu || search_repos_menu.is(':empty')) { + var introContent = '<ul><li class="intro">Input project name to search <b>project</b> or startswith <span style="color:#4183C4">"@"</span> to search <b>user</b>.</li></ul>'; + search_repos_menu = $('<div id="search-repos-menu"></div>').appendTo('#search') + .on('mouseenter', 'li', function () { + search_repos_menu.find('li.active').removeClass('active'); + $(this).addClass('active'); + }) + .on('click', 'li', function (e) { + e.preventDefault(); + var url = $(this).attr('data-url'); + url && (window.location.href = url); + }); + search_repos_menu.html(introContent).show(); + } + }; + $('body').click(function () {setTimeout(hideReposMenu, 100);}); + searchInput + .focusin(showIntro) + .keydown(function (e) { + (e.keyCode == keyCode.enter && search_repos_menu && search_repos_menu.find('li.active').length) && e.preventDefault(); + }) + .keyup( + function (e) { + var k = e.keyCode; + if (k == keyCode.up || k == keyCode.down || k == keyCode.n + || k == keyCode.p || k == keyCode.ctrl || k == keyCode.enter) { + if (search_repos_menu && search_repos_menu.find('li').length) { + (k == keyCode.esc) && hideReposMenu();// esc key to close the menu + var actItem = search_repos_menu.find('li.active'); + if (actItem.length) { + var a = actItem; + if (k == keyCode.up || + (k == keyCode.p && e.ctrlKey == true)) { // up + var p = a.removeClass('active').prev(); + (p.length ? p : search_repos_menu.find('li:last')).addClass('active'); + } else if (k == keyCode.down || + (k == keyCode.n && e.ctrlKey == true)) { // down + var n = a.removeClass('active').next(); + (n.length ? n : search_repos_menu.find('li:first')).addClass('active'); + } else if (k == keyCode.enter) { // enter key to go to repo + e.preventDefault(); + var url = actItem.attr('data-url'); + url && (window.location.href = url); + } + } else { + search_repos_menu.find('li:first').addClass('active'); + } + } + } else { + var q = $(this).val(), reqUrl, templ; + if (q.substr(0, 1) == '@') { + // search for users + q = q.substring(1); + reqUrl = '/api/autocomplete_users'; + templ = $('#templ-users-autocomplete'); + } else { + // search for repos + reqUrl = '/api/autocomplete_repos'; + templ = $('#templ-repos-autocomplete'); + } + (q != '') ? $.getJSON(reqUrl, + {q:q}, + function (r) { + var current_q = searchInput.val(); + if (current_q === q) { + search_repos_menu.html($.tmpl(templ, r)).show(); + } + }) : showIntro(); + } + }); + +}); + +/* @source lib/store.js */; + +;(function(win){ + var store = {}, + doc = win.document, + localStorageName = 'localStorage', + namespace = '__storejs__', + storage + + store.disabled = false + store.set = function(key, value) {} + store.get = function(key) {} + store.remove = function(key) {} + store.clear = function() {} + store.transact = function(key, defaultVal, transactionFn) { + var val = store.get(key) + if (transactionFn == null) { + transactionFn = defaultVal + defaultVal = null + } + if (typeof val == 'undefined') { val = defaultVal || {} } + transactionFn(val) + store.set(key, val) + } + store.getAll = function() {} + + store.serialize = function(value) { + return JSON.stringify(value) + } + store.deserialize = function(value) { + if (typeof value != 'string') { return undefined } + try { return JSON.parse(value) } + catch(e) { return value || undefined } + } + + // Functions to encapsulate questionable FireFox 3.6.13 behavior + // when about.config::dom.storage.enabled === false + // See https://github.com/marcuswestin/store.js/issues#issue/13 + function isLocalStorageNameSupported() { + try { return (localStorageName in win && win[localStorageName]) } + catch(err) { return false } + } + + if (isLocalStorageNameSupported()) { + storage = win[localStorageName] + store.set = function(key, val) { + if (val === undefined) { return store.remove(key) } + storage.setItem(key, store.serialize(val)) + return val + } + store.get = function(key) { return store.deserialize(storage.getItem(key)) } + store.remove = function(key) { storage.removeItem(key) } + store.clear = function() { storage.clear() } + store.getAll = function() { + var ret = {} + for (var i=0; i<storage.length; ++i) { + var key = storage.key(i) + ret[key] = store.get(key) + } + return ret + } + } else if (doc.documentElement.addBehavior) { + var storageOwner, + storageContainer + // Since #userData storage applies only to specific paths, we need to + // somehow link our data to a specific path. We choose /favicon.ico + // as a pretty safe option, since all browsers already make a request to + // this URL anyway and being a 404 will not hurt us here. We wrap an + // iframe pointing to the favicon in an ActiveXObject(htmlfile) object + // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx) + // since the iframe access rules appear to allow direct access and + // manipulation of the document element, even for a 404 page. This + // document can be used instead of the current document (which would + // have been limited to the current path) to perform #userData storage. + try { + storageContainer = new ActiveXObject('htmlfile') + storageContainer.open() + storageContainer.write('<s' + 'cript>document.w=window</s' + 'cript><iframe src="/favicon.ico"></iframe>') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } + + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + var ret = {} + for (var i=0, attr; attr=attributes[i]; ++i) { + var key = ieKeyFix(attr.name) + ret[attr.name] = store.deserialize(storage.getAttribute(key)) + } + return ret + }) + } + + try { + store.set(namespace, namespace) + if (store.get(namespace) != namespace) { store.disabled = true } + store.remove(namespace) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define("store", store) } + else { win.store = store } +})(this.window || global); + +/* @source mod/user_following.js */; + +define('store', 'lib/store.js'); +define('mod/user_following', [ + "jquery", + "store" +], function($, store) { + var API_USER_FOLLOWING_PATH = "/api/user/following" + var USER_FOLLOWING_KEY = "user-following"; + var USER_FOLLOWING_UPDATE_KEY= "date:user-following" + var ONE_DAY_IN_SECONDS = 60*60*24; + + var update = function() { + var currentTime = new Date().getTime(); + var lastTime = store.get(USER_FOLLOWING_UPDATE_KEY); + if (lastTime && (currentTime - lastTime) < ONE_DAY_IN_SECONDS ) { + return; + } + + $.ajax( + API_USER_FOLLOWING_PATH + ).done(function(users){ + var following = $.map(users, function(item){ + return item["username"]; + }); + store.set(USER_FOLLOWING_KEY, following); + store.set(USER_FOLLOWING_UPDATE_KEY, currentTime); + }).fail(function(jqxhr, textStatus, error){ + return; + }); + } + + return { + update: update, + val: function(){ + return store.get(USER_FOLLOWING_KEY) || []; + } + }; + +}); + +/* @source mod/code_version.js */; + +define('mod/code_version', [ + "jquery" +], function($) { + + function init(){ + $.getJSON("/api/get_code_version", function(data){ + var sha = data.code_version; + var time = data.release_time; + $('#rev_sha').html(sha); + $('#rel_time').html(time.substr(5,11)); + }); + } + + return { + init: init + }; + +}); + +/* @source lib/date.extensions.js */; + +/** + * Returns a description of this date in relative terms. + + * Examples, where new Date().toString() == "Mon Nov 23 2009 17:36:51 GMT-0500 (EST)": + * + * new Date().toRelativeTime() + * --> 'Just now' + * + * new Date("Nov 21, 2009").toRelativeTime() + * --> '2 days ago' + * + * new Date("Nov 25, 2009").toRelativeTime() + * --> '2 days from now' + * + * // One second ago + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime() + * --> '1 second ago' + * + * toRelativeTime() takes an optional argument - a configuration object. + * It can have the following properties: + * - now - Date object that defines "now" for the purpose of conversion. + * By default, current date & time is used (i.e. new Date()) + * - nowThreshold - Threshold in milliseconds which is considered "Just now" + * for times in the past or "Right now" for now or the immediate future + * - smartDays - If enabled, dates within a week of now will use Today/Yesterday/Tomorrow + * or weekdays along with time, e.g. "Thursday at 15:10:34" + * rather than "4 days ago" or "Tomorrow at 20:12:01" + * instead of "1 day from now" + * + * If a single number is given as argument, it is interpreted as nowThreshold: + * + * // One second ago, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:50 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Just now' + * + * // One second in the future, now setting a now_threshold to 5 seconds + * new Date("Nov 23 2009 17:36:52 GMT-0500 (EST)").toRelativeTime(5000) + * --> 'Right now' + * + */ +var TRANSLATIONS = { + 'Right now':'现在', + 'Just now':'刚刚', + 'from now':'之后', + 'ago':'前', + 'Today':'今天', + 'Yesterday':'昨天', + 'Tomorrow':'明天', + ' at ':'', + 's':'', + ' ':'', + 'millisecond':'毫秒', + 'second':'秒', + 'minute':'分钟', + 'hour':'小时', + 'day':'天', + 'month':'个月', + 'year':'年', + 'Sunday':'星期天', + 'Monday':'星期六', + 'Tuesday':'星期二', + 'Wednesday':'星期三', + 'Thursday':'星期四', + 'Friday':'星期五', + 'Saturday':'星期六' +}, +_t = function (key) {return TRANSLATIONS[key];}; + + Date.prototype.toRelativeTime = (function() { + + var _ = function(options) { + var opts = processOptions(options); + + var now = opts.now || new Date(); + var delta = now - this; + var future = (delta <= 0); + delta = Math.abs(delta); + + // special cases controlled by options + if (delta <= opts.nowThreshold) { + return future ? _t('Right now') : _t('Just now'); + } + if (opts.smartDays && delta <= 6 * MS_IN_DAY) { + return toSmartDays(this, now); + } + + var units = null; + for (var key in CONVERSIONS) { + if (delta < CONVERSIONS[key]) + break; + units = _t(key); // keeps track of the selected key over the iteration + delta = delta / CONVERSIONS[key]; + } + + // pluralize a unit when the difference is greater than 1. + delta = Math.floor(delta); + if (delta !== 1) { units += _t("s"); } + return [delta, units, future ? _t("from now") : _t("ago")].join(_t(" ")); + }; + + var processOptions = function(arg) { + if (!arg) arg = 0; + if (typeof arg === 'string') { + arg = parseInt(arg, 10); + } + if (typeof arg === 'number') { + if (isNaN(arg)) arg = 0; + return {nowThreshold: arg}; + } + return arg; + }; + + var toSmartDays = function(date, now) { + var day; + var weekday = date.getDay(), + dayDiff = weekday - now.getDay(); + if (dayDiff == 0) day = _t('Today'); + else if (dayDiff == -1) day = _t('Yesterday'); + else if (dayDiff == 1 && date > now) day = _t('Tomorrow'); + else day = WEEKDAYS[weekday]; + return day + _t(" at ") + date.toLocaleTimeString(); + }; + + var CONVERSIONS = { + millisecond: 1, // ms -> ms + second: 1000, // ms -> sec + minute: 60, // sec -> min + hour: 60, // min -> hour + day: 24, // hour -> day + month: 30, // day -> month (roughly) + year: 12 // month -> year + }; + var MS_IN_DAY = (CONVERSIONS.millisecond * CONVERSIONS.second * CONVERSIONS.minute * CONVERSIONS.hour * CONVERSIONS.day); + + var WEEKDAYS = [_t('Sunday'), _t('Monday'), _t('Tuesday'), _t('Wednesday'), _t('Thursday'), _t('Friday'), _t('Saturday')]; + + return _; + +})(); + + + +/* + * Wraps up a common pattern used with this plugin whereby you take a String + * representation of a Date, and want back a date object. + */ +Date.fromString = function(str) { + return new Date(Date.parse(str)); +}; + +/* autogeneration */ +define("lib/date.extensions", [], function(){}); + +/* @source mod/relative_date.js */; + +define('mod/relative_date', [ + "jquery", + "lib/date.extensions" +], function($) { + var updateRelativeDate = function () { + $('.js-relative-date').each( + function (i, el) { + var el = $(el); + var t = (el.attr('datetime') || el.attr('data-time')).split(/[- : + T]/); + var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]); + !isNaN(d.getTime()) && el.html(d.toRelativeTime({nowThreshold:60*1000})); + }); + }; + return updateRelativeDate; + }); + +/* @source mod/user_avatar.js */; + +define('mod/user_avatar', [ + "jquery", + "jquery-lazyload" +], function($, _) { + var isRetinaDisplay = window.devicePixelRatio > 1; + + var patchForRetina = function(originalURL) { + var match = /^(.+\Ws=)(\d+)(.*)$/.exec(originalURL); + if (match === null) { + return originalURL; + } + + var oldSize = parseInt(match[2], 10); + var newSize = Math.ceil(window.devicePixelRatio * oldSize); + + return match[1] + newSize.toString(10) + match[3]; + }; + + var checkLoad = function() { + var e = $(this); + if (isRetinaDisplay) { + var dataOriginalURL = e.attr('data-original') || e.attr('src'); + e.attr('data-original', patchForRetina(dataOriginalURL)); + + e.lazyload({effect:"fadeIn", threshold:300}); + } + }; + + var loadAvatar = function () { + // $("img.user-avatar").each(checkLoad); + // $("img.avatar").each(checkLoad); + // $(window).resize(); + }; + return loadAvatar; +}); + +/* @source */; + +require.config({ + baseUrl: '/js/' +}); + +define('jquery-src', 'lib/jquery-1.8.3.js'); +define('jquery', ['jquery-src'], function(){ + return window.jQuery; +}); + +define('jquery-tmpl', ['jquery'], 'lib/jquery.tmpl.js'); +define('jquery-lazyload', ['jquery'], 'lib/jquery.lazyload.js'); +define('jquery-caret', ['jquery'], 'lib/jquery.caret.js'); +define('jquery-atwho', ['jquery'], 'lib/jquery.atwho.js'); +define('jquery-timeago', ['jquery'], 'lib/jquery.timeago.js'); +define('jquery-forms', ['jquery'], 'lib/jquery.forms.js'); +define('jquery-unobstrusive', ['jquery'], 'lib/unobtrusive.js'); +define('jquery-zclip', ['jquery'], 'lib/jquery.zclip.js'); +define('jquery-tooltipster', ['jquery'], 'lib/jquery.tooltipster.js'); +define('socket.io', 'lib/socket.io.js'); +define('bootstrap', ['jquery'], 'lib/bootstrap-amd.js'); +define('mustache', 'lib/mustache.js'); +define('store', 'lib/store.js'); +define('spin', 'lib/spin.js'); +define('key', ['lib/keymaster.js'], function(none){ + return key; +}); +define('mousetrap', 'lib/mousetrap.js'); +define('codemirror', ['lib/codemirror.js'], function(none){ + return CodeMirror; +}); +define('bootbox-origin', ['jquery'], 'lib/bootbox.js'); + +define('bootbox', ['bootbox-origin'], function(none){ + return bootbox; +}); + +define('d3', ['lib/d3-3.3.3.js'], function(none){ + return d3; +}); +define('string-score', 'lib/string_score.js'); + + +require([ + 'jquery', + 'mod/user_avatar', + 'mod/relative_date', + 'mod/code_version', + 'mod/user_following', + 'mod/search_autocomplete', + 'mod/emoji-hint', + 'jquery-tmpl', + 'jquery-timeago', + 'jquery-lazyload', + 'jquery-caret', + 'jquery-atwho', + 'jquery-forms', + 'jquery-unobstrusive', + 'jquery-zclip', + 'jquery-tooltipster', + 'socket.io', + 'bootstrap', + 'mustache', + 'spin', + 'bootbox' +], function($, loadAvatar, updateRelativeDate, codeVersion, userFollowing) { + $(function () { + setTimeout(loadAvatar, 800); + updateRelativeDate(); + codeVersion.init(); + userFollowing.update(); + + if (("standalone" in window.navigator) && window.navigator.standalone) { + // For iOS Apps + $('a').on('click', function(e){ + e.preventDefault(); + var new_location = $(this).attr('href'); + if (new_location != undefined && new_location.substr(0, 1) != '#' && $(this).attr('data-method') == undefined){ + window.location = new_location; + } + }); + } + + }); +}); diff --git a/dist/js/mod/login.js b/dist/js/mod/login.js new file mode 100644 index 0000000..6c7c2e2 --- /dev/null +++ b/dist/js/mod/login.js @@ -0,0 +1,22091 @@ +webpackJsonp([0],[ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _reactDom = __webpack_require__(1); + + var _reactDom2 = _interopRequireDefault(_reactDom); + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _signin = __webpack_require__(159); + + var _signin2 = _interopRequireDefault(_signin); + + _reactDom2['default'].render(_react2['default'].createElement(_signin2['default'], null), document.getElementById('main')); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(2); + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOM + */ + + /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactDOMTextComponent = __webpack_require__(5); + var ReactDefaultInjection = __webpack_require__(70); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMount = __webpack_require__(27); + var ReactPerf = __webpack_require__(17); + var ReactReconciler = __webpack_require__(49); + var ReactUpdates = __webpack_require__(53); + var ReactVersion = __webpack_require__(145); + + var findDOMNode = __webpack_require__(90); + var renderSubtreeIntoContainer = __webpack_require__(146); + var warning = __webpack_require__(24); + + ReactDefaultInjection.inject(); + + var render = ReactPerf.measure('React', 'render', ReactMount.render); + + var React = { + findDOMNode: findDOMNode, + render: render, + unmountComponentAtNode: ReactMount.unmountComponentAtNode, + version: ReactVersion, + + /* eslint-disable camelcase */ + unstable_batchedUpdates: ReactUpdates.batchedUpdates, + unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer + }; + + // Inject the runtime into a devtools global hook regardless of browser. + // Allows for debugging when the hook is injected on the page. + /* eslint-enable camelcase */ + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') { + __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ + CurrentOwner: ReactCurrentOwner, + InstanceHandles: ReactInstanceHandles, + Mount: ReactMount, + Reconciler: ReactReconciler, + TextComponent: ReactDOMTextComponent + }); + } + + if (process.env.NODE_ENV !== 'production') { + var ExecutionEnvironment = __webpack_require__(8); + if (ExecutionEnvironment.canUseDOM && window.top === window.self) { + + // First check if devtools is not installed + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { + // If we're in Chrome or Firefox, provide a download link if not installed. + if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) { + console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools'); + } + } + + // If we're in IE8, check to see if we are in compatibility mode and provide + // information on preventing compatibility mode + var ieCompatibilityMode = document.documentMode && document.documentMode < 8; + + process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : undefined; + + var expectedFeatures = [ + // shims + Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim, + + // shams + Object.create, Object.freeze]; + + for (var i = 0; i < expectedFeatures.length; i++) { + if (!expectedFeatures[i]) { + console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills'); + break; + } + } + } + } + + module.exports = React; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 3 */ +/***/ function(module, exports) { + + // shim for using process in browser + + var process = module.exports = {}; + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = setTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + clearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + setTimeout(drainQueue, 0); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function() { return 0; }; + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactCurrentOwner + */ + + 'use strict'; + + /** + * Keeps track of the current owner. + * + * The current owner is the component who should own any components that are + * currently being constructed. + */ + var ReactCurrentOwner = { + + /** + * @internal + * @type {ReactComponent} + */ + current: null + + }; + + module.exports = ReactCurrentOwner; + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMTextComponent + * @typechecks static-only + */ + + 'use strict'; + + var DOMChildrenOperations = __webpack_require__(6); + var DOMPropertyOperations = __webpack_require__(21); + var ReactComponentBrowserEnvironment = __webpack_require__(25); + var ReactMount = __webpack_require__(27); + + var assign = __webpack_require__(38); + var escapeTextContentForBrowser = __webpack_require__(20); + var setTextContent = __webpack_require__(19); + var validateDOMNesting = __webpack_require__(69); + + /** + * Text nodes violate a couple assumptions that React makes about components: + * + * - When mounting text into the DOM, adjacent text nodes are merged. + * - Text nodes cannot be assigned a React root ID. + * + * This component is used to wrap strings in elements so that they can undergo + * the same reconciliation that is applied to elements. + * + * TODO: Investigate representing React components in the DOM with text nodes. + * + * @class ReactDOMTextComponent + * @extends ReactComponent + * @internal + */ + var ReactDOMTextComponent = function (props) { + // This constructor and its argument is currently used by mocks. + }; + + assign(ReactDOMTextComponent.prototype, { + + /** + * @param {ReactText} text + * @internal + */ + construct: function (text) { + // TODO: This is really a ReactText (ReactNode), not a ReactElement + this._currentElement = text; + this._stringText = '' + text; + + // Properties + this._rootNodeID = null; + this._mountIndex = 0; + }, + + /** + * Creates the markup for this text node. This node is not intended to have + * any features besides containing text content. + * + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {string} Markup for this text node. + * @internal + */ + mountComponent: function (rootID, transaction, context) { + if (process.env.NODE_ENV !== 'production') { + if (context[validateDOMNesting.ancestorInfoContextKey]) { + validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]); + } + } + + this._rootNodeID = rootID; + if (transaction.useCreateElement) { + var ownerDocument = context[ReactMount.ownerDocumentContextKey]; + var el = ownerDocument.createElement('span'); + DOMPropertyOperations.setAttributeForID(el, rootID); + // Populate node cache + ReactMount.getID(el); + setTextContent(el, this._stringText); + return el; + } else { + var escapedText = escapeTextContentForBrowser(this._stringText); + + if (transaction.renderToStaticMarkup) { + // Normally we'd wrap this in a `span` for the reasons stated above, but + // since this is a situation where React won't take over (static pages), + // we can simply return the text as it is. + return escapedText; + } + + return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>'; + } + }, + + /** + * Updates this component by updating the text content. + * + * @param {ReactText} nextText The next text content + * @param {ReactReconcileTransaction} transaction + * @internal + */ + receiveComponent: function (nextText, transaction) { + if (nextText !== this._currentElement) { + this._currentElement = nextText; + var nextStringText = '' + nextText; + if (nextStringText !== this._stringText) { + // TODO: Save this as pending props and use performUpdateIfNecessary + // and/or updateComponent to do the actual update for consistency with + // other component types? + this._stringText = nextStringText; + var node = ReactMount.getNode(this._rootNodeID); + DOMChildrenOperations.updateTextContent(node, nextStringText); + } + } + }, + + unmountComponent: function () { + ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID); + } + + }); + + module.exports = ReactDOMTextComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMChildrenOperations + * @typechecks static-only + */ + + 'use strict'; + + var Danger = __webpack_require__(7); + var ReactMultiChildUpdateTypes = __webpack_require__(15); + var ReactPerf = __webpack_require__(17); + + var setInnerHTML = __webpack_require__(18); + var setTextContent = __webpack_require__(19); + var invariant = __webpack_require__(12); + + /** + * Inserts `childNode` as a child of `parentNode` at the `index`. + * + * @param {DOMElement} parentNode Parent node in which to insert. + * @param {DOMElement} childNode Child node to insert. + * @param {number} index Index at which to insert the child. + * @internal + */ + function insertChildAt(parentNode, childNode, index) { + // By exploiting arrays returning `undefined` for an undefined index, we can + // rely exclusively on `insertBefore(node, null)` instead of also using + // `appendChild(node)`. However, using `undefined` is not allowed by all + // browsers so we must replace it with `null`. + + // fix render order error in safari + // IE8 will throw error when index out of list size. + var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index); + + parentNode.insertBefore(childNode, beforeChild); + } + + /** + * Operations for updating with DOM children. + */ + var DOMChildrenOperations = { + + dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup, + + updateTextContent: setTextContent, + + /** + * Updates a component's children by processing a series of updates. The + * update configurations are each expected to have a `parentNode` property. + * + * @param {array<object>} updates List of update configurations. + * @param {array<string>} markupList List of markup strings. + * @internal + */ + processUpdates: function (updates, markupList) { + var update; + // Mapping from parent IDs to initial child orderings. + var initialChildren = null; + // List of children that will be moved or removed. + var updatedChildren = null; + + for (var i = 0; i < updates.length; i++) { + update = updates[i]; + if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) { + var updatedIndex = update.fromIndex; + var updatedChild = update.parentNode.childNodes[updatedIndex]; + var parentID = update.parentID; + + !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined; + + initialChildren = initialChildren || {}; + initialChildren[parentID] = initialChildren[parentID] || []; + initialChildren[parentID][updatedIndex] = updatedChild; + + updatedChildren = updatedChildren || []; + updatedChildren.push(updatedChild); + } + } + + var renderedMarkup; + // markupList is either a list of markup or just a list of elements + if (markupList.length && typeof markupList[0] === 'string') { + renderedMarkup = Danger.dangerouslyRenderMarkup(markupList); + } else { + renderedMarkup = markupList; + } + + // Remove updated children first so that `toIndex` is consistent. + if (updatedChildren) { + for (var j = 0; j < updatedChildren.length; j++) { + updatedChildren[j].parentNode.removeChild(updatedChildren[j]); + } + } + + for (var k = 0; k < updates.length; k++) { + update = updates[k]; + switch (update.type) { + case ReactMultiChildUpdateTypes.INSERT_MARKUP: + insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex); + break; + case ReactMultiChildUpdateTypes.MOVE_EXISTING: + insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex); + break; + case ReactMultiChildUpdateTypes.SET_MARKUP: + setInnerHTML(update.parentNode, update.content); + break; + case ReactMultiChildUpdateTypes.TEXT_CONTENT: + setTextContent(update.parentNode, update.content); + break; + case ReactMultiChildUpdateTypes.REMOVE_NODE: + // Already removed by the for-loop above. + break; + } + } + } + + }; + + ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', { + updateTextContent: 'updateTextContent' + }); + + module.exports = DOMChildrenOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Danger + * @typechecks static-only + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var createNodesFromMarkup = __webpack_require__(9); + var emptyFunction = __webpack_require__(14); + var getMarkupWrap = __webpack_require__(13); + var invariant = __webpack_require__(12); + + var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/; + var RESULT_INDEX_ATTR = 'data-danger-index'; + + /** + * Extracts the `nodeName` from a string of markup. + * + * NOTE: Extracting the `nodeName` does not require a regular expression match + * because we make assumptions about React-generated markup (i.e. there are no + * spaces surrounding the opening tag and there is at least one attribute). + * + * @param {string} markup String of markup. + * @return {string} Node name of the supplied markup. + * @see http://jsperf.com/extract-nodename + */ + function getNodeName(markup) { + return markup.substring(1, markup.indexOf(' ')); + } + + var Danger = { + + /** + * Renders markup into an array of nodes. The markup is expected to render + * into a list of root nodes. Also, the length of `resultList` and + * `markupList` should be the same. + * + * @param {array<string>} markupList List of markup strings to render. + * @return {array<DOMElement>} List of rendered nodes. + * @internal + */ + dangerouslyRenderMarkup: function (markupList) { + !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined; + var nodeName; + var markupByNodeName = {}; + // Group markup by `nodeName` if a wrap is necessary, else by '*'. + for (var i = 0; i < markupList.length; i++) { + !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined; + nodeName = getNodeName(markupList[i]); + nodeName = getMarkupWrap(nodeName) ? nodeName : '*'; + markupByNodeName[nodeName] = markupByNodeName[nodeName] || []; + markupByNodeName[nodeName][i] = markupList[i]; + } + var resultList = []; + var resultListAssignmentCount = 0; + for (nodeName in markupByNodeName) { + if (!markupByNodeName.hasOwnProperty(nodeName)) { + continue; + } + var markupListByNodeName = markupByNodeName[nodeName]; + + // This for-in loop skips the holes of the sparse array. The order of + // iteration should follow the order of assignment, which happens to match + // numerical index order, but we don't rely on that. + var resultIndex; + for (resultIndex in markupListByNodeName) { + if (markupListByNodeName.hasOwnProperty(resultIndex)) { + var markup = markupListByNodeName[resultIndex]; + + // Push the requested markup with an additional RESULT_INDEX_ATTR + // attribute. If the markup does not start with a < character, it + // will be discarded below (with an appropriate console.error). + markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP, + // This index will be parsed back out below. + '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" '); + } + } + + // Render each group of markup with similar wrapping `nodeName`. + var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags. + ); + + for (var j = 0; j < renderNodes.length; ++j) { + var renderNode = renderNodes[j]; + if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) { + + resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR); + renderNode.removeAttribute(RESULT_INDEX_ATTR); + + !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined; + + resultList[resultIndex] = renderNode; + + // This should match resultList.length and markupList.length when + // we're done. + resultListAssignmentCount += 1; + } else if (process.env.NODE_ENV !== 'production') { + console.error('Danger: Discarding unexpected node:', renderNode); + } + } + } + + // Although resultList was populated out of order, it should now be a dense + // array. + !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined; + + !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined; + + return resultList; + }, + + /** + * Replaces a node with a string of markup at its current position within its + * parent. The markup must render into a single root node. + * + * @param {DOMElement} oldChild Child node to replace. + * @param {string} markup Markup to render in place of the child node. + * @internal + */ + dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) { + !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined; + !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined; + !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined; + + var newChild; + if (typeof markup === 'string') { + newChild = createNodesFromMarkup(markup, emptyFunction)[0]; + } else { + newChild = markup; + } + oldChild.parentNode.replaceChild(newChild, oldChild); + } + + }; + + module.exports = Danger; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 8 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ExecutionEnvironment + */ + + 'use strict'; + + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + + /** + * Simple, lightweight module assisting with the detection and context of + * Worker. Helps avoid circular dependencies and allows code to reason about + * whether or not they are in a Worker, even if they never include the main + * `ReactWorker` dependency. + */ + var ExecutionEnvironment = { + + canUseDOM: canUseDOM, + + canUseWorkers: typeof Worker !== 'undefined', + + canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent), + + canUseViewport: canUseDOM && !!window.screen, + + isInWorker: !canUseDOM // For now, this is true - might change in the future. + + }; + + module.exports = ExecutionEnvironment; + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule createNodesFromMarkup + * @typechecks + */ + + /*eslint-disable fb-www/unsafe-html*/ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var createArrayFromMixed = __webpack_require__(10); + var getMarkupWrap = __webpack_require__(13); + var invariant = __webpack_require__(12); + + /** + * Dummy container used to render all markup. + */ + var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null; + + /** + * Pattern used by `getNodeName`. + */ + var nodeNamePattern = /^\s*<(\w+)/; + + /** + * Extracts the `nodeName` of the first element in a string of markup. + * + * @param {string} markup String of markup. + * @return {?string} Node name of the supplied markup. + */ + function getNodeName(markup) { + var nodeNameMatch = markup.match(nodeNamePattern); + return nodeNameMatch && nodeNameMatch[1].toLowerCase(); + } + + /** + * Creates an array containing the nodes rendered from the supplied markup. The + * optionally supplied `handleScript` function will be invoked once for each + * <script> element that is rendered. If no `handleScript` function is supplied, + * an exception is thrown if any <script> elements are rendered. + * + * @param {string} markup A string of valid HTML markup. + * @param {?function} handleScript Invoked once for each rendered <script>. + * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes. + */ + function createNodesFromMarkup(markup, handleScript) { + var node = dummyNode; + !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined; + var nodeName = getNodeName(markup); + + var wrap = nodeName && getMarkupWrap(nodeName); + if (wrap) { + node.innerHTML = wrap[1] + markup + wrap[2]; + + var wrapDepth = wrap[0]; + while (wrapDepth--) { + node = node.lastChild; + } + } else { + node.innerHTML = markup; + } + + var scripts = node.getElementsByTagName('script'); + if (scripts.length) { + !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined; + createArrayFromMixed(scripts).forEach(handleScript); + } + + var nodes = createArrayFromMixed(node.childNodes); + while (node.lastChild) { + node.removeChild(node.lastChild); + } + return nodes; + } + + module.exports = createNodesFromMarkup; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule createArrayFromMixed + * @typechecks + */ + + 'use strict'; + + var toArray = __webpack_require__(11); + + /** + * Perform a heuristic test to determine if an object is "array-like". + * + * A monk asked Joshu, a Zen master, "Has a dog Buddha nature?" + * Joshu replied: "Mu." + * + * This function determines if its argument has "array nature": it returns + * true if the argument is an actual array, an `arguments' object, or an + * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()). + * + * It will return false for other array-like objects like Filelist. + * + * @param {*} obj + * @return {boolean} + */ + function hasArrayNature(obj) { + return( + // not null/false + !!obj && ( + // arrays are objects, NodeLists are functions in Safari + typeof obj == 'object' || typeof obj == 'function') && + // quacks like an array + 'length' in obj && + // not window + !('setInterval' in obj) && + // no DOM node should be considered an array-like + // a 'select' element has 'length' and 'item' properties on IE8 + typeof obj.nodeType != 'number' && ( + // a real array + Array.isArray(obj) || + // arguments + 'callee' in obj || + // HTMLCollection/NodeList + 'item' in obj) + ); + } + + /** + * Ensure that the argument is an array by wrapping it in an array if it is not. + * Creates a copy of the argument if it is already an array. + * + * This is mostly useful idiomatically: + * + * var createArrayFromMixed = require('createArrayFromMixed'); + * + * function takesOneOrMoreThings(things) { + * things = createArrayFromMixed(things); + * ... + * } + * + * This allows you to treat `things' as an array, but accept scalars in the API. + * + * If you need to convert an array-like object, like `arguments`, into an array + * use toArray instead. + * + * @param {*} obj + * @return {array} + */ + function createArrayFromMixed(obj) { + if (!hasArrayNature(obj)) { + return [obj]; + } else if (Array.isArray(obj)) { + return obj.slice(); + } else { + return toArray(obj); + } + } + + module.exports = createArrayFromMixed; + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule toArray + * @typechecks + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Convert array-like objects to arrays. + * + * This API assumes the caller knows the contents of the data type. For less + * well defined inputs use createArrayFromMixed. + * + * @param {object|function|filelist} obj + * @return {array} + */ + function toArray(obj) { + var length = obj.length; + + // Some browse builtin objects can report typeof 'function' (e.g. NodeList in + // old versions of Safari). + !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined; + + !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined; + + !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined; + + // Old IE doesn't give collections access to hasOwnProperty. Assume inputs + // without method will throw during the slice call and skip straight to the + // fallback. + if (obj.hasOwnProperty) { + try { + return Array.prototype.slice.call(obj); + } catch (e) { + // IE < 9 does not support Array#slice on collections objects + } + } + + // Fall back to copying key by key. This assumes all keys have a value, + // so will not preserve sparsely populated inputs. + var ret = Array(length); + for (var ii = 0; ii < length; ii++) { + ret[ii] = obj[ii]; + } + return ret; + } + + module.exports = toArray; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule invariant + */ + + 'use strict'; + + /** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + + var invariant = function (condition, format, a, b, c, d, e, f) { + if (process.env.NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + })); + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } + }; + + module.exports = invariant; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getMarkupWrap + */ + + /*eslint-disable fb-www/unsafe-html */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var invariant = __webpack_require__(12); + + /** + * Dummy container used to detect which wraps are necessary. + */ + var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null; + + /** + * Some browsers cannot use `innerHTML` to render certain elements standalone, + * so we wrap them, render the wrapped nodes, then extract the desired node. + * + * In IE8, certain elements cannot render alone, so wrap all elements ('*'). + */ + + var shouldWrap = {}; + + var selectWrap = [1, '<select multiple="true">', '</select>']; + var tableWrap = [1, '<table>', '</table>']; + var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>']; + + var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>']; + + var markupWrap = { + '*': [1, '?<div>', '</div>'], + + 'area': [1, '<map>', '</map>'], + 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'], + 'legend': [1, '<fieldset>', '</fieldset>'], + 'param': [1, '<object>', '</object>'], + 'tr': [2, '<table><tbody>', '</tbody></table>'], + + 'optgroup': selectWrap, + 'option': selectWrap, + + 'caption': tableWrap, + 'colgroup': tableWrap, + 'tbody': tableWrap, + 'tfoot': tableWrap, + 'thead': tableWrap, + + 'td': trWrap, + 'th': trWrap + }; + + // Initialize the SVG elements since we know they'll always need to be wrapped + // consistently. If they are created inside a <div> they will be initialized in + // the wrong namespace (and will not display). + var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan']; + svgElements.forEach(function (nodeName) { + markupWrap[nodeName] = svgWrap; + shouldWrap[nodeName] = true; + }); + + /** + * Gets the markup wrap configuration for the supplied `nodeName`. + * + * NOTE: This lazily detects which wraps are necessary for the current browser. + * + * @param {string} nodeName Lowercase `nodeName`. + * @return {?array} Markup wrap configuration, if applicable. + */ + function getMarkupWrap(nodeName) { + !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined; + if (!markupWrap.hasOwnProperty(nodeName)) { + nodeName = '*'; + } + if (!shouldWrap.hasOwnProperty(nodeName)) { + if (nodeName === '*') { + dummyNode.innerHTML = '<link />'; + } else { + dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>'; + } + shouldWrap[nodeName] = !dummyNode.firstChild; + } + return shouldWrap[nodeName] ? markupWrap[nodeName] : null; + } + + module.exports = getMarkupWrap; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 14 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule emptyFunction + */ + + "use strict"; + + function makeEmptyFunction(arg) { + return function () { + return arg; + }; + } + + /** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ + function emptyFunction() {} + + emptyFunction.thatReturns = makeEmptyFunction; + emptyFunction.thatReturnsFalse = makeEmptyFunction(false); + emptyFunction.thatReturnsTrue = makeEmptyFunction(true); + emptyFunction.thatReturnsNull = makeEmptyFunction(null); + emptyFunction.thatReturnsThis = function () { + return this; + }; + emptyFunction.thatReturnsArgument = function (arg) { + return arg; + }; + + module.exports = emptyFunction; + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMultiChildUpdateTypes + */ + + 'use strict'; + + var keyMirror = __webpack_require__(16); + + /** + * When a component's children are updated, a series of update configuration + * objects are created in order to batch and serialize the required changes. + * + * Enumerates all the possible types of update configurations. + * + * @internal + */ + var ReactMultiChildUpdateTypes = keyMirror({ + INSERT_MARKUP: null, + MOVE_EXISTING: null, + REMOVE_NODE: null, + SET_MARKUP: null, + TEXT_CONTENT: null + }); + + module.exports = ReactMultiChildUpdateTypes; + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule keyMirror + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Constructs an enumeration with keys equal to their value. + * + * For example: + * + * var COLORS = keyMirror({blue: null, red: null}); + * var myColor = COLORS.blue; + * var isColorValid = !!COLORS[myColor]; + * + * The last line could not be performed if the values of the generated enum were + * not equal to their keys. + * + * Input: {key1: val1, key2: val2} + * Output: {key1: key1, key2: key2} + * + * @param {object} obj + * @return {object} + */ + var keyMirror = function (obj) { + var ret = {}; + var key; + !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined; + for (key in obj) { + if (!obj.hasOwnProperty(key)) { + continue; + } + ret[key] = key; + } + return ret; + }; + + module.exports = keyMirror; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPerf + * @typechecks static-only + */ + + 'use strict'; + + /** + * ReactPerf is a general AOP system designed to measure performance. This + * module only has the hooks: see ReactDefaultPerf for the analysis tool. + */ + var ReactPerf = { + /** + * Boolean to enable/disable measurement. Set to false by default to prevent + * accidental logging and perf loss. + */ + enableMeasure: false, + + /** + * Holds onto the measure function in use. By default, don't measure + * anything, but we'll override this if we inject a measure function. + */ + storedMeasure: _noMeasure, + + /** + * @param {object} object + * @param {string} objectName + * @param {object<string>} methodNames + */ + measureMethods: function (object, objectName, methodNames) { + if (process.env.NODE_ENV !== 'production') { + for (var key in methodNames) { + if (!methodNames.hasOwnProperty(key)) { + continue; + } + object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]); + } + } + }, + + /** + * Use this to wrap methods you want to measure. Zero overhead in production. + * + * @param {string} objName + * @param {string} fnName + * @param {function} func + * @return {function} + */ + measure: function (objName, fnName, func) { + if (process.env.NODE_ENV !== 'production') { + var measuredFunc = null; + var wrapper = function () { + if (ReactPerf.enableMeasure) { + if (!measuredFunc) { + measuredFunc = ReactPerf.storedMeasure(objName, fnName, func); + } + return measuredFunc.apply(this, arguments); + } + return func.apply(this, arguments); + }; + wrapper.displayName = objName + '_' + fnName; + return wrapper; + } + return func; + }, + + injection: { + /** + * @param {function} measure + */ + injectMeasure: function (measure) { + ReactPerf.storedMeasure = measure; + } + } + }; + + /** + * Simply passes through the measured function, without measuring it. + * + * @param {string} objName + * @param {string} fnName + * @param {function} func + * @return {function} + */ + function _noMeasure(objName, fnName, func) { + return func; + } + + module.exports = ReactPerf; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule setInnerHTML + */ + + /* globals MSApp */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var WHITESPACE_TEST = /^[ \r\n\t\f]/; + var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/; + + /** + * Set the innerHTML property of a node, ensuring that whitespace is preserved + * even in IE8. + * + * @param {DOMElement} node + * @param {string} html + * @internal + */ + var setInnerHTML = function (node, html) { + node.innerHTML = html; + }; + + // Win8 apps: Allow all html to be inserted + if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) { + setInnerHTML = function (node, html) { + MSApp.execUnsafeLocalFunction(function () { + node.innerHTML = html; + }); + }; + } + + if (ExecutionEnvironment.canUseDOM) { + // IE8: When updating a just created node with innerHTML only leading + // whitespace is removed. When updating an existing node with innerHTML + // whitespace in root TextNodes is also collapsed. + // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html + + // Feature detection; only IE8 is known to behave improperly like this. + var testElement = document.createElement('div'); + testElement.innerHTML = ' '; + if (testElement.innerHTML === '') { + setInnerHTML = function (node, html) { + // Magic theory: IE8 supposedly differentiates between added and updated + // nodes when processing innerHTML, innerHTML on updated nodes suffers + // from worse whitespace behavior. Re-adding a node like this triggers + // the initial and more favorable whitespace behavior. + // TODO: What to do on a detached node? + if (node.parentNode) { + node.parentNode.replaceChild(node, node); + } + + // We also implement a workaround for non-visible tags disappearing into + // thin air on IE8, this only happens if there is no visible text + // in-front of the non-visible tags. Piggyback on the whitespace fix + // and simply check if any non-visible tags appear in the source. + if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) { + // Recover leading whitespace by temporarily prepending any character. + // \uFEFF has the potential advantage of being zero-width/invisible. + // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode + // in hopes that this is preserved even if "\uFEFF" is transformed to + // the actual Unicode character (by Babel, for example). + // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216 + node.innerHTML = String.fromCharCode(0xFEFF) + html; + + // deleteData leaves an empty `TextNode` which offsets the index of all + // children. Definitely want to avoid this. + var textNode = node.firstChild; + if (textNode.data.length === 1) { + node.removeChild(textNode); + } else { + textNode.deleteData(0, 1); + } + } else { + node.innerHTML = html; + } + }; + } + } + + module.exports = setInnerHTML; + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule setTextContent + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + var escapeTextContentForBrowser = __webpack_require__(20); + var setInnerHTML = __webpack_require__(18); + + /** + * Set the textContent property of a node, ensuring that whitespace is preserved + * even in IE8. innerText is a poor substitute for textContent and, among many + * issues, inserts <br> instead of the literal newline chars. innerHTML behaves + * as it should. + * + * @param {DOMElement} node + * @param {string} text + * @internal + */ + var setTextContent = function (node, text) { + node.textContent = text; + }; + + if (ExecutionEnvironment.canUseDOM) { + if (!('textContent' in document.documentElement)) { + setTextContent = function (node, text) { + setInnerHTML(node, escapeTextContentForBrowser(text)); + }; + } + } + + module.exports = setTextContent; + +/***/ }, +/* 20 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule escapeTextContentForBrowser + */ + + 'use strict'; + + var ESCAPE_LOOKUP = { + '&': '&', + '>': '>', + '<': '<', + '"': '"', + '\'': ''' + }; + + var ESCAPE_REGEX = /[&><"']/g; + + function escaper(match) { + return ESCAPE_LOOKUP[match]; + } + + /** + * Escapes text to prevent scripting attacks. + * + * @param {*} text Text value to escape. + * @return {string} An escaped string. + */ + function escapeTextContentForBrowser(text) { + return ('' + text).replace(ESCAPE_REGEX, escaper); + } + + module.exports = escapeTextContentForBrowser; + +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMPropertyOperations + * @typechecks static-only + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ReactPerf = __webpack_require__(17); + + var quoteAttributeValueForBrowser = __webpack_require__(23); + var warning = __webpack_require__(24); + + // Simplified subset + var VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\w\.\-]*$/; + var illegalAttributeNameCache = {}; + var validatedAttributeNameCache = {}; + + function isAttributeNameSafe(attributeName) { + if (validatedAttributeNameCache.hasOwnProperty(attributeName)) { + return true; + } + if (illegalAttributeNameCache.hasOwnProperty(attributeName)) { + return false; + } + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { + validatedAttributeNameCache[attributeName] = true; + return true; + } + illegalAttributeNameCache[attributeName] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined; + return false; + } + + function shouldIgnoreValue(propertyInfo, value) { + return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false; + } + + if (process.env.NODE_ENV !== 'production') { + var reactProps = { + children: true, + dangerouslySetInnerHTML: true, + key: true, + ref: true + }; + var warnedProperties = {}; + + var warnUnknownProperty = function (name) { + if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) { + return; + } + + warnedProperties[name] = true; + var lowerCasedName = name.toLowerCase(); + + // data-* attributes should be lowercase; suggest the lowercase version + var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null; + + // For now, only warn when we have a suggested correction. This prevents + // logging too much when using transferPropsTo. + process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined; + }; + } + + /** + * Operations for dealing with DOM properties. + */ + var DOMPropertyOperations = { + + /** + * Creates markup for the ID property. + * + * @param {string} id Unescaped ID. + * @return {string} Markup string. + */ + createMarkupForID: function (id) { + return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id); + }, + + setAttributeForID: function (node, id) { + node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id); + }, + + /** + * Creates markup for a property. + * + * @param {string} name + * @param {*} value + * @return {?string} Markup string, or null if the property was invalid. + */ + createMarkupForProperty: function (name, value) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + if (shouldIgnoreValue(propertyInfo, value)) { + return ''; + } + var attributeName = propertyInfo.attributeName; + if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + return attributeName + '=""'; + } + return attributeName + '=' + quoteAttributeValueForBrowser(value); + } else if (DOMProperty.isCustomAttribute(name)) { + if (value == null) { + return ''; + } + return name + '=' + quoteAttributeValueForBrowser(value); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + return null; + }, + + /** + * Creates markup for a custom property. + * + * @param {string} name + * @param {*} value + * @return {string} Markup string, or empty string if the property was invalid. + */ + createMarkupForCustomAttribute: function (name, value) { + if (!isAttributeNameSafe(name) || value == null) { + return ''; + } + return name + '=' + quoteAttributeValueForBrowser(value); + }, + + /** + * Sets the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + * @param {*} value + */ + setValueForProperty: function (node, name, value) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, value); + } else if (shouldIgnoreValue(propertyInfo, value)) { + this.deleteValueForProperty(node, name); + } else if (propertyInfo.mustUseAttribute) { + var attributeName = propertyInfo.attributeName; + var namespace = propertyInfo.attributeNamespace; + // `setAttribute` with objects becomes only `[object]` in IE8/9, + // ('' + value) makes it output the correct toString()-value. + if (namespace) { + node.setAttributeNS(namespace, attributeName, '' + value); + } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + node.setAttribute(attributeName, ''); + } else { + node.setAttribute(attributeName, '' + value); + } + } else { + var propName = propertyInfo.propertyName; + // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the + // property type before comparing; only `value` does and is string. + if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) { + // Contrary to `setAttribute`, object properties are properly + // `toString`ed by IE8/9. + node[propName] = value; + } + } + } else if (DOMProperty.isCustomAttribute(name)) { + DOMPropertyOperations.setValueForAttribute(node, name, value); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + }, + + setValueForAttribute: function (node, name, value) { + if (!isAttributeNameSafe(name)) { + return; + } + if (value == null) { + node.removeAttribute(name); + } else { + node.setAttribute(name, '' + value); + } + }, + + /** + * Deletes the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + */ + deleteValueForProperty: function (node, name) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, undefined); + } else if (propertyInfo.mustUseAttribute) { + node.removeAttribute(propertyInfo.attributeName); + } else { + var propName = propertyInfo.propertyName; + var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName); + if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) { + node[propName] = defaultValue; + } + } + } else if (DOMProperty.isCustomAttribute(name)) { + node.removeAttribute(name); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + } + + }; + + ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', { + setValueForProperty: 'setValueForProperty', + setValueForAttribute: 'setValueForAttribute', + deleteValueForProperty: 'deleteValueForProperty' + }); + + module.exports = DOMPropertyOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMProperty + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + function checkMask(value, bitmask) { + return (value & bitmask) === bitmask; + } + + var DOMPropertyInjection = { + /** + * Mapping from normalized, camelcased property names to a configuration that + * specifies how the associated DOM property should be accessed or rendered. + */ + MUST_USE_ATTRIBUTE: 0x1, + MUST_USE_PROPERTY: 0x2, + HAS_SIDE_EFFECTS: 0x4, + HAS_BOOLEAN_VALUE: 0x8, + HAS_NUMERIC_VALUE: 0x10, + HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10, + HAS_OVERLOADED_BOOLEAN_VALUE: 0x40, + + /** + * Inject some specialized knowledge about the DOM. This takes a config object + * with the following properties: + * + * isCustomAttribute: function that given an attribute name will return true + * if it can be inserted into the DOM verbatim. Useful for data-* or aria-* + * attributes where it's impossible to enumerate all of the possible + * attribute names, + * + * Properties: object mapping DOM property name to one of the + * DOMPropertyInjection constants or null. If your attribute isn't in here, + * it won't get written to the DOM. + * + * DOMAttributeNames: object mapping React attribute name to the DOM + * attribute name. Attribute names not specified use the **lowercase** + * normalized name. + * + * DOMAttributeNamespaces: object mapping React attribute name to the DOM + * attribute namespace URL. (Attribute names not specified use no namespace.) + * + * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties. + * Property names not specified use the normalized name. + * + * DOMMutationMethods: Properties that require special mutation methods. If + * `value` is undefined, the mutation method should unset the property. + * + * @param {object} domPropertyConfig the config as described above. + */ + injectDOMPropertyConfig: function (domPropertyConfig) { + var Injection = DOMPropertyInjection; + var Properties = domPropertyConfig.Properties || {}; + var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {}; + var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {}; + var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {}; + var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {}; + + if (domPropertyConfig.isCustomAttribute) { + DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute); + } + + for (var propName in Properties) { + !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined; + + var lowerCased = propName.toLowerCase(); + var propConfig = Properties[propName]; + + var propertyInfo = { + attributeName: lowerCased, + attributeNamespace: null, + propertyName: propName, + mutationMethod: null, + + mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE), + mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY), + hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS), + hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE), + hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE), + hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE), + hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE) + }; + + !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined; + !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined; + !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + DOMProperty.getPossibleStandardName[lowerCased] = propName; + } + + if (DOMAttributeNames.hasOwnProperty(propName)) { + var attributeName = DOMAttributeNames[propName]; + propertyInfo.attributeName = attributeName; + if (process.env.NODE_ENV !== 'production') { + DOMProperty.getPossibleStandardName[attributeName] = propName; + } + } + + if (DOMAttributeNamespaces.hasOwnProperty(propName)) { + propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName]; + } + + if (DOMPropertyNames.hasOwnProperty(propName)) { + propertyInfo.propertyName = DOMPropertyNames[propName]; + } + + if (DOMMutationMethods.hasOwnProperty(propName)) { + propertyInfo.mutationMethod = DOMMutationMethods[propName]; + } + + DOMProperty.properties[propName] = propertyInfo; + } + } + }; + var defaultValueCache = {}; + + /** + * DOMProperty exports lookup objects that can be used like functions: + * + * > DOMProperty.isValid['id'] + * true + * > DOMProperty.isValid['foobar'] + * undefined + * + * Although this may be confusing, it performs better in general. + * + * @see http://jsperf.com/key-exists + * @see http://jsperf.com/key-missing + */ + var DOMProperty = { + + ID_ATTRIBUTE_NAME: 'data-reactid', + + /** + * Map from property "standard name" to an object with info about how to set + * the property in the DOM. Each object contains: + * + * attributeName: + * Used when rendering markup or with `*Attribute()`. + * attributeNamespace + * propertyName: + * Used on DOM node instances. (This includes properties that mutate due to + * external factors.) + * mutationMethod: + * If non-null, used instead of the property or `setAttribute()` after + * initial render. + * mustUseAttribute: + * Whether the property must be accessed and mutated using `*Attribute()`. + * (This includes anything that fails `<propName> in <element>`.) + * mustUseProperty: + * Whether the property must be accessed and mutated as an object property. + * hasSideEffects: + * Whether or not setting a value causes side effects such as triggering + * resources to be loaded or text selection changes. If true, we read from + * the DOM before updating to ensure that the value is only set if it has + * changed. + * hasBooleanValue: + * Whether the property should be removed when set to a falsey value. + * hasNumericValue: + * Whether the property must be numeric or parse as a numeric and should be + * removed when set to a falsey value. + * hasPositiveNumericValue: + * Whether the property must be positive numeric or parse as a positive + * numeric and should be removed when set to a falsey value. + * hasOverloadedBooleanValue: + * Whether the property can be used as a flag as well as with a value. + * Removed when strictly equal to false; present without a value when + * strictly equal to true; present with a value otherwise. + */ + properties: {}, + + /** + * Mapping from lowercase property names to the properly cased version, used + * to warn in the case of missing properties. Available only in __DEV__. + * @type {Object} + */ + getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null, + + /** + * All of the isCustomAttribute() functions that have been injected. + */ + _isCustomAttributeFunctions: [], + + /** + * Checks whether a property name is a custom attribute. + * @method + */ + isCustomAttribute: function (attributeName) { + for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) { + var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i]; + if (isCustomAttributeFn(attributeName)) { + return true; + } + } + return false; + }, + + /** + * Returns the default property value for a DOM property (i.e., not an + * attribute). Most default values are '' or false, but not all. Worse yet, + * some (in particular, `type`) vary depending on the type of element. + * + * TODO: Is it better to grab all the possible properties when creating an + * element to avoid having to create the same element twice? + */ + getDefaultValueForProperty: function (nodeName, prop) { + var nodeDefaults = defaultValueCache[nodeName]; + var testElement; + if (!nodeDefaults) { + defaultValueCache[nodeName] = nodeDefaults = {}; + } + if (!(prop in nodeDefaults)) { + testElement = document.createElement(nodeName); + nodeDefaults[prop] = testElement[prop]; + } + return nodeDefaults[prop]; + }, + + injection: DOMPropertyInjection + }; + + module.exports = DOMProperty; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule quoteAttributeValueForBrowser + */ + + 'use strict'; + + var escapeTextContentForBrowser = __webpack_require__(20); + + /** + * Escapes attribute value to prevent scripting attacks. + * + * @param {*} value Value to escape. + * @return {string} An escaped string. + */ + function quoteAttributeValueForBrowser(value) { + return '"' + escapeTextContentForBrowser(value) + '"'; + } + + module.exports = quoteAttributeValueForBrowser; + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule warning + */ + + 'use strict'; + + var emptyFunction = __webpack_require__(14); + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + + var warning = emptyFunction; + + if (process.env.NODE_ENV !== 'production') { + warning = function (condition, format) { + for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + } + }; + } + + module.exports = warning; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponentBrowserEnvironment + */ + + 'use strict'; + + var ReactDOMIDOperations = __webpack_require__(26); + var ReactMount = __webpack_require__(27); + + /** + * Abstracts away all functionality of the reconciler that requires knowledge of + * the browser context. TODO: These callers should be refactored to avoid the + * need for this injection. + */ + var ReactComponentBrowserEnvironment = { + + processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates, + + replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID, + + /** + * If a particular environment requires that some resources be cleaned up, + * specify this in the injected Mixin. In the DOM, we would likely want to + * purge any cached node ID lookups. + * + * @private + */ + unmountIDFromEnvironment: function (rootNodeID) { + ReactMount.purgeID(rootNodeID); + } + + }; + + module.exports = ReactComponentBrowserEnvironment; + +/***/ }, +/* 26 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMIDOperations + * @typechecks static-only + */ + + 'use strict'; + + var DOMChildrenOperations = __webpack_require__(6); + var DOMPropertyOperations = __webpack_require__(21); + var ReactMount = __webpack_require__(27); + var ReactPerf = __webpack_require__(17); + + var invariant = __webpack_require__(12); + + /** + * Errors for properties that should not be updated with `updatePropertyByID()`. + * + * @type {object} + * @private + */ + var INVALID_PROPERTY_ERRORS = { + dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.', + style: '`style` must be set using `updateStylesByID()`.' + }; + + /** + * Operations used to process updates to DOM nodes. + */ + var ReactDOMIDOperations = { + + /** + * Updates a DOM node with new property values. This should only be used to + * update DOM properties in `DOMProperty`. + * + * @param {string} id ID of the node to update. + * @param {string} name A valid property name, see `DOMProperty`. + * @param {*} value New value of the property. + * @internal + */ + updatePropertyByID: function (id, name, value) { + var node = ReactMount.getNode(id); + !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined; + + // If we're updating to null or undefined, we should remove the property + // from the DOM node instead of inadvertantly setting to a string. This + // brings us in line with the same behavior we have on initial render. + if (value != null) { + DOMPropertyOperations.setValueForProperty(node, name, value); + } else { + DOMPropertyOperations.deleteValueForProperty(node, name); + } + }, + + /** + * Replaces a DOM node that exists in the document with markup. + * + * @param {string} id ID of child to be replaced. + * @param {string} markup Dangerous markup to inject in place of child. + * @internal + * @see {Danger.dangerouslyReplaceNodeWithMarkup} + */ + dangerouslyReplaceNodeWithMarkupByID: function (id, markup) { + var node = ReactMount.getNode(id); + DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup); + }, + + /** + * Updates a component's children by processing a series of updates. + * + * @param {array<object>} updates List of update configurations. + * @param {array<string>} markup List of markup strings. + * @internal + */ + dangerouslyProcessChildrenUpdates: function (updates, markup) { + for (var i = 0; i < updates.length; i++) { + updates[i].parentNode = ReactMount.getNode(updates[i].parentID); + } + DOMChildrenOperations.processUpdates(updates, markup); + } + }; + + ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', { + dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID', + dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates' + }); + + module.exports = ReactDOMIDOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMount + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactCurrentOwner = __webpack_require__(4); + var ReactDOMFeatureFlags = __webpack_require__(40); + var ReactElement = __webpack_require__(41); + var ReactEmptyComponentRegistry = __webpack_require__(43); + var ReactInstanceHandles = __webpack_require__(44); + var ReactInstanceMap = __webpack_require__(46); + var ReactMarkupChecksum = __webpack_require__(47); + var ReactPerf = __webpack_require__(17); + var ReactReconciler = __webpack_require__(49); + var ReactUpdateQueue = __webpack_require__(52); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var emptyObject = __webpack_require__(57); + var containsNode = __webpack_require__(58); + var instantiateReactComponent = __webpack_require__(61); + var invariant = __webpack_require__(12); + var setInnerHTML = __webpack_require__(18); + var shouldUpdateReactComponent = __webpack_require__(66); + var validateDOMNesting = __webpack_require__(69); + var warning = __webpack_require__(24); + + var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME; + var nodeCache = {}; + + var ELEMENT_NODE_TYPE = 1; + var DOC_NODE_TYPE = 9; + var DOCUMENT_FRAGMENT_NODE_TYPE = 11; + + var ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2); + + /** Mapping from reactRootID to React component instance. */ + var instancesByReactRootID = {}; + + /** Mapping from reactRootID to `container` nodes. */ + var containersByReactRootID = {}; + + if (process.env.NODE_ENV !== 'production') { + /** __DEV__-only mapping from reactRootID to root elements. */ + var rootElementsByReactRootID = {}; + } + + // Used to store breadth-first search state in findComponentRoot. + var findComponentRootReusableArray = []; + + /** + * Finds the index of the first character + * that's not common between the two given strings. + * + * @return {number} the index of the character where the strings diverge + */ + function firstDifferenceIndex(string1, string2) { + var minLen = Math.min(string1.length, string2.length); + for (var i = 0; i < minLen; i++) { + if (string1.charAt(i) !== string2.charAt(i)) { + return i; + } + } + return string1.length === string2.length ? -1 : minLen; + } + + /** + * @param {DOMElement|DOMDocument} container DOM element that may contain + * a React component + * @return {?*} DOM element that may have the reactRoot ID, or null. + */ + function getReactRootElementInContainer(container) { + if (!container) { + return null; + } + + if (container.nodeType === DOC_NODE_TYPE) { + return container.documentElement; + } else { + return container.firstChild; + } + } + + /** + * @param {DOMElement} container DOM element that may contain a React component. + * @return {?string} A "reactRoot" ID, if a React component is rendered. + */ + function getReactRootID(container) { + var rootElement = getReactRootElementInContainer(container); + return rootElement && ReactMount.getID(rootElement); + } + + /** + * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form + * element can return its control whose name or ID equals ATTR_NAME. All + * DOM nodes support `getAttributeNode` but this can also get called on + * other objects so just return '' if we're given something other than a + * DOM node (such as window). + * + * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node. + * @return {string} ID of the supplied `domNode`. + */ + function getID(node) { + var id = internalGetID(node); + if (id) { + if (nodeCache.hasOwnProperty(id)) { + var cached = nodeCache[id]; + if (cached !== node) { + !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined; + + nodeCache[id] = node; + } + } else { + nodeCache[id] = node; + } + } + + return id; + } + + function internalGetID(node) { + // If node is something like a window, document, or text node, none of + // which support attributes or a .getAttribute method, gracefully return + // the empty string, as if the attribute were missing. + return node && node.getAttribute && node.getAttribute(ATTR_NAME) || ''; + } + + /** + * Sets the React-specific ID of the given node. + * + * @param {DOMElement} node The DOM node whose ID will be set. + * @param {string} id The value of the ID attribute. + */ + function setID(node, id) { + var oldID = internalGetID(node); + if (oldID !== id) { + delete nodeCache[oldID]; + } + node.setAttribute(ATTR_NAME, id); + nodeCache[id] = node; + } + + /** + * Finds the node with the supplied React-generated DOM ID. + * + * @param {string} id A React-generated DOM ID. + * @return {DOMElement} DOM node with the suppled `id`. + * @internal + */ + function getNode(id) { + if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { + nodeCache[id] = ReactMount.findReactNodeByID(id); + } + return nodeCache[id]; + } + + /** + * Finds the node with the supplied public React instance. + * + * @param {*} instance A public React instance. + * @return {?DOMElement} DOM node with the suppled `id`. + * @internal + */ + function getNodeFromInstance(instance) { + var id = ReactInstanceMap.get(instance)._rootNodeID; + if (ReactEmptyComponentRegistry.isNullComponentID(id)) { + return null; + } + if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { + nodeCache[id] = ReactMount.findReactNodeByID(id); + } + return nodeCache[id]; + } + + /** + * A node is "valid" if it is contained by a currently mounted container. + * + * This means that the node does not have to be contained by a document in + * order to be considered valid. + * + * @param {?DOMElement} node The candidate DOM node. + * @param {string} id The expected ID of the node. + * @return {boolean} Whether the node is contained by a mounted container. + */ + function isValid(node, id) { + if (node) { + !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined; + + var container = ReactMount.findReactContainerForID(id); + if (container && containsNode(container, node)) { + return true; + } + } + + return false; + } + + /** + * Causes the cache to forget about one React-specific ID. + * + * @param {string} id The ID to forget. + */ + function purgeID(id) { + delete nodeCache[id]; + } + + var deepestNodeSoFar = null; + function findDeepestCachedAncestorImpl(ancestorID) { + var ancestor = nodeCache[ancestorID]; + if (ancestor && isValid(ancestor, ancestorID)) { + deepestNodeSoFar = ancestor; + } else { + // This node isn't populated in the cache, so presumably none of its + // descendants are. Break out of the loop. + return false; + } + } + + /** + * Return the deepest cached node whose ID is a prefix of `targetID`. + */ + function findDeepestCachedAncestor(targetID) { + deepestNodeSoFar = null; + ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl); + + var foundNode = deepestNodeSoFar; + deepestNodeSoFar = null; + return foundNode; + } + + /** + * Mounts this component and inserts it into the DOM. + * + * @param {ReactComponent} componentInstance The instance to mount. + * @param {string} rootID DOM ID of the root node. + * @param {DOMElement} container DOM element to mount into. + * @param {ReactReconcileTransaction} transaction + * @param {boolean} shouldReuseMarkup If true, do not insert markup + */ + function mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) { + if (ReactDOMFeatureFlags.useCreateElement) { + context = assign({}, context); + if (container.nodeType === DOC_NODE_TYPE) { + context[ownerDocumentContextKey] = container; + } else { + context[ownerDocumentContextKey] = container.ownerDocument; + } + } + if (process.env.NODE_ENV !== 'production') { + if (context === emptyObject) { + context = {}; + } + var tag = container.nodeName.toLowerCase(); + context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null); + } + var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context); + componentInstance._renderedComponent._topLevelWrapper = componentInstance; + ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction); + } + + /** + * Batched mount. + * + * @param {ReactComponent} componentInstance The instance to mount. + * @param {string} rootID DOM ID of the root node. + * @param {DOMElement} container DOM element to mount into. + * @param {boolean} shouldReuseMarkup If true, do not insert markup + */ + function batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) { + var transaction = ReactUpdates.ReactReconcileTransaction.getPooled( + /* forceHTML */shouldReuseMarkup); + transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context); + ReactUpdates.ReactReconcileTransaction.release(transaction); + } + + /** + * Unmounts a component and removes it from the DOM. + * + * @param {ReactComponent} instance React component instance. + * @param {DOMElement} container DOM element to unmount from. + * @final + * @internal + * @see {ReactMount.unmountComponentAtNode} + */ + function unmountComponentFromNode(instance, container) { + ReactReconciler.unmountComponent(instance); + + if (container.nodeType === DOC_NODE_TYPE) { + container = container.documentElement; + } + + // http://jsperf.com/emptying-a-node + while (container.lastChild) { + container.removeChild(container.lastChild); + } + } + + /** + * True if the supplied DOM node has a direct React-rendered child that is + * not a React root element. Useful for warning in `render`, + * `unmountComponentAtNode`, etc. + * + * @param {?DOMElement} node The candidate DOM node. + * @return {boolean} True if the DOM element contains a direct child that was + * rendered by React but is not a root element. + * @internal + */ + function hasNonRootReactChild(node) { + var reactRootID = getReactRootID(node); + return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false; + } + + /** + * Returns the first (deepest) ancestor of a node which is rendered by this copy + * of React. + */ + function findFirstReactDOMImpl(node) { + // This node might be from another React instance, so we make sure not to + // examine the node cache here + for (; node && node.parentNode !== node; node = node.parentNode) { + if (node.nodeType !== 1) { + // Not a DOMElement, therefore not a React component + continue; + } + var nodeID = internalGetID(node); + if (!nodeID) { + continue; + } + var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID); + + // If containersByReactRootID contains the container we find by crawling up + // the tree, we know that this instance of React rendered the node. + // nb. isValid's strategy (with containsNode) does not work because render + // trees may be nested and we don't want a false positive in that case. + var current = node; + var lastID; + do { + lastID = internalGetID(current); + current = current.parentNode; + if (current == null) { + // The passed-in node has been detached from the container it was + // originally rendered into. + return null; + } + } while (lastID !== reactRootID); + + if (current === containersByReactRootID[reactRootID]) { + return node; + } + } + return null; + } + + /** + * Temporary (?) hack so that we can store all top-level pending updates on + * composites instead of having to worry about different types of components + * here. + */ + var TopLevelWrapper = function () {}; + TopLevelWrapper.prototype.isReactComponent = {}; + if (process.env.NODE_ENV !== 'production') { + TopLevelWrapper.displayName = 'TopLevelWrapper'; + } + TopLevelWrapper.prototype.render = function () { + // this.props is actually a ReactElement + return this.props; + }; + + /** + * Mounting is the process of initializing a React component by creating its + * representative DOM elements and inserting them into a supplied `container`. + * Any prior content inside `container` is destroyed in the process. + * + * ReactMount.render( + * component, + * document.getElementById('container') + * ); + * + * <div id="container"> <-- Supplied `container`. + * <div data-reactid=".3"> <-- Rendered reactRoot of React + * // ... component. + * </div> + * </div> + * + * Inside of `container`, the first element rendered is the "reactRoot". + */ + var ReactMount = { + + TopLevelWrapper: TopLevelWrapper, + + /** Exposed for debugging purposes **/ + _instancesByReactRootID: instancesByReactRootID, + + /** + * This is a hook provided to support rendering React components while + * ensuring that the apparent scroll position of its `container` does not + * change. + * + * @param {DOMElement} container The `container` being rendered into. + * @param {function} renderCallback This must be called once to do the render. + */ + scrollMonitor: function (container, renderCallback) { + renderCallback(); + }, + + /** + * Take a component that's already mounted into the DOM and replace its props + * @param {ReactComponent} prevComponent component instance already in the DOM + * @param {ReactElement} nextElement component instance to render + * @param {DOMElement} container container to render into + * @param {?function} callback function triggered on completion + */ + _updateRootComponent: function (prevComponent, nextElement, container, callback) { + ReactMount.scrollMonitor(container, function () { + ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback); + } + }); + + if (process.env.NODE_ENV !== 'production') { + // Record the root element in case it later gets transplanted. + rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container); + } + + return prevComponent; + }, + + /** + * Register a component into the instance map and starts scroll value + * monitoring + * @param {ReactComponent} nextComponent component instance to render + * @param {DOMElement} container container to render into + * @return {string} reactRoot ID prefix + */ + _registerComponent: function (nextComponent, container) { + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined; + + ReactBrowserEventEmitter.ensureScrollValueMonitoring(); + + var reactRootID = ReactMount.registerContainer(container); + instancesByReactRootID[reactRootID] = nextComponent; + return reactRootID; + }, + + /** + * Render a new component into the DOM. + * @param {ReactElement} nextElement element to render + * @param {DOMElement} container container to render into + * @param {boolean} shouldReuseMarkup if we should skip the markup insertion + * @return {ReactComponent} nextComponent + */ + _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) { + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined; + + var componentInstance = instantiateReactComponent(nextElement, null); + var reactRootID = ReactMount._registerComponent(componentInstance, container); + + // The initial render is synchronous but any updates that happen during + // rendering, in componentWillMount or componentDidMount, will be batched + // according to the current batching strategy. + + ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context); + + if (process.env.NODE_ENV !== 'production') { + // Record the root element in case it later gets transplanted. + rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container); + } + + return componentInstance; + }, + + /** + * Renders a React component into the DOM in the supplied `container`. + * + * If the React component was previously rendered into `container`, this will + * perform an update on it and only mutate the DOM as necessary to reflect the + * latest React component. + * + * @param {ReactComponent} parentComponent The conceptual parent of this render tree. + * @param {ReactElement} nextElement Component element to render. + * @param {DOMElement} container DOM element to render into. + * @param {?function} callback function triggered on completion + * @return {ReactComponent} Component instance rendered in `container`. + */ + renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) { + !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined; + return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback); + }, + + _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) { + !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : + // Check if it quacks like an element + nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined; + + process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined; + + var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement); + + var prevComponent = instancesByReactRootID[getReactRootID(container)]; + + if (prevComponent) { + var prevWrappedElement = prevComponent._currentElement; + var prevElement = prevWrappedElement.props; + if (shouldUpdateReactComponent(prevElement, nextElement)) { + var publicInst = prevComponent._renderedComponent.getPublicInstance(); + var updatedCallback = callback && function () { + callback.call(publicInst); + }; + ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback); + return publicInst; + } else { + ReactMount.unmountComponentAtNode(container); + } + } + + var reactRootElement = getReactRootElementInContainer(container); + var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement); + var containerHasNonRootReactChild = hasNonRootReactChild(container); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined; + + if (!containerHasReactMarkup || reactRootElement.nextSibling) { + var rootElementSibling = reactRootElement; + while (rootElementSibling) { + if (internalGetID(rootElementSibling)) { + process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined; + break; + } + rootElementSibling = rootElementSibling.nextSibling; + } + } + } + + var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild; + var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance(); + if (callback) { + callback.call(component); + } + return component; + }, + + /** + * Renders a React component into the DOM in the supplied `container`. + * + * If the React component was previously rendered into `container`, this will + * perform an update on it and only mutate the DOM as necessary to reflect the + * latest React component. + * + * @param {ReactElement} nextElement Component element to render. + * @param {DOMElement} container DOM element to render into. + * @param {?function} callback function triggered on completion + * @return {ReactComponent} Component instance rendered in `container`. + */ + render: function (nextElement, container, callback) { + return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback); + }, + + /** + * Registers a container node into which React components will be rendered. + * This also creates the "reactRoot" ID that will be assigned to the element + * rendered within. + * + * @param {DOMElement} container DOM element to register as a container. + * @return {string} The "reactRoot" ID of elements rendered within. + */ + registerContainer: function (container) { + var reactRootID = getReactRootID(container); + if (reactRootID) { + // If one exists, make sure it is a valid "reactRoot" ID. + reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID); + } + if (!reactRootID) { + // No valid "reactRoot" ID found, create one. + reactRootID = ReactInstanceHandles.createReactRootID(); + } + containersByReactRootID[reactRootID] = container; + return reactRootID; + }, + + /** + * Unmounts and destroys the React component rendered in the `container`. + * + * @param {DOMElement} container DOM element containing a React component. + * @return {boolean} True if a component was found in and unmounted from + * `container` + */ + unmountComponentAtNode: function (container) { + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. (Strictly speaking, unmounting won't cause a + // render but we still don't expect to be in a render call here.) + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined; + + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined; + + var reactRootID = getReactRootID(container); + var component = instancesByReactRootID[reactRootID]; + if (!component) { + // Check if the node being unmounted was rendered by React, but isn't a + // root node. + var containerHasNonRootReactChild = hasNonRootReactChild(container); + + // Check if the container itself is a React root node. + var containerID = internalGetID(container); + var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined; + } + + return false; + } + ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container); + delete instancesByReactRootID[reactRootID]; + delete containersByReactRootID[reactRootID]; + if (process.env.NODE_ENV !== 'production') { + delete rootElementsByReactRootID[reactRootID]; + } + return true; + }, + + /** + * Finds the container DOM element that contains React component to which the + * supplied DOM `id` belongs. + * + * @param {string} id The ID of an element rendered by a React component. + * @return {?DOMElement} DOM element that contains the `id`. + */ + findReactContainerForID: function (id) { + var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id); + var container = containersByReactRootID[reactRootID]; + + if (process.env.NODE_ENV !== 'production') { + var rootElement = rootElementsByReactRootID[reactRootID]; + if (rootElement && rootElement.parentNode !== container) { + process.env.NODE_ENV !== 'production' ? warning( + // Call internalGetID here because getID calls isValid which calls + // findReactContainerForID (this function). + internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined; + var containerChild = container.firstChild; + if (containerChild && reactRootID === internalGetID(containerChild)) { + // If the container has a new child with the same ID as the old + // root element, then rootElementsByReactRootID[reactRootID] is + // just stale and needs to be updated. The case that deserves a + // warning is when the container is empty. + rootElementsByReactRootID[reactRootID] = containerChild; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined; + } + } + } + + return container; + }, + + /** + * Finds an element rendered by React with the supplied ID. + * + * @param {string} id ID of a DOM node in the React component. + * @return {DOMElement} Root DOM node of the React component. + */ + findReactNodeByID: function (id) { + var reactRoot = ReactMount.findReactContainerForID(id); + return ReactMount.findComponentRoot(reactRoot, id); + }, + + /** + * Traverses up the ancestors of the supplied node to find a node that is a + * DOM representation of a React component rendered by this copy of React. + * + * @param {*} node + * @return {?DOMEventTarget} + * @internal + */ + getFirstReactDOM: function (node) { + return findFirstReactDOMImpl(node); + }, + + /** + * Finds a node with the supplied `targetID` inside of the supplied + * `ancestorNode`. Exploits the ID naming scheme to perform the search + * quickly. + * + * @param {DOMEventTarget} ancestorNode Search from this root. + * @pararm {string} targetID ID of the DOM representation of the component. + * @return {DOMEventTarget} DOM node with the supplied `targetID`. + * @internal + */ + findComponentRoot: function (ancestorNode, targetID) { + var firstChildren = findComponentRootReusableArray; + var childIndex = 0; + + var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode; + + if (process.env.NODE_ENV !== 'production') { + // This will throw on the next line; give an early warning + process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\'t find the root component node for data-reactid value ' + '`%s`. If you\'re seeing this message, it probably means that ' + 'you\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined; + } + + firstChildren[0] = deepestAncestor.firstChild; + firstChildren.length = 1; + + while (childIndex < firstChildren.length) { + var child = firstChildren[childIndex++]; + var targetChild; + + while (child) { + var childID = ReactMount.getID(child); + if (childID) { + // Even if we find the node we're looking for, we finish looping + // through its siblings to ensure they're cached so that we don't have + // to revisit this node again. Otherwise, we make n^2 calls to getID + // when visiting the many children of a single node in order. + + if (targetID === childID) { + targetChild = child; + } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) { + // If we find a child whose ID is an ancestor of the given ID, + // then we can be sure that we only want to search the subtree + // rooted at this child, so we can throw out the rest of the + // search state. + firstChildren.length = childIndex = 0; + firstChildren.push(child.firstChild); + } + } else { + // If this child had no ID, then there's a chance that it was + // injected automatically by the browser, as when a `<table>` + // element sprouts an extra `<tbody>` child as a side effect of + // `.innerHTML` parsing. Optimistically continue down this + // branch, but not before examining the other siblings. + firstChildren.push(child.firstChild); + } + + child = child.nextSibling; + } + + if (targetChild) { + // Emptying firstChildren/findComponentRootReusableArray is + // not necessary for correctness, but it helps the GC reclaim + // any nodes that were left at the end of the search. + firstChildren.length = 0; + + return targetChild; + } + } + + firstChildren.length = 0; + + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined; + }, + + _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) { + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined; + + if (shouldReuseMarkup) { + var rootElement = getReactRootElementInContainer(container); + if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) { + return; + } else { + var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + + var rootMarkup = rootElement.outerHTML; + rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum); + + var normalizedMarkup = markup; + if (process.env.NODE_ENV !== 'production') { + // because rootMarkup is retrieved from the DOM, various normalizations + // will have occurred which will not be present in `markup`. Here, + // insert markup into a <div> or <iframe> depending on the container + // type to perform the same normalizations before comparing. + var normalizer; + if (container.nodeType === ELEMENT_NODE_TYPE) { + normalizer = document.createElement('div'); + normalizer.innerHTML = markup; + normalizedMarkup = normalizer.innerHTML; + } else { + normalizer = document.createElement('iframe'); + document.body.appendChild(normalizer); + normalizer.contentDocument.write(markup); + normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML; + document.body.removeChild(normalizer); + } + } + + var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup); + var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20); + + !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : undefined; + } + } + } + + !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined; + + if (transaction.useCreateElement) { + while (container.lastChild) { + container.removeChild(container.lastChild); + } + container.appendChild(markup); + } else { + setInnerHTML(container, markup); + } + }, + + ownerDocumentContextKey: ownerDocumentContextKey, + + /** + * React ID utilities. + */ + + getReactRootID: getReactRootID, + + getID: getID, + + setID: setID, + + getNode: getNode, + + getNodeFromInstance: getNodeFromInstance, + + isValid: isValid, + + purgeID: purgeID + }; + + ReactPerf.measureMethods(ReactMount, 'ReactMount', { + _renderNewRootComponent: '_renderNewRootComponent', + _mountImageIntoNode: '_mountImageIntoNode' + }); + + module.exports = ReactMount; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 28 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactBrowserEventEmitter + * @typechecks static-only + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPluginHub = __webpack_require__(30); + var EventPluginRegistry = __webpack_require__(31); + var ReactEventEmitterMixin = __webpack_require__(36); + var ReactPerf = __webpack_require__(17); + var ViewportMetrics = __webpack_require__(37); + + var assign = __webpack_require__(38); + var isEventSupported = __webpack_require__(39); + + /** + * Summary of `ReactBrowserEventEmitter` event handling: + * + * - Top-level delegation is used to trap most native browser events. This + * may only occur in the main thread and is the responsibility of + * ReactEventListener, which is injected and can therefore support pluggable + * event sources. This is the only work that occurs in the main thread. + * + * - We normalize and de-duplicate events to account for browser quirks. This + * may be done in the worker thread. + * + * - Forward these native events (with the associated top-level type used to + * trap it) to `EventPluginHub`, which in turn will ask plugins if they want + * to extract any synthetic events. + * + * - The `EventPluginHub` will then process each event by annotating them with + * "dispatches", a sequence of listeners and IDs that care about that event. + * + * - The `EventPluginHub` then dispatches the events. + * + * Overview of React and the event system: + * + * +------------+ . + * | DOM | . + * +------------+ . + * | . + * v . + * +------------+ . + * | ReactEvent | . + * | Listener | . + * +------------+ . +-----------+ + * | . +--------+|SimpleEvent| + * | . | |Plugin | + * +-----|------+ . v +-----------+ + * | | | . +--------------+ +------------+ + * | +-----------.--->|EventPluginHub| | Event | + * | | . | | +-----------+ | Propagators| + * | ReactEvent | . | | |TapEvent | |------------| + * | Emitter | . | |<---+|Plugin | |other plugin| + * | | . | | +-----------+ | utilities | + * | +-----------.--->| | +------------+ + * | | | . +--------------+ + * +-----|------+ . ^ +-----------+ + * | . | |Enter/Leave| + * + . +-------+|Plugin | + * +-------------+ . +-----------+ + * | application | . + * |-------------| . + * | | . + * | | . + * +-------------+ . + * . + * React Core . General Purpose Event Plugin System + */ + + var alreadyListeningTo = {}; + var isMonitoringScrollValue = false; + var reactTopListenersCounter = 0; + + // For events like 'submit' which don't consistently bubble (which we trap at a + // lower node than `document`), binding at `document` would cause duplicate + // events so we don't include them here + var topEventMapping = { + topAbort: 'abort', + topBlur: 'blur', + topCanPlay: 'canplay', + topCanPlayThrough: 'canplaythrough', + topChange: 'change', + topClick: 'click', + topCompositionEnd: 'compositionend', + topCompositionStart: 'compositionstart', + topCompositionUpdate: 'compositionupdate', + topContextMenu: 'contextmenu', + topCopy: 'copy', + topCut: 'cut', + topDoubleClick: 'dblclick', + topDrag: 'drag', + topDragEnd: 'dragend', + topDragEnter: 'dragenter', + topDragExit: 'dragexit', + topDragLeave: 'dragleave', + topDragOver: 'dragover', + topDragStart: 'dragstart', + topDrop: 'drop', + topDurationChange: 'durationchange', + topEmptied: 'emptied', + topEncrypted: 'encrypted', + topEnded: 'ended', + topError: 'error', + topFocus: 'focus', + topInput: 'input', + topKeyDown: 'keydown', + topKeyPress: 'keypress', + topKeyUp: 'keyup', + topLoadedData: 'loadeddata', + topLoadedMetadata: 'loadedmetadata', + topLoadStart: 'loadstart', + topMouseDown: 'mousedown', + topMouseMove: 'mousemove', + topMouseOut: 'mouseout', + topMouseOver: 'mouseover', + topMouseUp: 'mouseup', + topPaste: 'paste', + topPause: 'pause', + topPlay: 'play', + topPlaying: 'playing', + topProgress: 'progress', + topRateChange: 'ratechange', + topScroll: 'scroll', + topSeeked: 'seeked', + topSeeking: 'seeking', + topSelectionChange: 'selectionchange', + topStalled: 'stalled', + topSuspend: 'suspend', + topTextInput: 'textInput', + topTimeUpdate: 'timeupdate', + topTouchCancel: 'touchcancel', + topTouchEnd: 'touchend', + topTouchMove: 'touchmove', + topTouchStart: 'touchstart', + topVolumeChange: 'volumechange', + topWaiting: 'waiting', + topWheel: 'wheel' + }; + + /** + * To ensure no conflicts with other potential React instances on the page + */ + var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2); + + function getListeningForDocument(mountAt) { + // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty` + // directly. + if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) { + mountAt[topListenersIDKey] = reactTopListenersCounter++; + alreadyListeningTo[mountAt[topListenersIDKey]] = {}; + } + return alreadyListeningTo[mountAt[topListenersIDKey]]; + } + + /** + * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For + * example: + * + * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction); + * + * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'. + * + * @internal + */ + var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, { + + /** + * Injectable event backend + */ + ReactEventListener: null, + + injection: { + /** + * @param {object} ReactEventListener + */ + injectReactEventListener: function (ReactEventListener) { + ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel); + ReactBrowserEventEmitter.ReactEventListener = ReactEventListener; + } + }, + + /** + * Sets whether or not any created callbacks should be enabled. + * + * @param {boolean} enabled True if callbacks should be enabled. + */ + setEnabled: function (enabled) { + if (ReactBrowserEventEmitter.ReactEventListener) { + ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled); + } + }, + + /** + * @return {boolean} True if callbacks are enabled. + */ + isEnabled: function () { + return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled()); + }, + + /** + * We listen for bubbled touch events on the document object. + * + * Firefox v8.01 (and possibly others) exhibited strange behavior when + * mounting `onmousemove` events at some node that was not the document + * element. The symptoms were that if your mouse is not moving over something + * contained within that mount point (for example on the background) the + * top-level listeners for `onmousemove` won't be called. However, if you + * register the `mousemove` on the document object, then it will of course + * catch all `mousemove`s. This along with iOS quirks, justifies restricting + * top-level listeners to the document object only, at least for these + * movement types of events and possibly all events. + * + * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html + * + * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but + * they bubble to document. + * + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @param {object} contentDocumentHandle Document which owns the container + */ + listenTo: function (registrationName, contentDocumentHandle) { + var mountAt = contentDocumentHandle; + var isListening = getListeningForDocument(mountAt); + var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName]; + + var topLevelTypes = EventConstants.topLevelTypes; + for (var i = 0; i < dependencies.length; i++) { + var dependency = dependencies[i]; + if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) { + if (dependency === topLevelTypes.topWheel) { + if (isEventSupported('wheel')) { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt); + } else if (isEventSupported('mousewheel')) { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt); + } else { + // Firefox needs to capture a different mouse scroll event. + // @see http://www.quirksmode.org/dom/events/tests/scroll.html + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt); + } + } else if (dependency === topLevelTypes.topScroll) { + + if (isEventSupported('scroll', true)) { + ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt); + } else { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE); + } + } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) { + + if (isEventSupported('focus', true)) { + ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt); + ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt); + } else if (isEventSupported('focusin')) { + // IE has `focusin` and `focusout` events which bubble. + // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt); + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt); + } + + // to make sure blur and focus event listeners are only attached once + isListening[topLevelTypes.topBlur] = true; + isListening[topLevelTypes.topFocus] = true; + } else if (topEventMapping.hasOwnProperty(dependency)) { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt); + } + + isListening[dependency] = true; + } + } + }, + + trapBubbledEvent: function (topLevelType, handlerBaseName, handle) { + return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle); + }, + + trapCapturedEvent: function (topLevelType, handlerBaseName, handle) { + return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle); + }, + + /** + * Listens to window scroll and resize events. We cache scroll values so that + * application code can access them without triggering reflows. + * + * NOTE: Scroll events do not bubble. + * + * @see http://www.quirksmode.org/dom/events/scroll.html + */ + ensureScrollValueMonitoring: function () { + if (!isMonitoringScrollValue) { + var refresh = ViewportMetrics.refreshScrollValues; + ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh); + isMonitoringScrollValue = true; + } + }, + + eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs, + + registrationNameModules: EventPluginHub.registrationNameModules, + + putListener: EventPluginHub.putListener, + + getListener: EventPluginHub.getListener, + + deleteListener: EventPluginHub.deleteListener, + + deleteAllListeners: EventPluginHub.deleteAllListeners + + }); + + ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', { + putListener: 'putListener', + deleteListener: 'deleteListener' + }); + + module.exports = ReactBrowserEventEmitter; + +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventConstants + */ + + 'use strict'; + + var keyMirror = __webpack_require__(16); + + var PropagationPhases = keyMirror({ bubbled: null, captured: null }); + + /** + * Types of raw signals from the browser caught at the top level. + */ + var topLevelTypes = keyMirror({ + topAbort: null, + topBlur: null, + topCanPlay: null, + topCanPlayThrough: null, + topChange: null, + topClick: null, + topCompositionEnd: null, + topCompositionStart: null, + topCompositionUpdate: null, + topContextMenu: null, + topCopy: null, + topCut: null, + topDoubleClick: null, + topDrag: null, + topDragEnd: null, + topDragEnter: null, + topDragExit: null, + topDragLeave: null, + topDragOver: null, + topDragStart: null, + topDrop: null, + topDurationChange: null, + topEmptied: null, + topEncrypted: null, + topEnded: null, + topError: null, + topFocus: null, + topInput: null, + topKeyDown: null, + topKeyPress: null, + topKeyUp: null, + topLoad: null, + topLoadedData: null, + topLoadedMetadata: null, + topLoadStart: null, + topMouseDown: null, + topMouseMove: null, + topMouseOut: null, + topMouseOver: null, + topMouseUp: null, + topPaste: null, + topPause: null, + topPlay: null, + topPlaying: null, + topProgress: null, + topRateChange: null, + topReset: null, + topScroll: null, + topSeeked: null, + topSeeking: null, + topSelectionChange: null, + topStalled: null, + topSubmit: null, + topSuspend: null, + topTextInput: null, + topTimeUpdate: null, + topTouchCancel: null, + topTouchEnd: null, + topTouchMove: null, + topTouchStart: null, + topVolumeChange: null, + topWaiting: null, + topWheel: null + }); + + var EventConstants = { + topLevelTypes: topLevelTypes, + PropagationPhases: PropagationPhases + }; + + module.exports = EventConstants; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPluginHub + */ + + 'use strict'; + + var EventPluginRegistry = __webpack_require__(31); + var EventPluginUtils = __webpack_require__(32); + var ReactErrorUtils = __webpack_require__(33); + + var accumulateInto = __webpack_require__(34); + var forEachAccumulated = __webpack_require__(35); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Internal store for event listeners + */ + var listenerBank = {}; + + /** + * Internal queue of events that have accumulated their dispatches and are + * waiting to have their dispatches executed. + */ + var eventQueue = null; + + /** + * Dispatches an event and releases it back into the pool, unless persistent. + * + * @param {?object} event Synthetic event to be dispatched. + * @param {boolean} simulated If the event is simulated (changes exn behavior) + * @private + */ + var executeDispatchesAndRelease = function (event, simulated) { + if (event) { + EventPluginUtils.executeDispatchesInOrder(event, simulated); + + if (!event.isPersistent()) { + event.constructor.release(event); + } + } + }; + var executeDispatchesAndReleaseSimulated = function (e) { + return executeDispatchesAndRelease(e, true); + }; + var executeDispatchesAndReleaseTopLevel = function (e) { + return executeDispatchesAndRelease(e, false); + }; + + /** + * - `InstanceHandle`: [required] Module that performs logical traversals of DOM + * hierarchy given ids of the logical DOM elements involved. + */ + var InstanceHandle = null; + + function validateInstanceHandle() { + var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave; + process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined; + } + + /** + * This is a unified interface for event plugins to be installed and configured. + * + * Event plugins can implement the following properties: + * + * `extractEvents` {function(string, DOMEventTarget, string, object): *} + * Required. When a top-level event is fired, this method is expected to + * extract synthetic events that will in turn be queued and dispatched. + * + * `eventTypes` {object} + * Optional, plugins that fire events must publish a mapping of registration + * names that are used to register listeners. Values of this mapping must + * be objects that contain `registrationName` or `phasedRegistrationNames`. + * + * `executeDispatch` {function(object, function, string)} + * Optional, allows plugins to override how an event gets dispatched. By + * default, the listener is simply invoked. + * + * Each plugin that is injected into `EventsPluginHub` is immediately operable. + * + * @public + */ + var EventPluginHub = { + + /** + * Methods for injecting dependencies. + */ + injection: { + + /** + * @param {object} InjectedMount + * @public + */ + injectMount: EventPluginUtils.injection.injectMount, + + /** + * @param {object} InjectedInstanceHandle + * @public + */ + injectInstanceHandle: function (InjectedInstanceHandle) { + InstanceHandle = InjectedInstanceHandle; + if (process.env.NODE_ENV !== 'production') { + validateInstanceHandle(); + } + }, + + getInstanceHandle: function () { + if (process.env.NODE_ENV !== 'production') { + validateInstanceHandle(); + } + return InstanceHandle; + }, + + /** + * @param {array} InjectedEventPluginOrder + * @public + */ + injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder, + + /** + * @param {object} injectedNamesToPlugins Map from names to plugin modules. + */ + injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName + + }, + + eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs, + + registrationNameModules: EventPluginRegistry.registrationNameModules, + + /** + * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent. + * + * @param {string} id ID of the DOM element. + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @param {?function} listener The callback to store. + */ + putListener: function (id, registrationName, listener) { + !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined; + + var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {}); + bankForRegistrationName[id] = listener; + + var PluginModule = EventPluginRegistry.registrationNameModules[registrationName]; + if (PluginModule && PluginModule.didPutListener) { + PluginModule.didPutListener(id, registrationName, listener); + } + }, + + /** + * @param {string} id ID of the DOM element. + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @return {?function} The stored callback. + */ + getListener: function (id, registrationName) { + var bankForRegistrationName = listenerBank[registrationName]; + return bankForRegistrationName && bankForRegistrationName[id]; + }, + + /** + * Deletes a listener from the registration bank. + * + * @param {string} id ID of the DOM element. + * @param {string} registrationName Name of listener (e.g. `onClick`). + */ + deleteListener: function (id, registrationName) { + var PluginModule = EventPluginRegistry.registrationNameModules[registrationName]; + if (PluginModule && PluginModule.willDeleteListener) { + PluginModule.willDeleteListener(id, registrationName); + } + + var bankForRegistrationName = listenerBank[registrationName]; + // TODO: This should never be null -- when is it? + if (bankForRegistrationName) { + delete bankForRegistrationName[id]; + } + }, + + /** + * Deletes all listeners for the DOM element with the supplied ID. + * + * @param {string} id ID of the DOM element. + */ + deleteAllListeners: function (id) { + for (var registrationName in listenerBank) { + if (!listenerBank[registrationName][id]) { + continue; + } + + var PluginModule = EventPluginRegistry.registrationNameModules[registrationName]; + if (PluginModule && PluginModule.willDeleteListener) { + PluginModule.willDeleteListener(id, registrationName); + } + + delete listenerBank[registrationName][id]; + } + }, + + /** + * Allows registered plugins an opportunity to extract events from top-level + * native browser events. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @internal + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var events; + var plugins = EventPluginRegistry.plugins; + for (var i = 0; i < plugins.length; i++) { + // Not every plugin in the ordering may be loaded at runtime. + var possiblePlugin = plugins[i]; + if (possiblePlugin) { + var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget); + if (extractedEvents) { + events = accumulateInto(events, extractedEvents); + } + } + } + return events; + }, + + /** + * Enqueues a synthetic event that should be dispatched when + * `processEventQueue` is invoked. + * + * @param {*} events An accumulation of synthetic events. + * @internal + */ + enqueueEvents: function (events) { + if (events) { + eventQueue = accumulateInto(eventQueue, events); + } + }, + + /** + * Dispatches all synthetic events on the event queue. + * + * @internal + */ + processEventQueue: function (simulated) { + // Set `eventQueue` to null before processing it so that we can tell if more + // events get enqueued while processing. + var processingEventQueue = eventQueue; + eventQueue = null; + if (simulated) { + forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated); + } else { + forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel); + } + !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined; + // This would be a good time to rethrow if any of the event handlers threw. + ReactErrorUtils.rethrowCaughtError(); + }, + + /** + * These are needed for tests only. Do not use! + */ + __purge: function () { + listenerBank = {}; + }, + + __getListenerBank: function () { + return listenerBank; + } + + }; + + module.exports = EventPluginHub; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPluginRegistry + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Injectable ordering of event plugins. + */ + var EventPluginOrder = null; + + /** + * Injectable mapping from names to event plugin modules. + */ + var namesToPlugins = {}; + + /** + * Recomputes the plugin list using the injected plugins and plugin ordering. + * + * @private + */ + function recomputePluginOrdering() { + if (!EventPluginOrder) { + // Wait until an `EventPluginOrder` is injected. + return; + } + for (var pluginName in namesToPlugins) { + var PluginModule = namesToPlugins[pluginName]; + var pluginIndex = EventPluginOrder.indexOf(pluginName); + !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined; + if (EventPluginRegistry.plugins[pluginIndex]) { + continue; + } + !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined; + EventPluginRegistry.plugins[pluginIndex] = PluginModule; + var publishedEvents = PluginModule.eventTypes; + for (var eventName in publishedEvents) { + !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined; + } + } + } + + /** + * Publishes an event so that it can be dispatched by the supplied plugin. + * + * @param {object} dispatchConfig Dispatch configuration for the event. + * @param {object} PluginModule Plugin publishing the event. + * @return {boolean} True if the event was successfully published. + * @private + */ + function publishEventForPlugin(dispatchConfig, PluginModule, eventName) { + !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined; + EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig; + + var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames; + if (phasedRegistrationNames) { + for (var phaseName in phasedRegistrationNames) { + if (phasedRegistrationNames.hasOwnProperty(phaseName)) { + var phasedRegistrationName = phasedRegistrationNames[phaseName]; + publishRegistrationName(phasedRegistrationName, PluginModule, eventName); + } + } + return true; + } else if (dispatchConfig.registrationName) { + publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName); + return true; + } + return false; + } + + /** + * Publishes a registration name that is used to identify dispatched events and + * can be used with `EventPluginHub.putListener` to register listeners. + * + * @param {string} registrationName Registration name to add. + * @param {object} PluginModule Plugin publishing the event. + * @private + */ + function publishRegistrationName(registrationName, PluginModule, eventName) { + !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined; + EventPluginRegistry.registrationNameModules[registrationName] = PluginModule; + EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies; + } + + /** + * Registers plugins so that they can extract and dispatch events. + * + * @see {EventPluginHub} + */ + var EventPluginRegistry = { + + /** + * Ordered list of injected plugins. + */ + plugins: [], + + /** + * Mapping from event name to dispatch config + */ + eventNameDispatchConfigs: {}, + + /** + * Mapping from registration name to plugin module + */ + registrationNameModules: {}, + + /** + * Mapping from registration name to event name + */ + registrationNameDependencies: {}, + + /** + * Injects an ordering of plugins (by plugin name). This allows the ordering + * to be decoupled from injection of the actual plugins so that ordering is + * always deterministic regardless of packaging, on-the-fly injection, etc. + * + * @param {array} InjectedEventPluginOrder + * @internal + * @see {EventPluginHub.injection.injectEventPluginOrder} + */ + injectEventPluginOrder: function (InjectedEventPluginOrder) { + !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined; + // Clone the ordering so it cannot be dynamically mutated. + EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder); + recomputePluginOrdering(); + }, + + /** + * Injects plugins to be used by `EventPluginHub`. The plugin names must be + * in the ordering injected by `injectEventPluginOrder`. + * + * Plugins can be injected as part of page initialization or on-the-fly. + * + * @param {object} injectedNamesToPlugins Map from names to plugin modules. + * @internal + * @see {EventPluginHub.injection.injectEventPluginsByName} + */ + injectEventPluginsByName: function (injectedNamesToPlugins) { + var isOrderingDirty = false; + for (var pluginName in injectedNamesToPlugins) { + if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) { + continue; + } + var PluginModule = injectedNamesToPlugins[pluginName]; + if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) { + !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined; + namesToPlugins[pluginName] = PluginModule; + isOrderingDirty = true; + } + } + if (isOrderingDirty) { + recomputePluginOrdering(); + } + }, + + /** + * Looks up the plugin for the supplied event. + * + * @param {object} event A synthetic event. + * @return {?object} The plugin that created the supplied event. + * @internal + */ + getPluginModuleForEvent: function (event) { + var dispatchConfig = event.dispatchConfig; + if (dispatchConfig.registrationName) { + return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null; + } + for (var phase in dispatchConfig.phasedRegistrationNames) { + if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) { + continue; + } + var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]]; + if (PluginModule) { + return PluginModule; + } + } + return null; + }, + + /** + * Exposed for unit testing. + * @private + */ + _resetEventPlugins: function () { + EventPluginOrder = null; + for (var pluginName in namesToPlugins) { + if (namesToPlugins.hasOwnProperty(pluginName)) { + delete namesToPlugins[pluginName]; + } + } + EventPluginRegistry.plugins.length = 0; + + var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs; + for (var eventName in eventNameDispatchConfigs) { + if (eventNameDispatchConfigs.hasOwnProperty(eventName)) { + delete eventNameDispatchConfigs[eventName]; + } + } + + var registrationNameModules = EventPluginRegistry.registrationNameModules; + for (var registrationName in registrationNameModules) { + if (registrationNameModules.hasOwnProperty(registrationName)) { + delete registrationNameModules[registrationName]; + } + } + } + + }; + + module.exports = EventPluginRegistry; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPluginUtils + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var ReactErrorUtils = __webpack_require__(33); + + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Injected dependencies: + */ + + /** + * - `Mount`: [required] Module that can convert between React dom IDs and + * actual node references. + */ + var injection = { + Mount: null, + injectMount: function (InjectedMount) { + injection.Mount = InjectedMount; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined; + } + } + }; + + var topLevelTypes = EventConstants.topLevelTypes; + + function isEndish(topLevelType) { + return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel; + } + + function isMoveish(topLevelType) { + return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove; + } + function isStartish(topLevelType) { + return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart; + } + + var validateEventDispatches; + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches = function (event) { + var dispatchListeners = event._dispatchListeners; + var dispatchIDs = event._dispatchIDs; + + var listenersIsArr = Array.isArray(dispatchListeners); + var idsIsArr = Array.isArray(dispatchIDs); + var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0; + var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0; + + process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined; + }; + } + + /** + * Dispatch the event to the listener. + * @param {SyntheticEvent} event SyntheticEvent to handle + * @param {boolean} simulated If the event is simulated (changes exn behavior) + * @param {function} listener Application-level callback + * @param {string} domID DOM id to pass to the callback. + */ + function executeDispatch(event, simulated, listener, domID) { + var type = event.type || 'unknown-event'; + event.currentTarget = injection.Mount.getNode(domID); + if (simulated) { + ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID); + } else { + ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID); + } + event.currentTarget = null; + } + + /** + * Standard/simple iteration through an event's collected dispatches. + */ + function executeDispatchesInOrder(event, simulated) { + var dispatchListeners = event._dispatchListeners; + var dispatchIDs = event._dispatchIDs; + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches(event); + } + if (Array.isArray(dispatchListeners)) { + for (var i = 0; i < dispatchListeners.length; i++) { + if (event.isPropagationStopped()) { + break; + } + // Listeners and IDs are two parallel arrays that are always in sync. + executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]); + } + } else if (dispatchListeners) { + executeDispatch(event, simulated, dispatchListeners, dispatchIDs); + } + event._dispatchListeners = null; + event._dispatchIDs = null; + } + + /** + * Standard/simple iteration through an event's collected dispatches, but stops + * at the first dispatch execution returning true, and returns that id. + * + * @return {?string} id of the first dispatch execution who's listener returns + * true, or null if no listener returned true. + */ + function executeDispatchesInOrderStopAtTrueImpl(event) { + var dispatchListeners = event._dispatchListeners; + var dispatchIDs = event._dispatchIDs; + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches(event); + } + if (Array.isArray(dispatchListeners)) { + for (var i = 0; i < dispatchListeners.length; i++) { + if (event.isPropagationStopped()) { + break; + } + // Listeners and IDs are two parallel arrays that are always in sync. + if (dispatchListeners[i](event, dispatchIDs[i])) { + return dispatchIDs[i]; + } + } + } else if (dispatchListeners) { + if (dispatchListeners(event, dispatchIDs)) { + return dispatchIDs; + } + } + return null; + } + + /** + * @see executeDispatchesInOrderStopAtTrueImpl + */ + function executeDispatchesInOrderStopAtTrue(event) { + var ret = executeDispatchesInOrderStopAtTrueImpl(event); + event._dispatchIDs = null; + event._dispatchListeners = null; + return ret; + } + + /** + * Execution of a "direct" dispatch - there must be at most one dispatch + * accumulated on the event or it is considered an error. It doesn't really make + * sense for an event with multiple dispatches (bubbled) to keep track of the + * return values at each dispatch execution, but it does tend to make sense when + * dealing with "direct" dispatches. + * + * @return {*} The return value of executing the single dispatch. + */ + function executeDirectDispatch(event) { + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches(event); + } + var dispatchListener = event._dispatchListeners; + var dispatchID = event._dispatchIDs; + !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined; + var res = dispatchListener ? dispatchListener(event, dispatchID) : null; + event._dispatchListeners = null; + event._dispatchIDs = null; + return res; + } + + /** + * @param {SyntheticEvent} event + * @return {boolean} True iff number of dispatches accumulated is greater than 0. + */ + function hasDispatches(event) { + return !!event._dispatchListeners; + } + + /** + * General utilities that are useful in creating custom Event Plugins. + */ + var EventPluginUtils = { + isEndish: isEndish, + isMoveish: isMoveish, + isStartish: isStartish, + + executeDirectDispatch: executeDirectDispatch, + executeDispatchesInOrder: executeDispatchesInOrder, + executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue, + hasDispatches: hasDispatches, + + getNode: function (id) { + return injection.Mount.getNode(id); + }, + getID: function (node) { + return injection.Mount.getID(node); + }, + + injection: injection + }; + + module.exports = EventPluginUtils; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 33 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactErrorUtils + * @typechecks + */ + + 'use strict'; + + var caughtError = null; + + /** + * Call a function while guarding against errors that happens within it. + * + * @param {?String} name of the guard to use for logging or debugging + * @param {Function} func The function to invoke + * @param {*} a First argument + * @param {*} b Second argument + */ + function invokeGuardedCallback(name, func, a, b) { + try { + return func(a, b); + } catch (x) { + if (caughtError === null) { + caughtError = x; + } + return undefined; + } + } + + var ReactErrorUtils = { + invokeGuardedCallback: invokeGuardedCallback, + + /** + * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event + * handler are sure to be rethrown by rethrowCaughtError. + */ + invokeGuardedCallbackWithCatch: invokeGuardedCallback, + + /** + * During execution of guarded functions we will capture the first error which + * we will rethrow to be handled by the top level error handler. + */ + rethrowCaughtError: function () { + if (caughtError) { + var error = caughtError; + caughtError = null; + throw error; + } + } + }; + + if (process.env.NODE_ENV !== 'production') { + /** + * To help development we can get better devtools integration by simulating a + * real browser event. + */ + if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') { + var fakeNode = document.createElement('react'); + ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) { + var boundFunc = func.bind(null, a, b); + var evtType = 'react-' + name; + fakeNode.addEventListener(evtType, boundFunc, false); + var evt = document.createEvent('Event'); + evt.initEvent(evtType, false, false); + fakeNode.dispatchEvent(evt); + fakeNode.removeEventListener(evtType, boundFunc, false); + }; + } + } + + module.exports = ReactErrorUtils; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 34 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule accumulateInto + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * + * Accumulates items that must not be null or undefined into the first one. This + * is used to conserve memory by avoiding array allocations, and thus sacrifices + * API cleanness. Since `current` can be null before being passed in and not + * null after this function, make sure to assign it back to `current`: + * + * `a = accumulateInto(a, b);` + * + * This API should be sparingly used. Try `accumulate` for something cleaner. + * + * @return {*|array<*>} An accumulation of items. + */ + + function accumulateInto(current, next) { + !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined; + if (current == null) { + return next; + } + + // Both are not empty. Warning: Never call x.concat(y) when you are not + // certain that x is an Array (x could be a string with concat method). + var currentIsArray = Array.isArray(current); + var nextIsArray = Array.isArray(next); + + if (currentIsArray && nextIsArray) { + current.push.apply(current, next); + return current; + } + + if (currentIsArray) { + current.push(next); + return current; + } + + if (nextIsArray) { + // A bit too dangerous to mutate `next`. + return [current].concat(next); + } + + return [current, next]; + } + + module.exports = accumulateInto; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 35 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule forEachAccumulated + */ + + 'use strict'; + + /** + * @param {array} arr an "accumulation" of items which is either an Array or + * a single item. Useful when paired with the `accumulate` module. This is a + * simple utility that allows us to reason about a collection of items, but + * handling the case when there is exactly one item (and we do not need to + * allocate an array). + */ + var forEachAccumulated = function (arr, cb, scope) { + if (Array.isArray(arr)) { + arr.forEach(cb, scope); + } else if (arr) { + cb.call(scope, arr); + } + }; + + module.exports = forEachAccumulated; + +/***/ }, +/* 36 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEventEmitterMixin + */ + + 'use strict'; + + var EventPluginHub = __webpack_require__(30); + + function runEventQueueInBatch(events) { + EventPluginHub.enqueueEvents(events); + EventPluginHub.processEventQueue(false); + } + + var ReactEventEmitterMixin = { + + /** + * Streams a fired top-level event to `EventPluginHub` where plugins have the + * opportunity to create `ReactEvent`s to be dispatched. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {object} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native environment event. + */ + handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget); + runEventQueueInBatch(events); + } + }; + + module.exports = ReactEventEmitterMixin; + +/***/ }, +/* 37 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ViewportMetrics + */ + + 'use strict'; + + var ViewportMetrics = { + + currentScrollLeft: 0, + + currentScrollTop: 0, + + refreshScrollValues: function (scrollPosition) { + ViewportMetrics.currentScrollLeft = scrollPosition.x; + ViewportMetrics.currentScrollTop = scrollPosition.y; + } + + }; + + module.exports = ViewportMetrics; + +/***/ }, +/* 38 */ +/***/ function(module, exports) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Object.assign + */ + + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign + + 'use strict'; + + function assign(target, sources) { + if (target == null) { + throw new TypeError('Object.assign target cannot be null or undefined'); + } + + var to = Object(target); + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { + var nextSource = arguments[nextIndex]; + if (nextSource == null) { + continue; + } + + var from = Object(nextSource); + + // We don't currently support accessors nor proxies. Therefore this + // copy cannot throw. If we ever supported this then we must handle + // exceptions and side-effects. We don't support symbols so they won't + // be transferred. + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + } + + return to; + } + + module.exports = assign; + +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isEventSupported + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var useHasFeature; + if (ExecutionEnvironment.canUseDOM) { + useHasFeature = document.implementation && document.implementation.hasFeature && + // always returns true in newer browsers as per the standard. + // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature + document.implementation.hasFeature('', '') !== true; + } + + /** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ + function isEventSupported(eventNameSuffix, capture) { + if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) { + return false; + } + + var eventName = 'on' + eventNameSuffix; + var isSupported = (eventName in document); + + if (!isSupported) { + var element = document.createElement('div'); + element.setAttribute(eventName, 'return;'); + isSupported = typeof element[eventName] === 'function'; + } + + if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') { + // This is the only way to test support for the `wheel` event in IE9+. + isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); + } + + return isSupported; + } + + module.exports = isEventSupported; + +/***/ }, +/* 40 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMFeatureFlags + */ + + 'use strict'; + + var ReactDOMFeatureFlags = { + useCreateElement: false + }; + + module.exports = ReactDOMFeatureFlags; + +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactElement + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + + var assign = __webpack_require__(38); + var canDefineProperty = __webpack_require__(42); + + // The Symbol used to tag the ReactElement type. If there is no native Symbol + // nor polyfill, then a plain number is used for performance. + var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7; + + var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true + }; + + /** + * Base constructor for all React elements. This is only used to make this + * work with a dynamic instanceof check. Nothing should live on this prototype. + * + * @param {*} type + * @param {*} key + * @param {string|object} ref + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @param {*} owner + * @param {*} props + * @internal + */ + var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allow us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + + // Record the component responsible for creating this element. + _owner: owner + }; + + if (process.env.NODE_ENV !== 'production') { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; + + // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + if (canDefineProperty) { + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); + // self and source are DEV only properties. + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); + // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + } else { + element._store.validated = false; + element._self = self; + element._source = source; + } + Object.freeze(element.props); + Object.freeze(element); + } + + return element; + }; + + ReactElement.createElement = function (type, config, children) { + var propName; + + // Reserved names are extracted + var props = {}; + + var key = null; + var ref = null; + var self = null; + var source = null; + + if (config != null) { + ref = config.ref === undefined ? null : config.ref; + key = config.key === undefined ? null : '' + config.key; + self = config.__self === undefined ? null : config.__self; + source = config.__source === undefined ? null : config.__source; + // Remaining properties are added to a new props object + for (propName in config) { + if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + var childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + props.children = childArray; + } + + // Resolve default props + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + for (propName in defaultProps) { + if (typeof props[propName] === 'undefined') { + props[propName] = defaultProps[propName]; + } + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + }; + + ReactElement.createFactory = function (type) { + var factory = ReactElement.createElement.bind(null, type); + // Expose the type on the factory and the prototype so that it can be + // easily accessed on elements. E.g. `<Foo />.type === Foo`. + // This should not be named `constructor` since this may not be the function + // that created the element, and it may not even be a constructor. + // Legacy hook TODO: Warn if this is accessed + factory.type = type; + return factory; + }; + + ReactElement.cloneAndReplaceKey = function (oldElement, newKey) { + var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); + + return newElement; + }; + + ReactElement.cloneAndReplaceProps = function (oldElement, newProps) { + var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps); + + if (process.env.NODE_ENV !== 'production') { + // If the key on the original is valid, then the clone is valid + newElement._store.validated = oldElement._store.validated; + } + + return newElement; + }; + + ReactElement.cloneElement = function (element, config, children) { + var propName; + + // Original props are copied + var props = assign({}, element.props); + + // Reserved names are extracted + var key = element.key; + var ref = element.ref; + // Self is preserved since the owner is preserved. + var self = element._self; + // Source is preserved since cloneElement is unlikely to be targeted by a + // transpiler, and the original source is probably a better indicator of the + // true owner. + var source = element._source; + + // Owner will be preserved, unless ref is overridden + var owner = element._owner; + + if (config != null) { + if (config.ref !== undefined) { + // Silently steal the ref from the parent. + ref = config.ref; + owner = ReactCurrentOwner.current; + } + if (config.key !== undefined) { + key = '' + config.key; + } + // Remaining properties override existing props + for (propName in config) { + if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + var childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + props.children = childArray; + } + + return ReactElement(element.type, key, ref, self, source, owner, props); + }; + + /** + * @param {?object} object + * @return {boolean} True if `object` is a valid component. + * @final + */ + ReactElement.isValidElement = function (object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + }; + + module.exports = ReactElement; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 42 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule canDefineProperty + */ + + 'use strict'; + + var canDefineProperty = false; + if (process.env.NODE_ENV !== 'production') { + try { + Object.defineProperty({}, 'x', { get: function () {} }); + canDefineProperty = true; + } catch (x) { + // IE will fail on defineProperty + } + } + + module.exports = canDefineProperty; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 43 */ +/***/ function(module, exports) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEmptyComponentRegistry + */ + + 'use strict'; + + // This registry keeps track of the React IDs of the components that rendered to + // `null` (in reality a placeholder such as `noscript`) + var nullComponentIDsRegistry = {}; + + /** + * @param {string} id Component's `_rootNodeID`. + * @return {boolean} True if the component is rendered to null. + */ + function isNullComponentID(id) { + return !!nullComponentIDsRegistry[id]; + } + + /** + * Mark the component as having rendered to null. + * @param {string} id Component's `_rootNodeID`. + */ + function registerNullComponentID(id) { + nullComponentIDsRegistry[id] = true; + } + + /** + * Unmark the component as having rendered to null: it renders to something now. + * @param {string} id Component's `_rootNodeID`. + */ + function deregisterNullComponentID(id) { + delete nullComponentIDsRegistry[id]; + } + + var ReactEmptyComponentRegistry = { + isNullComponentID: isNullComponentID, + registerNullComponentID: registerNullComponentID, + deregisterNullComponentID: deregisterNullComponentID + }; + + module.exports = ReactEmptyComponentRegistry; + +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInstanceHandles + * @typechecks static-only + */ + + 'use strict'; + + var ReactRootIndex = __webpack_require__(45); + + var invariant = __webpack_require__(12); + + var SEPARATOR = '.'; + var SEPARATOR_LENGTH = SEPARATOR.length; + + /** + * Maximum depth of traversals before we consider the possibility of a bad ID. + */ + var MAX_TREE_DEPTH = 10000; + + /** + * Creates a DOM ID prefix to use when mounting React components. + * + * @param {number} index A unique integer + * @return {string} React root ID. + * @internal + */ + function getReactRootIDString(index) { + return SEPARATOR + index.toString(36); + } + + /** + * Checks if a character in the supplied ID is a separator or the end. + * + * @param {string} id A React DOM ID. + * @param {number} index Index of the character to check. + * @return {boolean} True if the character is a separator or end of the ID. + * @private + */ + function isBoundary(id, index) { + return id.charAt(index) === SEPARATOR || index === id.length; + } + + /** + * Checks if the supplied string is a valid React DOM ID. + * + * @param {string} id A React DOM ID, maybe. + * @return {boolean} True if the string is a valid React DOM ID. + * @private + */ + function isValidID(id) { + return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR; + } + + /** + * Checks if the first ID is an ancestor of or equal to the second ID. + * + * @param {string} ancestorID + * @param {string} descendantID + * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`. + * @internal + */ + function isAncestorIDOf(ancestorID, descendantID) { + return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length); + } + + /** + * Gets the parent ID of the supplied React DOM ID, `id`. + * + * @param {string} id ID of a component. + * @return {string} ID of the parent, or an empty string. + * @private + */ + function getParentID(id) { + return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : ''; + } + + /** + * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the + * supplied `destinationID`. If they are equal, the ID is returned. + * + * @param {string} ancestorID ID of an ancestor node of `destinationID`. + * @param {string} destinationID ID of the destination node. + * @return {string} Next ID on the path from `ancestorID` to `destinationID`. + * @private + */ + function getNextDescendantID(ancestorID, destinationID) { + !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined; + !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined; + if (ancestorID === destinationID) { + return ancestorID; + } + // Skip over the ancestor and the immediate separator. Traverse until we hit + // another separator or we reach the end of `destinationID`. + var start = ancestorID.length + SEPARATOR_LENGTH; + var i; + for (i = start; i < destinationID.length; i++) { + if (isBoundary(destinationID, i)) { + break; + } + } + return destinationID.substr(0, i); + } + + /** + * Gets the nearest common ancestor ID of two IDs. + * + * Using this ID scheme, the nearest common ancestor ID is the longest common + * prefix of the two IDs that immediately preceded a "marker" in both strings. + * + * @param {string} oneID + * @param {string} twoID + * @return {string} Nearest common ancestor ID, or the empty string if none. + * @private + */ + function getFirstCommonAncestorID(oneID, twoID) { + var minLength = Math.min(oneID.length, twoID.length); + if (minLength === 0) { + return ''; + } + var lastCommonMarkerIndex = 0; + // Use `<=` to traverse until the "EOL" of the shorter string. + for (var i = 0; i <= minLength; i++) { + if (isBoundary(oneID, i) && isBoundary(twoID, i)) { + lastCommonMarkerIndex = i; + } else if (oneID.charAt(i) !== twoID.charAt(i)) { + break; + } + } + var longestCommonID = oneID.substr(0, lastCommonMarkerIndex); + !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined; + return longestCommonID; + } + + /** + * Traverses the parent path between two IDs (either up or down). The IDs must + * not be the same, and there must exist a parent path between them. If the + * callback returns `false`, traversal is stopped. + * + * @param {?string} start ID at which to start traversal. + * @param {?string} stop ID at which to end traversal. + * @param {function} cb Callback to invoke each ID with. + * @param {*} arg Argument to invoke the callback with. + * @param {?boolean} skipFirst Whether or not to skip the first node. + * @param {?boolean} skipLast Whether or not to skip the last node. + * @private + */ + function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) { + start = start || ''; + stop = stop || ''; + !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined; + var traverseUp = isAncestorIDOf(stop, start); + !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined; + // Traverse from `start` to `stop` one depth at a time. + var depth = 0; + var traverse = traverseUp ? getParentID : getNextDescendantID; + for (var id = start;; /* until break */id = traverse(id, stop)) { + var ret; + if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) { + ret = cb(id, traverseUp, arg); + } + if (ret === false || id === stop) { + // Only break //after// visiting `stop`. + break; + } + !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined; + } + } + + /** + * Manages the IDs assigned to DOM representations of React components. This + * uses a specific scheme in order to traverse the DOM efficiently (e.g. in + * order to simulate events). + * + * @internal + */ + var ReactInstanceHandles = { + + /** + * Constructs a React root ID + * @return {string} A React root ID. + */ + createReactRootID: function () { + return getReactRootIDString(ReactRootIndex.createReactRootIndex()); + }, + + /** + * Constructs a React ID by joining a root ID with a name. + * + * @param {string} rootID Root ID of a parent component. + * @param {string} name A component's name (as flattened children). + * @return {string} A React ID. + * @internal + */ + createReactID: function (rootID, name) { + return rootID + name; + }, + + /** + * Gets the DOM ID of the React component that is the root of the tree that + * contains the React component with the supplied DOM ID. + * + * @param {string} id DOM ID of a React component. + * @return {?string} DOM ID of the React component that is the root. + * @internal + */ + getReactRootIDFromNodeID: function (id) { + if (id && id.charAt(0) === SEPARATOR && id.length > 1) { + var index = id.indexOf(SEPARATOR, 1); + return index > -1 ? id.substr(0, index) : id; + } + return null; + }, + + /** + * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that + * should would receive a `mouseEnter` or `mouseLeave` event. + * + * NOTE: Does not invoke the callback on the nearest common ancestor because + * nothing "entered" or "left" that element. + * + * @param {string} leaveID ID being left. + * @param {string} enterID ID being entered. + * @param {function} cb Callback to invoke on each entered/left ID. + * @param {*} upArg Argument to invoke the callback with on left IDs. + * @param {*} downArg Argument to invoke the callback with on entered IDs. + * @internal + */ + traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) { + var ancestorID = getFirstCommonAncestorID(leaveID, enterID); + if (ancestorID !== leaveID) { + traverseParentPath(leaveID, ancestorID, cb, upArg, false, true); + } + if (ancestorID !== enterID) { + traverseParentPath(ancestorID, enterID, cb, downArg, true, false); + } + }, + + /** + * Simulates the traversal of a two-phase, capture/bubble event dispatch. + * + * NOTE: This traversal happens on IDs without touching the DOM. + * + * @param {string} targetID ID of the target node. + * @param {function} cb Callback to invoke. + * @param {*} arg Argument to invoke the callback with. + * @internal + */ + traverseTwoPhase: function (targetID, cb, arg) { + if (targetID) { + traverseParentPath('', targetID, cb, arg, true, false); + traverseParentPath(targetID, '', cb, arg, false, true); + } + }, + + /** + * Same as `traverseTwoPhase` but skips the `targetID`. + */ + traverseTwoPhaseSkipTarget: function (targetID, cb, arg) { + if (targetID) { + traverseParentPath('', targetID, cb, arg, true, true); + traverseParentPath(targetID, '', cb, arg, true, true); + } + }, + + /** + * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For + * example, passing `.0.$row-0.1` would result in `cb` getting called + * with `.0`, `.0.$row-0`, and `.0.$row-0.1`. + * + * NOTE: This traversal happens on IDs without touching the DOM. + * + * @param {string} targetID ID of the target node. + * @param {function} cb Callback to invoke. + * @param {*} arg Argument to invoke the callback with. + * @internal + */ + traverseAncestors: function (targetID, cb, arg) { + traverseParentPath('', targetID, cb, arg, true, false); + }, + + getFirstCommonAncestorID: getFirstCommonAncestorID, + + /** + * Exposed for unit testing. + * @private + */ + _getNextDescendantID: getNextDescendantID, + + isAncestorIDOf: isAncestorIDOf, + + SEPARATOR: SEPARATOR + + }; + + module.exports = ReactInstanceHandles; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 45 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactRootIndex + * @typechecks + */ + + 'use strict'; + + var ReactRootIndexInjection = { + /** + * @param {function} _createReactRootIndex + */ + injectCreateReactRootIndex: function (_createReactRootIndex) { + ReactRootIndex.createReactRootIndex = _createReactRootIndex; + } + }; + + var ReactRootIndex = { + createReactRootIndex: null, + injection: ReactRootIndexInjection + }; + + module.exports = ReactRootIndex; + +/***/ }, +/* 46 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInstanceMap + */ + + 'use strict'; + + /** + * `ReactInstanceMap` maintains a mapping from a public facing stateful + * instance (key) and the internal representation (value). This allows public + * methods to accept the user facing instance as an argument and map them back + * to internal methods. + */ + + // TODO: Replace this with ES6: var ReactInstanceMap = new Map(); + var ReactInstanceMap = { + + /** + * This API should be called `delete` but we'd have to make sure to always + * transform these to strings for IE support. When this transform is fully + * supported we can rename it. + */ + remove: function (key) { + key._reactInternalInstance = undefined; + }, + + get: function (key) { + return key._reactInternalInstance; + }, + + has: function (key) { + return key._reactInternalInstance !== undefined; + }, + + set: function (key, value) { + key._reactInternalInstance = value; + } + + }; + + module.exports = ReactInstanceMap; + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMarkupChecksum + */ + + 'use strict'; + + var adler32 = __webpack_require__(48); + + var TAG_END = /\/?>/; + + var ReactMarkupChecksum = { + CHECKSUM_ATTR_NAME: 'data-react-checksum', + + /** + * @param {string} markup Markup string + * @return {string} Markup string with checksum attribute attached + */ + addChecksumToMarkup: function (markup) { + var checksum = adler32(markup); + + // Add checksum (handle both parent tags and self-closing tags) + return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&'); + }, + + /** + * @param {string} markup to use + * @param {DOMElement} element root React element + * @returns {boolean} whether or not the markup is the same + */ + canReuseMarkup: function (markup, element) { + var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + existingChecksum = existingChecksum && parseInt(existingChecksum, 10); + var markupChecksum = adler32(markup); + return markupChecksum === existingChecksum; + } + }; + + module.exports = ReactMarkupChecksum; + +/***/ }, +/* 48 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule adler32 + */ + + 'use strict'; + + var MOD = 65521; + + // adler32 is not cryptographically strong, and is only used to sanity check that + // markup generated on the server matches the markup generated on the client. + // This implementation (a modified version of the SheetJS version) has been optimized + // for our use case, at the expense of conforming to the adler32 specification + // for non-ascii inputs. + function adler32(data) { + var a = 1; + var b = 0; + var i = 0; + var l = data.length; + var m = l & ~0x3; + while (i < m) { + for (; i < Math.min(i + 4096, m); i += 4) { + b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3)); + } + a %= MOD; + b %= MOD; + } + for (; i < l; i++) { + b += a += data.charCodeAt(i); + } + a %= MOD; + b %= MOD; + return a | b << 16; + } + + module.exports = adler32; + +/***/ }, +/* 49 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactReconciler + */ + + 'use strict'; + + var ReactRef = __webpack_require__(50); + + /** + * Helper to call ReactRef.attachRefs with this composite component, split out + * to avoid allocations in the transaction mount-ready queue. + */ + function attachRefs() { + ReactRef.attachRefs(this, this._currentElement); + } + + var ReactReconciler = { + + /** + * Initializes the component, renders markup, and registers event listeners. + * + * @param {ReactComponent} internalInstance + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {?string} Rendered markup to be inserted into the DOM. + * @final + * @internal + */ + mountComponent: function (internalInstance, rootID, transaction, context) { + var markup = internalInstance.mountComponent(rootID, transaction, context); + if (internalInstance._currentElement && internalInstance._currentElement.ref != null) { + transaction.getReactMountReady().enqueue(attachRefs, internalInstance); + } + return markup; + }, + + /** + * Releases any resources allocated by `mountComponent`. + * + * @final + * @internal + */ + unmountComponent: function (internalInstance) { + ReactRef.detachRefs(internalInstance, internalInstance._currentElement); + internalInstance.unmountComponent(); + }, + + /** + * Update a component using a new element. + * + * @param {ReactComponent} internalInstance + * @param {ReactElement} nextElement + * @param {ReactReconcileTransaction} transaction + * @param {object} context + * @internal + */ + receiveComponent: function (internalInstance, nextElement, transaction, context) { + var prevElement = internalInstance._currentElement; + + if (nextElement === prevElement && context === internalInstance._context) { + // Since elements are immutable after the owner is rendered, + // we can do a cheap identity compare here to determine if this is a + // superfluous reconcile. It's possible for state to be mutable but such + // change should trigger an update of the owner which would recreate + // the element. We explicitly check for the existence of an owner since + // it's possible for an element created outside a composite to be + // deeply mutated and reused. + + // TODO: Bailing out early is just a perf optimization right? + // TODO: Removing the return statement should affect correctness? + return; + } + + var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement); + + if (refsChanged) { + ReactRef.detachRefs(internalInstance, prevElement); + } + + internalInstance.receiveComponent(nextElement, transaction, context); + + if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) { + transaction.getReactMountReady().enqueue(attachRefs, internalInstance); + } + }, + + /** + * Flush any dirty changes in a component. + * + * @param {ReactComponent} internalInstance + * @param {ReactReconcileTransaction} transaction + * @internal + */ + performUpdateIfNecessary: function (internalInstance, transaction) { + internalInstance.performUpdateIfNecessary(transaction); + } + + }; + + module.exports = ReactReconciler; + +/***/ }, +/* 50 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactRef + */ + + 'use strict'; + + var ReactOwner = __webpack_require__(51); + + var ReactRef = {}; + + function attachRef(ref, component, owner) { + if (typeof ref === 'function') { + ref(component.getPublicInstance()); + } else { + // Legacy ref + ReactOwner.addComponentAsRefTo(component, ref, owner); + } + } + + function detachRef(ref, component, owner) { + if (typeof ref === 'function') { + ref(null); + } else { + // Legacy ref + ReactOwner.removeComponentAsRefFrom(component, ref, owner); + } + } + + ReactRef.attachRefs = function (instance, element) { + if (element === null || element === false) { + return; + } + var ref = element.ref; + if (ref != null) { + attachRef(ref, instance, element._owner); + } + }; + + ReactRef.shouldUpdateRefs = function (prevElement, nextElement) { + // If either the owner or a `ref` has changed, make sure the newest owner + // has stored a reference to `this`, and the previous owner (if different) + // has forgotten the reference to `this`. We use the element instead + // of the public this.props because the post processing cannot determine + // a ref. The ref conceptually lives on the element. + + // TODO: Should this even be possible? The owner cannot change because + // it's forbidden by shouldUpdateReactComponent. The ref can change + // if you swap the keys of but not the refs. Reconsider where this check + // is made. It probably belongs where the key checking and + // instantiateReactComponent is done. + + var prevEmpty = prevElement === null || prevElement === false; + var nextEmpty = nextElement === null || nextElement === false; + + return( + // This has a few false positives w/r/t empty components. + prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref + ); + }; + + ReactRef.detachRefs = function (instance, element) { + if (element === null || element === false) { + return; + } + var ref = element.ref; + if (ref != null) { + detachRef(ref, instance, element._owner); + } + }; + + module.exports = ReactRef; + +/***/ }, +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactOwner + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * ReactOwners are capable of storing references to owned components. + * + * All components are capable of //being// referenced by owner components, but + * only ReactOwner components are capable of //referencing// owned components. + * The named reference is known as a "ref". + * + * Refs are available when mounted and updated during reconciliation. + * + * var MyComponent = React.createClass({ + * render: function() { + * return ( + * <div onClick={this.handleClick}> + * <CustomComponent ref="custom" /> + * </div> + * ); + * }, + * handleClick: function() { + * this.refs.custom.handleClick(); + * }, + * componentDidMount: function() { + * this.refs.custom.initialize(); + * } + * }); + * + * Refs should rarely be used. When refs are used, they should only be done to + * control data that is not handled by React's data flow. + * + * @class ReactOwner + */ + var ReactOwner = { + + /** + * @param {?object} object + * @return {boolean} True if `object` is a valid owner. + * @final + */ + isValidOwner: function (object) { + return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function'); + }, + + /** + * Adds a component by ref to an owner component. + * + * @param {ReactComponent} component Component to reference. + * @param {string} ref Name by which to refer to the component. + * @param {ReactOwner} owner Component on which to record the ref. + * @final + * @internal + */ + addComponentAsRefTo: function (component, ref, owner) { + !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined; + owner.attachRef(ref, component); + }, + + /** + * Removes a component by ref from an owner component. + * + * @param {ReactComponent} component Component to dereference. + * @param {string} ref Name of the ref to remove. + * @param {ReactOwner} owner Component on which the ref is recorded. + * @final + * @internal + */ + removeComponentAsRefFrom: function (component, ref, owner) { + !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined; + // Check that `component` is still the current ref because we do not want to + // detach the ref if another component stole it. + if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) { + owner.detachRef(ref); + } + } + + }; + + module.exports = ReactOwner; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 52 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactUpdateQueue + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactElement = __webpack_require__(41); + var ReactInstanceMap = __webpack_require__(46); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + function enqueueUpdate(internalInstance) { + ReactUpdates.enqueueUpdate(internalInstance); + } + + function getInternalInstanceReadyForUpdate(publicInstance, callerName) { + var internalInstance = ReactInstanceMap.get(publicInstance); + if (!internalInstance) { + if (process.env.NODE_ENV !== 'production') { + // Only warn when we have a callerName. Otherwise we should be silent. + // We're probably calling from enqueueCallback. We don't want to warn + // there because we already warned for the corresponding lifecycle method. + process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined; + } + return null; + } + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined; + } + + return internalInstance; + } + + /** + * ReactUpdateQueue allows for state updates to be scheduled into a later + * reconciliation step. + */ + var ReactUpdateQueue = { + + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + if (process.env.NODE_ENV !== 'production') { + var owner = ReactCurrentOwner.current; + if (owner !== null) { + process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined; + owner._warnedAboutRefsInRender = true; + } + } + var internalInstance = ReactInstanceMap.get(publicInstance); + if (internalInstance) { + // During componentWillMount and render this will still be null but after + // that will always render to something. At least for now. So we can use + // this hack. + return !!internalInstance._renderedComponent; + } else { + return false; + } + }, + + /** + * Enqueue a callback that will be executed after all the pending updates + * have processed. + * + * @param {ReactClass} publicInstance The instance to use as `this` context. + * @param {?function} callback Called after state is updated. + * @internal + */ + enqueueCallback: function (publicInstance, callback) { + !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined; + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance); + + // Previously we would throw an error if we didn't have an internal + // instance. Since we want to make it a no-op instead, we mirror the same + // behavior we have in other enqueue* methods. + // We also need to ignore callbacks in componentWillMount. See + // enqueueUpdates. + if (!internalInstance) { + return null; + } + + if (internalInstance._pendingCallbacks) { + internalInstance._pendingCallbacks.push(callback); + } else { + internalInstance._pendingCallbacks = [callback]; + } + // TODO: The callback here is ignored when setState is called from + // componentWillMount. Either fix it or disallow doing so completely in + // favor of getInitialState. Alternatively, we can disallow + // componentWillMount during server-side rendering. + enqueueUpdate(internalInstance); + }, + + enqueueCallbackInternal: function (internalInstance, callback) { + !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined; + if (internalInstance._pendingCallbacks) { + internalInstance._pendingCallbacks.push(callback); + } else { + internalInstance._pendingCallbacks = [callback]; + } + enqueueUpdate(internalInstance); + }, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @internal + */ + enqueueForceUpdate: function (publicInstance) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate'); + + if (!internalInstance) { + return; + } + + internalInstance._pendingForceUpdate = true; + + enqueueUpdate(internalInstance); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState'); + + if (!internalInstance) { + return; + } + + internalInstance._pendingStateQueue = [completeState]; + internalInstance._pendingReplaceState = true; + + enqueueUpdate(internalInstance); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @internal + */ + enqueueSetState: function (publicInstance, partialState) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState'); + + if (!internalInstance) { + return; + } + + var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []); + queue.push(partialState); + + enqueueUpdate(internalInstance); + }, + + /** + * Sets a subset of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialProps Subset of the next props. + * @internal + */ + enqueueSetProps: function (publicInstance, partialProps) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps'); + if (!internalInstance) { + return; + } + ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps); + }, + + enqueueSetPropsInternal: function (internalInstance, partialProps) { + var topLevelWrapper = internalInstance._topLevelWrapper; + !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined; + + // Merge with the pending element if it exists, otherwise with existing + // element props. + var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement; + var element = wrapElement.props; + var props = assign({}, element.props, partialProps); + topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props)); + + enqueueUpdate(topLevelWrapper); + }, + + /** + * Replaces all of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} props New props. + * @internal + */ + enqueueReplaceProps: function (publicInstance, props) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps'); + if (!internalInstance) { + return; + } + ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props); + }, + + enqueueReplacePropsInternal: function (internalInstance, props) { + var topLevelWrapper = internalInstance._topLevelWrapper; + !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined; + + // Merge with the pending element if it exists, otherwise with existing + // element props. + var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement; + var element = wrapElement.props; + topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props)); + + enqueueUpdate(topLevelWrapper); + }, + + enqueueElementInternal: function (internalInstance, newElement) { + internalInstance._pendingElement = newElement; + enqueueUpdate(internalInstance); + } + + }; + + module.exports = ReactUpdateQueue; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactUpdates + */ + + 'use strict'; + + var CallbackQueue = __webpack_require__(54); + var PooledClass = __webpack_require__(55); + var ReactPerf = __webpack_require__(17); + var ReactReconciler = __webpack_require__(49); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + var dirtyComponents = []; + var asapCallbackQueue = CallbackQueue.getPooled(); + var asapEnqueued = false; + + var batchingStrategy = null; + + function ensureInjected() { + !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined; + } + + var NESTED_UPDATES = { + initialize: function () { + this.dirtyComponentsLength = dirtyComponents.length; + }, + close: function () { + if (this.dirtyComponentsLength !== dirtyComponents.length) { + // Additional updates were enqueued by componentDidUpdate handlers or + // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run + // these new updates so that if A's componentDidUpdate calls setState on + // B, B will update before the callback A's updater provided when calling + // setState. + dirtyComponents.splice(0, this.dirtyComponentsLength); + flushBatchedUpdates(); + } else { + dirtyComponents.length = 0; + } + } + }; + + var UPDATE_QUEUEING = { + initialize: function () { + this.callbackQueue.reset(); + }, + close: function () { + this.callbackQueue.notifyAll(); + } + }; + + var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING]; + + function ReactUpdatesFlushTransaction() { + this.reinitializeTransaction(); + this.dirtyComponentsLength = null; + this.callbackQueue = CallbackQueue.getPooled(); + this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false); + } + + assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, { + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + }, + + destructor: function () { + this.dirtyComponentsLength = null; + CallbackQueue.release(this.callbackQueue); + this.callbackQueue = null; + ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction); + this.reconcileTransaction = null; + }, + + perform: function (method, scope, a) { + // Essentially calls `this.reconcileTransaction.perform(method, scope, a)` + // with this transaction's wrappers around it. + return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a); + } + }); + + PooledClass.addPoolingTo(ReactUpdatesFlushTransaction); + + function batchedUpdates(callback, a, b, c, d, e) { + ensureInjected(); + batchingStrategy.batchedUpdates(callback, a, b, c, d, e); + } + + /** + * Array comparator for ReactComponents by mount ordering. + * + * @param {ReactComponent} c1 first component you're comparing + * @param {ReactComponent} c2 second component you're comparing + * @return {number} Return value usable by Array.prototype.sort(). + */ + function mountOrderComparator(c1, c2) { + return c1._mountOrder - c2._mountOrder; + } + + function runBatchedUpdates(transaction) { + var len = transaction.dirtyComponentsLength; + !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined; + + // Since reconciling a component higher in the owner hierarchy usually (not + // always -- see shouldComponentUpdate()) will reconcile children, reconcile + // them before their children by sorting the array. + dirtyComponents.sort(mountOrderComparator); + + for (var i = 0; i < len; i++) { + // If a component is unmounted before pending changes apply, it will still + // be here, but we assume that it has cleared its _pendingCallbacks and + // that performUpdateIfNecessary is a noop. + var component = dirtyComponents[i]; + + // If performUpdateIfNecessary happens to enqueue any new updates, we + // shouldn't execute the callbacks until the next render happens, so + // stash the callbacks first + var callbacks = component._pendingCallbacks; + component._pendingCallbacks = null; + + ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction); + + if (callbacks) { + for (var j = 0; j < callbacks.length; j++) { + transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance()); + } + } + } + } + + var flushBatchedUpdates = function () { + // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents + // array and perform any updates enqueued by mount-ready handlers (i.e., + // componentDidUpdate) but we need to check here too in order to catch + // updates enqueued by setState callbacks and asap calls. + while (dirtyComponents.length || asapEnqueued) { + if (dirtyComponents.length) { + var transaction = ReactUpdatesFlushTransaction.getPooled(); + transaction.perform(runBatchedUpdates, null, transaction); + ReactUpdatesFlushTransaction.release(transaction); + } + + if (asapEnqueued) { + asapEnqueued = false; + var queue = asapCallbackQueue; + asapCallbackQueue = CallbackQueue.getPooled(); + queue.notifyAll(); + CallbackQueue.release(queue); + } + } + }; + flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates); + + /** + * Mark a component as needing a rerender, adding an optional callback to a + * list of functions which will be executed once the rerender occurs. + */ + function enqueueUpdate(component) { + ensureInjected(); + + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. (This is called by each top-level update + // function, like setProps, setState, forceUpdate, etc.; creation and + // destruction of top-level components is guarded in ReactMount.) + + if (!batchingStrategy.isBatchingUpdates) { + batchingStrategy.batchedUpdates(enqueueUpdate, component); + return; + } + + dirtyComponents.push(component); + } + + /** + * Enqueue a callback to be run at the end of the current batching cycle. Throws + * if no updates are currently being performed. + */ + function asap(callback, context) { + !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined; + asapCallbackQueue.enqueue(callback, context); + asapEnqueued = true; + } + + var ReactUpdatesInjection = { + injectReconcileTransaction: function (ReconcileTransaction) { + !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined; + ReactUpdates.ReactReconcileTransaction = ReconcileTransaction; + }, + + injectBatchingStrategy: function (_batchingStrategy) { + !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined; + !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined; + !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined; + batchingStrategy = _batchingStrategy; + } + }; + + var ReactUpdates = { + /** + * React references `ReactReconcileTransaction` using this property in order + * to allow dependency injection. + * + * @internal + */ + ReactReconcileTransaction: null, + + batchedUpdates: batchedUpdates, + enqueueUpdate: enqueueUpdate, + flushBatchedUpdates: flushBatchedUpdates, + injection: ReactUpdatesInjection, + asap: asap + }; + + module.exports = ReactUpdates; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule CallbackQueue + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + /** + * A specialized pseudo-event module to help keep track of components waiting to + * be notified when their DOM representations are available for use. + * + * This implements `PooledClass`, so you should never need to instantiate this. + * Instead, use `CallbackQueue.getPooled()`. + * + * @class ReactMountReady + * @implements PooledClass + * @internal + */ + function CallbackQueue() { + this._callbacks = null; + this._contexts = null; + } + + assign(CallbackQueue.prototype, { + + /** + * Enqueues a callback to be invoked when `notifyAll` is invoked. + * + * @param {function} callback Invoked when `notifyAll` is invoked. + * @param {?object} context Context to call `callback` with. + * @internal + */ + enqueue: function (callback, context) { + this._callbacks = this._callbacks || []; + this._contexts = this._contexts || []; + this._callbacks.push(callback); + this._contexts.push(context); + }, + + /** + * Invokes all enqueued callbacks and clears the queue. This is invoked after + * the DOM representation of a component has been created or updated. + * + * @internal + */ + notifyAll: function () { + var callbacks = this._callbacks; + var contexts = this._contexts; + if (callbacks) { + !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined; + this._callbacks = null; + this._contexts = null; + for (var i = 0; i < callbacks.length; i++) { + callbacks[i].call(contexts[i]); + } + callbacks.length = 0; + contexts.length = 0; + } + }, + + /** + * Resets the internal queue. + * + * @internal + */ + reset: function () { + this._callbacks = null; + this._contexts = null; + }, + + /** + * `PooledClass` looks for this. + */ + destructor: function () { + this.reset(); + } + + }); + + PooledClass.addPoolingTo(CallbackQueue); + + module.exports = CallbackQueue; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule PooledClass + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Static poolers. Several custom versions for each potential number of + * arguments. A completely generic pooler is easy to implement, but would + * require accessing the `arguments` object. In each of these, `this` refers to + * the Class itself, not an instance. If any others are needed, simply add them + * here, or in their own files. + */ + var oneArgumentPooler = function (copyFieldsFrom) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, copyFieldsFrom); + return instance; + } else { + return new Klass(copyFieldsFrom); + } + }; + + var twoArgumentPooler = function (a1, a2) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2); + return instance; + } else { + return new Klass(a1, a2); + } + }; + + var threeArgumentPooler = function (a1, a2, a3) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2, a3); + return instance; + } else { + return new Klass(a1, a2, a3); + } + }; + + var fourArgumentPooler = function (a1, a2, a3, a4) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2, a3, a4); + return instance; + } else { + return new Klass(a1, a2, a3, a4); + } + }; + + var fiveArgumentPooler = function (a1, a2, a3, a4, a5) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2, a3, a4, a5); + return instance; + } else { + return new Klass(a1, a2, a3, a4, a5); + } + }; + + var standardReleaser = function (instance) { + var Klass = this; + !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined; + instance.destructor(); + if (Klass.instancePool.length < Klass.poolSize) { + Klass.instancePool.push(instance); + } + }; + + var DEFAULT_POOL_SIZE = 10; + var DEFAULT_POOLER = oneArgumentPooler; + + /** + * Augments `CopyConstructor` to be a poolable class, augmenting only the class + * itself (statically) not adding any prototypical fields. Any CopyConstructor + * you give this may have a `poolSize` property, and will look for a + * prototypical `destructor` on instances (optional). + * + * @param {Function} CopyConstructor Constructor that can be used to reset. + * @param {Function} pooler Customizable pooler. + */ + var addPoolingTo = function (CopyConstructor, pooler) { + var NewKlass = CopyConstructor; + NewKlass.instancePool = []; + NewKlass.getPooled = pooler || DEFAULT_POOLER; + if (!NewKlass.poolSize) { + NewKlass.poolSize = DEFAULT_POOL_SIZE; + } + NewKlass.release = standardReleaser; + return NewKlass; + }; + + var PooledClass = { + addPoolingTo: addPoolingTo, + oneArgumentPooler: oneArgumentPooler, + twoArgumentPooler: twoArgumentPooler, + threeArgumentPooler: threeArgumentPooler, + fourArgumentPooler: fourArgumentPooler, + fiveArgumentPooler: fiveArgumentPooler + }; + + module.exports = PooledClass; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Transaction + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * `Transaction` creates a black box that is able to wrap any method such that + * certain invariants are maintained before and after the method is invoked + * (Even if an exception is thrown while invoking the wrapped method). Whoever + * instantiates a transaction can provide enforcers of the invariants at + * creation time. The `Transaction` class itself will supply one additional + * automatic invariant for you - the invariant that any transaction instance + * should not be run while it is already being run. You would typically create a + * single instance of a `Transaction` for reuse multiple times, that potentially + * is used to wrap several different methods. Wrappers are extremely simple - + * they only require implementing two methods. + * + * <pre> + * wrappers (injected at creation time) + * + + + * | | + * +-----------------|--------|--------------+ + * | v | | + * | +---------------+ | | + * | +--| wrapper1 |---|----+ | + * | | +---------------+ v | | + * | | +-------------+ | | + * | | +----| wrapper2 |--------+ | + * | | | +-------------+ | | | + * | | | | | | + * | v v v v | wrapper + * | +---+ +---+ +---------+ +---+ +---+ | invariants + * perform(anyMethod) | | | | | | | | | | | | maintained + * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|--------> + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * | +---+ +---+ +---------+ +---+ +---+ | + * | initialize close | + * +-----------------------------------------+ + * </pre> + * + * Use cases: + * - Preserving the input selection ranges before/after reconciliation. + * Restoring selection even in the event of an unexpected error. + * - Deactivating events while rearranging the DOM, preventing blurs/focuses, + * while guaranteeing that afterwards, the event system is reactivated. + * - Flushing a queue of collected DOM mutations to the main UI thread after a + * reconciliation takes place in a worker thread. + * - Invoking any collected `componentDidUpdate` callbacks after rendering new + * content. + * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue + * to preserve the `scrollTop` (an automatic scroll aware DOM). + * - (Future use case): Layout calculations before and after DOM updates. + * + * Transactional plugin API: + * - A module that has an `initialize` method that returns any precomputation. + * - and a `close` method that accepts the precomputation. `close` is invoked + * when the wrapped process is completed, or has failed. + * + * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules + * that implement `initialize` and `close`. + * @return {Transaction} Single transaction for reuse in thread. + * + * @class Transaction + */ + var Mixin = { + /** + * Sets up this instance so that it is prepared for collecting metrics. Does + * so such that this setup method may be used on an instance that is already + * initialized, in a way that does not consume additional memory upon reuse. + * That can be useful if you decide to make your subclass of this mixin a + * "PooledClass". + */ + reinitializeTransaction: function () { + this.transactionWrappers = this.getTransactionWrappers(); + if (this.wrapperInitData) { + this.wrapperInitData.length = 0; + } else { + this.wrapperInitData = []; + } + this._isInTransaction = false; + }, + + _isInTransaction: false, + + /** + * @abstract + * @return {Array<TransactionWrapper>} Array of transaction wrappers. + */ + getTransactionWrappers: null, + + isInTransaction: function () { + return !!this._isInTransaction; + }, + + /** + * Executes the function within a safety window. Use this for the top level + * methods that result in large amounts of computation/mutations that would + * need to be safety checked. The optional arguments helps prevent the need + * to bind in many cases. + * + * @param {function} method Member of scope to call. + * @param {Object} scope Scope to invoke from. + * @param {Object?=} a Argument to pass to the method. + * @param {Object?=} b Argument to pass to the method. + * @param {Object?=} c Argument to pass to the method. + * @param {Object?=} d Argument to pass to the method. + * @param {Object?=} e Argument to pass to the method. + * @param {Object?=} f Argument to pass to the method. + * + * @return {*} Return value from `method`. + */ + perform: function (method, scope, a, b, c, d, e, f) { + !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined; + var errorThrown; + var ret; + try { + this._isInTransaction = true; + // Catching errors makes debugging more difficult, so we start with + // errorThrown set to true before setting it to false after calling + // close -- if it's still set to true in the finally block, it means + // one of these calls threw. + errorThrown = true; + this.initializeAll(0); + ret = method.call(scope, a, b, c, d, e, f); + errorThrown = false; + } finally { + try { + if (errorThrown) { + // If `method` throws, prefer to show that stack trace over any thrown + // by invoking `closeAll`. + try { + this.closeAll(0); + } catch (err) {} + } else { + // Since `method` didn't throw, we don't want to silence the exception + // here. + this.closeAll(0); + } + } finally { + this._isInTransaction = false; + } + } + return ret; + }, + + initializeAll: function (startIndex) { + var transactionWrappers = this.transactionWrappers; + for (var i = startIndex; i < transactionWrappers.length; i++) { + var wrapper = transactionWrappers[i]; + try { + // Catching errors makes debugging more difficult, so we start with the + // OBSERVED_ERROR state before overwriting it with the real return value + // of initialize -- if it's still set to OBSERVED_ERROR in the finally + // block, it means wrapper.initialize threw. + this.wrapperInitData[i] = Transaction.OBSERVED_ERROR; + this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null; + } finally { + if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) { + // The initializer for wrapper i threw an error; initialize the + // remaining wrappers but silence any exceptions from them to ensure + // that the first error is the one to bubble up. + try { + this.initializeAll(i + 1); + } catch (err) {} + } + } + } + }, + + /** + * Invokes each of `this.transactionWrappers.close[i]` functions, passing into + * them the respective return values of `this.transactionWrappers.init[i]` + * (`close`rs that correspond to initializers that failed will not be + * invoked). + */ + closeAll: function (startIndex) { + !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined; + var transactionWrappers = this.transactionWrappers; + for (var i = startIndex; i < transactionWrappers.length; i++) { + var wrapper = transactionWrappers[i]; + var initData = this.wrapperInitData[i]; + var errorThrown; + try { + // Catching errors makes debugging more difficult, so we start with + // errorThrown set to true before setting it to false after calling + // close -- if it's still set to true in the finally block, it means + // wrapper.close threw. + errorThrown = true; + if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) { + wrapper.close.call(this, initData); + } + errorThrown = false; + } finally { + if (errorThrown) { + // The closer for wrapper i threw an error; close the remaining + // wrappers but silence any exceptions from them to ensure that the + // first error is the one to bubble up. + try { + this.closeAll(i + 1); + } catch (e) {} + } + } + } + this.wrapperInitData.length = 0; + } + }; + + var Transaction = { + + Mixin: Mixin, + + /** + * Token to look for to determine if an error occurred. + */ + OBSERVED_ERROR: {} + + }; + + module.exports = Transaction; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 57 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule emptyObject + */ + + 'use strict'; + + var emptyObject = {}; + + if (process.env.NODE_ENV !== 'production') { + Object.freeze(emptyObject); + } + + module.exports = emptyObject; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 58 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule containsNode + * @typechecks + */ + + 'use strict'; + + var isTextNode = __webpack_require__(59); + + /*eslint-disable no-bitwise */ + + /** + * Checks if a given DOM node contains or is another DOM node. + * + * @param {?DOMNode} outerNode Outer DOM node. + * @param {?DOMNode} innerNode Inner DOM node. + * @return {boolean} True if `outerNode` contains or is `innerNode`. + */ + function containsNode(_x, _x2) { + var _again = true; + + _function: while (_again) { + var outerNode = _x, + innerNode = _x2; + _again = false; + + if (!outerNode || !innerNode) { + return false; + } else if (outerNode === innerNode) { + return true; + } else if (isTextNode(outerNode)) { + return false; + } else if (isTextNode(innerNode)) { + _x = outerNode; + _x2 = innerNode.parentNode; + _again = true; + continue _function; + } else if (outerNode.contains) { + return outerNode.contains(innerNode); + } else if (outerNode.compareDocumentPosition) { + return !!(outerNode.compareDocumentPosition(innerNode) & 16); + } else { + return false; + } + } + } + + module.exports = containsNode; + +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isTextNode + * @typechecks + */ + + 'use strict'; + + var isNode = __webpack_require__(60); + + /** + * @param {*} object The object to check. + * @return {boolean} Whether or not the object is a DOM text node. + */ + function isTextNode(object) { + return isNode(object) && object.nodeType == 3; + } + + module.exports = isTextNode; + +/***/ }, +/* 60 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isNode + * @typechecks + */ + + /** + * @param {*} object The object to check. + * @return {boolean} Whether or not the object is a DOM node. + */ + 'use strict'; + + function isNode(object) { + return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string')); + } + + module.exports = isNode; + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule instantiateReactComponent + * @typechecks static-only + */ + + 'use strict'; + + var ReactCompositeComponent = __webpack_require__(62); + var ReactEmptyComponent = __webpack_require__(67); + var ReactNativeComponent = __webpack_require__(68); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + // To avoid a cyclic dependency, we create the final class in this module + var ReactCompositeComponentWrapper = function () {}; + assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, { + _instantiateReactComponent: instantiateReactComponent + }); + + function getDeclarationErrorAddendum(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + /** + * Check if the type reference is a known internal type. I.e. not a user + * provided composite type. + * + * @param {function} type + * @return {boolean} Returns true if this is a valid internal type. + */ + function isInternalComponentType(type) { + return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function'; + } + + /** + * Given a ReactNode, create an instance that will actually be mounted. + * + * @param {ReactNode} node + * @return {object} A new instance of the element's constructor. + * @protected + */ + function instantiateReactComponent(node) { + var instance; + + if (node === null || node === false) { + instance = new ReactEmptyComponent(instantiateReactComponent); + } else if (typeof node === 'object') { + var element = node; + !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined; + + // Special case string values + if (typeof element.type === 'string') { + instance = ReactNativeComponent.createInternalComponent(element); + } else if (isInternalComponentType(element.type)) { + // This is temporarily available for custom components that are not string + // representations. I.e. ART. Once those are updated to use the string + // representation, we can drop this code path. + instance = new element.type(element); + } else { + instance = new ReactCompositeComponentWrapper(); + } + } else if (typeof node === 'string' || typeof node === 'number') { + instance = ReactNativeComponent.createInstanceForText(node); + } else { + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined; + } + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined; + } + + // Sets up the instance. This can probably just move into the constructor now. + instance.construct(node); + + // These two fields are used by the DOM and ART diffing algorithms + // respectively. Instead of using expandos on components, we should be + // storing the state needed by the diffing algorithms elsewhere. + instance._mountIndex = 0; + instance._mountImage = null; + + if (process.env.NODE_ENV !== 'production') { + instance._isOwnerNecessary = false; + instance._warnedAboutRefsInRender = false; + } + + // Internal instances should fully constructed at this point, so they should + // not get any new fields added to them at this point. + if (process.env.NODE_ENV !== 'production') { + if (Object.preventExtensions) { + Object.preventExtensions(instance); + } + } + + return instance; + } + + module.exports = instantiateReactComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 62 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactCompositeComponent + */ + + 'use strict'; + + var ReactComponentEnvironment = __webpack_require__(63); + var ReactCurrentOwner = __webpack_require__(4); + var ReactElement = __webpack_require__(41); + var ReactInstanceMap = __webpack_require__(46); + var ReactPerf = __webpack_require__(17); + var ReactPropTypeLocations = __webpack_require__(64); + var ReactPropTypeLocationNames = __webpack_require__(65); + var ReactReconciler = __webpack_require__(49); + var ReactUpdateQueue = __webpack_require__(52); + + var assign = __webpack_require__(38); + var emptyObject = __webpack_require__(57); + var invariant = __webpack_require__(12); + var shouldUpdateReactComponent = __webpack_require__(66); + var warning = __webpack_require__(24); + + function getDeclarationErrorAddendum(component) { + var owner = component._currentElement._owner || null; + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + function StatelessComponent(Component) {} + StatelessComponent.prototype.render = function () { + var Component = ReactInstanceMap.get(this)._currentElement.type; + return Component(this.props, this.context, this.updater); + }; + + /** + * ------------------ The Life-Cycle of a Composite Component ------------------ + * + * - constructor: Initialization of state. The instance is now retained. + * - componentWillMount + * - render + * - [children's constructors] + * - [children's componentWillMount and render] + * - [children's componentDidMount] + * - componentDidMount + * + * Update Phases: + * - componentWillReceiveProps (only called if parent updated) + * - shouldComponentUpdate + * - componentWillUpdate + * - render + * - [children's constructors or receive props phases] + * - componentDidUpdate + * + * - componentWillUnmount + * - [children's componentWillUnmount] + * - [children destroyed] + * - (destroyed): The instance is now blank, released by React and ready for GC. + * + * ----------------------------------------------------------------------------- + */ + + /** + * An incrementing ID assigned to each component when it is mounted. This is + * used to enforce the order in which `ReactUpdates` updates dirty components. + * + * @private + */ + var nextMountID = 1; + + /** + * @lends {ReactCompositeComponent.prototype} + */ + var ReactCompositeComponentMixin = { + + /** + * Base constructor for all composite component. + * + * @param {ReactElement} element + * @final + * @internal + */ + construct: function (element) { + this._currentElement = element; + this._rootNodeID = null; + this._instance = null; + + // See ReactUpdateQueue + this._pendingElement = null; + this._pendingStateQueue = null; + this._pendingReplaceState = false; + this._pendingForceUpdate = false; + + this._renderedComponent = null; + + this._context = null; + this._mountOrder = 0; + this._topLevelWrapper = null; + + // See ReactUpdates and ReactUpdateQueue. + this._pendingCallbacks = null; + }, + + /** + * Initializes the component, renders markup, and registers event listeners. + * + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {?string} Rendered markup to be inserted into the DOM. + * @final + * @internal + */ + mountComponent: function (rootID, transaction, context) { + this._context = context; + this._mountOrder = nextMountID++; + this._rootNodeID = rootID; + + var publicProps = this._processProps(this._currentElement.props); + var publicContext = this._processContext(context); + + var Component = this._currentElement.type; + + // Initialize the public class + var inst; + var renderedElement; + + // This is a way to detect if Component is a stateless arrow function + // component, which is not newable. It might not be 100% reliable but is + // something we can do until we start detecting that Component extends + // React.Component. We already assume that typeof Component === 'function'. + var canInstantiate = ('prototype' in Component); + + if (canInstantiate) { + if (process.env.NODE_ENV !== 'production') { + ReactCurrentOwner.current = this; + try { + inst = new Component(publicProps, publicContext, ReactUpdateQueue); + } finally { + ReactCurrentOwner.current = null; + } + } else { + inst = new Component(publicProps, publicContext, ReactUpdateQueue); + } + } + + if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) { + renderedElement = inst; + inst = new StatelessComponent(Component); + } + + if (process.env.NODE_ENV !== 'production') { + // This will throw later in _renderValidatedComponent, but add an early + // warning now to help debugging + if (inst.render == null) { + process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\'t a React component.', Component.displayName || Component.name || 'Component') : undefined; + } else { + // We support ES6 inheriting from React.Component, the module pattern, + // and stateless components, but not ES6 classes that don't extend + process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined; + } + } + + // These should be set up in the constructor, but as a convenience for + // simpler class abstractions, we set them up after the fact. + inst.props = publicProps; + inst.context = publicContext; + inst.refs = emptyObject; + inst.updater = ReactUpdateQueue; + + this._instance = inst; + + // Store a reference from the instance back to the internal representation + ReactInstanceMap.set(inst, this); + + if (process.env.NODE_ENV !== 'production') { + // Since plain JS classes are defined without any special initialization + // logic, we can not catch common errors early. Therefore, we have to + // catch them here, at initialization time, instead. + process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined; + } + + var initialState = inst.state; + if (initialState === undefined) { + inst.state = initialState = null; + } + !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined; + + this._pendingStateQueue = null; + this._pendingReplaceState = false; + this._pendingForceUpdate = false; + + if (inst.componentWillMount) { + inst.componentWillMount(); + // When mounting, calls to `setState` by `componentWillMount` will set + // `this._pendingStateQueue` without triggering a re-render. + if (this._pendingStateQueue) { + inst.state = this._processPendingState(inst.props, inst.context); + } + } + + // If not a stateless component, we now render + if (renderedElement === undefined) { + renderedElement = this._renderValidatedComponent(); + } + + this._renderedComponent = this._instantiateReactComponent(renderedElement); + + var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context)); + if (inst.componentDidMount) { + transaction.getReactMountReady().enqueue(inst.componentDidMount, inst); + } + + return markup; + }, + + /** + * Releases any resources allocated by `mountComponent`. + * + * @final + * @internal + */ + unmountComponent: function () { + var inst = this._instance; + + if (inst.componentWillUnmount) { + inst.componentWillUnmount(); + } + + ReactReconciler.unmountComponent(this._renderedComponent); + this._renderedComponent = null; + this._instance = null; + + // Reset pending fields + // Even if this component is scheduled for another update in ReactUpdates, + // it would still be ignored because these fields are reset. + this._pendingStateQueue = null; + this._pendingReplaceState = false; + this._pendingForceUpdate = false; + this._pendingCallbacks = null; + this._pendingElement = null; + + // These fields do not really need to be reset since this object is no + // longer accessible. + this._context = null; + this._rootNodeID = null; + this._topLevelWrapper = null; + + // Delete the reference from the instance to this internal representation + // which allow the internals to be properly cleaned up even if the user + // leaks a reference to the public instance. + ReactInstanceMap.remove(inst); + + // Some existing components rely on inst.props even after they've been + // destroyed (in event handlers). + // TODO: inst.props = null; + // TODO: inst.state = null; + // TODO: inst.context = null; + }, + + /** + * Filters the context object to only contain keys specified in + * `contextTypes` + * + * @param {object} context + * @return {?object} + * @private + */ + _maskContext: function (context) { + var maskedContext = null; + var Component = this._currentElement.type; + var contextTypes = Component.contextTypes; + if (!contextTypes) { + return emptyObject; + } + maskedContext = {}; + for (var contextName in contextTypes) { + maskedContext[contextName] = context[contextName]; + } + return maskedContext; + }, + + /** + * Filters the context object to only contain keys specified in + * `contextTypes`, and asserts that they are valid. + * + * @param {object} context + * @return {?object} + * @private + */ + _processContext: function (context) { + var maskedContext = this._maskContext(context); + if (process.env.NODE_ENV !== 'production') { + var Component = this._currentElement.type; + if (Component.contextTypes) { + this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context); + } + } + return maskedContext; + }, + + /** + * @param {object} currentContext + * @return {object} + * @private + */ + _processChildContext: function (currentContext) { + var Component = this._currentElement.type; + var inst = this._instance; + var childContext = inst.getChildContext && inst.getChildContext(); + if (childContext) { + !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined; + if (process.env.NODE_ENV !== 'production') { + this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext); + } + for (var name in childContext) { + !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined; + } + return assign({}, currentContext, childContext); + } + return currentContext; + }, + + /** + * Processes props by setting default values for unspecified props and + * asserting that the props are valid. Does not mutate its argument; returns + * a new props object with defaults merged in. + * + * @param {object} newProps + * @return {object} + * @private + */ + _processProps: function (newProps) { + if (process.env.NODE_ENV !== 'production') { + var Component = this._currentElement.type; + if (Component.propTypes) { + this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop); + } + } + return newProps; + }, + + /** + * Assert that the props are valid + * + * @param {object} propTypes Map of prop name to a ReactPropType + * @param {object} props + * @param {string} location e.g. "prop", "context", "child context" + * @private + */ + _checkPropTypes: function (propTypes, props, location) { + // TODO: Stop validating prop types here and only use the element + // validation. + var componentName = this.getName(); + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error; + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined; + error = propTypes[propName](props, propName, componentName, location); + } catch (ex) { + error = ex; + } + if (error instanceof Error) { + // We may want to extend this logic for similar errors in + // top-level render calls, so I'm abstracting it away into + // a function to minimize refactoring in the future + var addendum = getDeclarationErrorAddendum(this); + + if (location === ReactPropTypeLocations.prop) { + // Preface gives us something to blacklist in warning module + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined; + } + } + } + } + }, + + receiveComponent: function (nextElement, transaction, nextContext) { + var prevElement = this._currentElement; + var prevContext = this._context; + + this._pendingElement = null; + + this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext); + }, + + /** + * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate` + * is set, update the component. + * + * @param {ReactReconcileTransaction} transaction + * @internal + */ + performUpdateIfNecessary: function (transaction) { + if (this._pendingElement != null) { + ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context); + } + + if (this._pendingStateQueue !== null || this._pendingForceUpdate) { + this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context); + } + }, + + /** + * Perform an update to a mounted component. The componentWillReceiveProps and + * shouldComponentUpdate methods are called, then (assuming the update isn't + * skipped) the remaining update lifecycle methods are called and the DOM + * representation is updated. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @param {ReactElement} prevParentElement + * @param {ReactElement} nextParentElement + * @internal + * @overridable + */ + updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) { + var inst = this._instance; + + var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext); + var nextProps; + + // Distinguish between a props update versus a simple state update + if (prevParentElement === nextParentElement) { + // Skip checking prop types again -- we don't read inst.props to avoid + // warning for DOM component props in this upgrade + nextProps = nextParentElement.props; + } else { + nextProps = this._processProps(nextParentElement.props); + // An update here will schedule an update but immediately set + // _pendingStateQueue which will ensure that any state updates gets + // immediately reconciled instead of waiting for the next batch. + + if (inst.componentWillReceiveProps) { + inst.componentWillReceiveProps(nextProps, nextContext); + } + } + + var nextState = this._processPendingState(nextProps, nextContext); + + var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined; + } + + if (shouldUpdate) { + this._pendingForceUpdate = false; + // Will set `this.props`, `this.state` and `this.context`. + this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext); + } else { + // If it's determined that a component should not update, we still want + // to set props and state but we shortcut the rest of the update. + this._currentElement = nextParentElement; + this._context = nextUnmaskedContext; + inst.props = nextProps; + inst.state = nextState; + inst.context = nextContext; + } + }, + + _processPendingState: function (props, context) { + var inst = this._instance; + var queue = this._pendingStateQueue; + var replace = this._pendingReplaceState; + this._pendingReplaceState = false; + this._pendingStateQueue = null; + + if (!queue) { + return inst.state; + } + + if (replace && queue.length === 1) { + return queue[0]; + } + + var nextState = assign({}, replace ? queue[0] : inst.state); + for (var i = replace ? 1 : 0; i < queue.length; i++) { + var partial = queue[i]; + assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial); + } + + return nextState; + }, + + /** + * Merges new props and state, notifies delegate methods of update and + * performs update. + * + * @param {ReactElement} nextElement Next element + * @param {object} nextProps Next public object to set as properties. + * @param {?object} nextState Next object to set as state. + * @param {?object} nextContext Next public object to set as context. + * @param {ReactReconcileTransaction} transaction + * @param {?object} unmaskedContext + * @private + */ + _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) { + var inst = this._instance; + + var hasComponentDidUpdate = Boolean(inst.componentDidUpdate); + var prevProps; + var prevState; + var prevContext; + if (hasComponentDidUpdate) { + prevProps = inst.props; + prevState = inst.state; + prevContext = inst.context; + } + + if (inst.componentWillUpdate) { + inst.componentWillUpdate(nextProps, nextState, nextContext); + } + + this._currentElement = nextElement; + this._context = unmaskedContext; + inst.props = nextProps; + inst.state = nextState; + inst.context = nextContext; + + this._updateRenderedComponent(transaction, unmaskedContext); + + if (hasComponentDidUpdate) { + transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst); + } + }, + + /** + * Call the component's `render` method and update the DOM accordingly. + * + * @param {ReactReconcileTransaction} transaction + * @internal + */ + _updateRenderedComponent: function (transaction, context) { + var prevComponentInstance = this._renderedComponent; + var prevRenderedElement = prevComponentInstance._currentElement; + var nextRenderedElement = this._renderValidatedComponent(); + if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) { + ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context)); + } else { + // These two IDs are actually the same! But nothing should rely on that. + var thisID = this._rootNodeID; + var prevComponentID = prevComponentInstance._rootNodeID; + ReactReconciler.unmountComponent(prevComponentInstance); + + this._renderedComponent = this._instantiateReactComponent(nextRenderedElement); + var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context)); + this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup); + } + }, + + /** + * @protected + */ + _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) { + ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup); + }, + + /** + * @protected + */ + _renderValidatedComponentWithoutOwnerOrContext: function () { + var inst = this._instance; + var renderedComponent = inst.render(); + if (process.env.NODE_ENV !== 'production') { + // We allow auto-mocks to proceed as if they're returning null. + if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + renderedComponent = null; + } + } + + return renderedComponent; + }, + + /** + * @private + */ + _renderValidatedComponent: function () { + var renderedComponent; + ReactCurrentOwner.current = this; + try { + renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext(); + } finally { + ReactCurrentOwner.current = null; + } + !( + // TODO: An `isValidNode` function would probably be more appropriate + renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined; + return renderedComponent; + }, + + /** + * Lazily allocates the refs object and stores `component` as `ref`. + * + * @param {string} ref Reference name. + * @param {component} component Component to store as `ref`. + * @final + * @private + */ + attachRef: function (ref, component) { + var inst = this.getPublicInstance(); + !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined; + var publicComponentInstance = component.getPublicInstance(); + if (process.env.NODE_ENV !== 'production') { + var componentName = component && component.getName ? component.getName() : 'a component'; + process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined; + } + var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs; + refs[ref] = publicComponentInstance; + }, + + /** + * Detaches a reference name. + * + * @param {string} ref Name to dereference. + * @final + * @private + */ + detachRef: function (ref) { + var refs = this.getPublicInstance().refs; + delete refs[ref]; + }, + + /** + * Get a text description of the component that can be used to identify it + * in error messages. + * @return {string} The name or null. + * @internal + */ + getName: function () { + var type = this._currentElement.type; + var constructor = this._instance && this._instance.constructor; + return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null; + }, + + /** + * Get the publicly accessible representation of this component - i.e. what + * is exposed by refs and returned by render. Can be null for stateless + * components. + * + * @return {ReactComponent} the public component instance. + * @internal + */ + getPublicInstance: function () { + var inst = this._instance; + if (inst instanceof StatelessComponent) { + return null; + } + return inst; + }, + + // Stub + _instantiateReactComponent: null + + }; + + ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', { + mountComponent: 'mountComponent', + updateComponent: 'updateComponent', + _renderValidatedComponent: '_renderValidatedComponent' + }); + + var ReactCompositeComponent = { + + Mixin: ReactCompositeComponentMixin + + }; + + module.exports = ReactCompositeComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 63 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponentEnvironment + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + var injected = false; + + var ReactComponentEnvironment = { + + /** + * Optionally injectable environment dependent cleanup hook. (server vs. + * browser etc). Example: A browser system caches DOM nodes based on component + * ID and must remove that cache entry when this instance is unmounted. + */ + unmountIDFromEnvironment: null, + + /** + * Optionally injectable hook for swapping out mount images in the middle of + * the tree. + */ + replaceNodeWithMarkupByID: null, + + /** + * Optionally injectable hook for processing a queue of child updates. Will + * later move into MultiChildComponents. + */ + processChildrenUpdates: null, + + injection: { + injectEnvironment: function (environment) { + !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined; + ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment; + ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID; + ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates; + injected = true; + } + } + + }; + + module.exports = ReactComponentEnvironment; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPropTypeLocations + */ + + 'use strict'; + + var keyMirror = __webpack_require__(16); + + var ReactPropTypeLocations = keyMirror({ + prop: null, + context: null, + childContext: null + }); + + module.exports = ReactPropTypeLocations; + +/***/ }, +/* 65 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPropTypeLocationNames + */ + + 'use strict'; + + var ReactPropTypeLocationNames = {}; + + if (process.env.NODE_ENV !== 'production') { + ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; + } + + module.exports = ReactPropTypeLocationNames; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 66 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule shouldUpdateReactComponent + * @typechecks static-only + */ + + 'use strict'; + + /** + * Given a `prevElement` and `nextElement`, determines if the existing + * instance should be updated as opposed to being destroyed or replaced by a new + * instance. Both arguments are elements. This ensures that this logic can + * operate on stateless trees without any backing instance. + * + * @param {?object} prevElement + * @param {?object} nextElement + * @return {boolean} True if the existing instance should be updated. + * @protected + */ + function shouldUpdateReactComponent(prevElement, nextElement) { + var prevEmpty = prevElement === null || prevElement === false; + var nextEmpty = nextElement === null || nextElement === false; + if (prevEmpty || nextEmpty) { + return prevEmpty === nextEmpty; + } + + var prevType = typeof prevElement; + var nextType = typeof nextElement; + if (prevType === 'string' || prevType === 'number') { + return nextType === 'string' || nextType === 'number'; + } else { + return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key; + } + return false; + } + + module.exports = shouldUpdateReactComponent; + +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEmptyComponent + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactEmptyComponentRegistry = __webpack_require__(43); + var ReactReconciler = __webpack_require__(49); + + var assign = __webpack_require__(38); + + var placeholderElement; + + var ReactEmptyComponentInjection = { + injectEmptyComponent: function (component) { + placeholderElement = ReactElement.createElement(component); + } + }; + + var ReactEmptyComponent = function (instantiate) { + this._currentElement = null; + this._rootNodeID = null; + this._renderedComponent = instantiate(placeholderElement); + }; + assign(ReactEmptyComponent.prototype, { + construct: function (element) {}, + mountComponent: function (rootID, transaction, context) { + ReactEmptyComponentRegistry.registerNullComponentID(rootID); + this._rootNodeID = rootID; + return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context); + }, + receiveComponent: function () {}, + unmountComponent: function (rootID, transaction, context) { + ReactReconciler.unmountComponent(this._renderedComponent); + ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID); + this._rootNodeID = null; + this._renderedComponent = null; + } + }); + + ReactEmptyComponent.injection = ReactEmptyComponentInjection; + + module.exports = ReactEmptyComponent; + +/***/ }, +/* 68 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactNativeComponent + */ + + 'use strict'; + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + var autoGenerateWrapperClass = null; + var genericComponentClass = null; + // This registry keeps track of wrapper classes around native tags. + var tagToComponentClass = {}; + var textComponentClass = null; + + var ReactNativeComponentInjection = { + // This accepts a class that receives the tag string. This is a catch all + // that can render any kind of tag. + injectGenericComponentClass: function (componentClass) { + genericComponentClass = componentClass; + }, + // This accepts a text component class that takes the text string to be + // rendered as props. + injectTextComponentClass: function (componentClass) { + textComponentClass = componentClass; + }, + // This accepts a keyed object with classes as values. Each key represents a + // tag. That particular tag will use this class instead of the generic one. + injectComponentClasses: function (componentClasses) { + assign(tagToComponentClass, componentClasses); + } + }; + + /** + * Get a composite component wrapper class for a specific tag. + * + * @param {ReactElement} element The tag for which to get the class. + * @return {function} The React class constructor function. + */ + function getComponentClassForElement(element) { + if (typeof element.type === 'function') { + return element.type; + } + var tag = element.type; + var componentClass = tagToComponentClass[tag]; + if (componentClass == null) { + tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag); + } + return componentClass; + } + + /** + * Get a native internal component class for a specific tag. + * + * @param {ReactElement} element The element to create. + * @return {function} The internal class constructor function. + */ + function createInternalComponent(element) { + !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined; + return new genericComponentClass(element.type, element.props); + } + + /** + * @param {ReactText} text + * @return {ReactComponent} + */ + function createInstanceForText(text) { + return new textComponentClass(text); + } + + /** + * @param {ReactComponent} component + * @return {boolean} + */ + function isTextComponent(component) { + return component instanceof textComponentClass; + } + + var ReactNativeComponent = { + getComponentClassForElement: getComponentClassForElement, + createInternalComponent: createInternalComponent, + createInstanceForText: createInstanceForText, + isTextComponent: isTextComponent, + injection: ReactNativeComponentInjection + }; + + module.exports = ReactNativeComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 69 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule validateDOMNesting + */ + + 'use strict'; + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + var warning = __webpack_require__(24); + + var validateDOMNesting = emptyFunction; + + if (process.env.NODE_ENV !== 'production') { + // This validation code was written based on the HTML5 parsing spec: + // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope + // + // Note: this does not catch all invalid nesting, nor does it try to (as it's + // not clear what practical benefit doing so provides); instead, we warn only + // for cases where the parser will give a parse tree differing from what React + // intended. For example, <b><div></div></b> is invalid but we don't warn + // because it still parses correctly; we do warn for other cases like nested + // <p> tags where the beginning of the second element implicitly closes the + // first, causing a confusing mess. + + // https://html.spec.whatwg.org/multipage/syntax.html#special + var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; + + // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope + var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', + + // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point + // TODO: Distinguish by namespace here -- for <title>, including it here + // errs on the side of fewer warnings + 'foreignObject', 'desc', 'title']; + + // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope + var buttonScopeTags = inScopeTags.concat(['button']); + + // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags + var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt']; + + var emptyAncestorInfo = { + parentTag: null, + + formTag: null, + aTagInScope: null, + buttonTagInScope: null, + nobrTagInScope: null, + pTagInButtonScope: null, + + listItemTagAutoclosing: null, + dlItemTagAutoclosing: null + }; + + var updatedAncestorInfo = function (oldInfo, tag, instance) { + var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo); + var info = { tag: tag, instance: instance }; + + if (inScopeTags.indexOf(tag) !== -1) { + ancestorInfo.aTagInScope = null; + ancestorInfo.buttonTagInScope = null; + ancestorInfo.nobrTagInScope = null; + } + if (buttonScopeTags.indexOf(tag) !== -1) { + ancestorInfo.pTagInButtonScope = null; + } + + // See rules for 'li', 'dd', 'dt' start tags in + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody + if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') { + ancestorInfo.listItemTagAutoclosing = null; + ancestorInfo.dlItemTagAutoclosing = null; + } + + ancestorInfo.parentTag = info; + + if (tag === 'form') { + ancestorInfo.formTag = info; + } + if (tag === 'a') { + ancestorInfo.aTagInScope = info; + } + if (tag === 'button') { + ancestorInfo.buttonTagInScope = info; + } + if (tag === 'nobr') { + ancestorInfo.nobrTagInScope = info; + } + if (tag === 'p') { + ancestorInfo.pTagInButtonScope = info; + } + if (tag === 'li') { + ancestorInfo.listItemTagAutoclosing = info; + } + if (tag === 'dd' || tag === 'dt') { + ancestorInfo.dlItemTagAutoclosing = info; + } + + return ancestorInfo; + }; + + /** + * Returns whether + */ + var isTagValidWithParent = function (tag, parentTag) { + // First, let's check if we're in an unusual parsing mode... + switch (parentTag) { + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect + case 'select': + return tag === 'option' || tag === 'optgroup' || tag === '#text'; + case 'optgroup': + return tag === 'option' || tag === '#text'; + // Strictly speaking, seeing an <option> doesn't mean we're in a <select> + // but + case 'option': + return tag === '#text'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption + // No special behavior since these rules fall back to "in body" mode for + // all except special table nodes which cause bad parsing behavior anyway. + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr + case 'tr': + return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody + case 'tbody': + case 'thead': + case 'tfoot': + return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup + case 'colgroup': + return tag === 'col' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable + case 'table': + return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead + case 'head': + return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element + case 'html': + return tag === 'head' || tag === 'body'; + } + + // Probably in the "in body" parsing mode, so we outlaw only tag combos + // where the parsing rules cause implicit opens or closes to be added. + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody + switch (tag) { + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6'; + + case 'rp': + case 'rt': + return impliedEndTags.indexOf(parentTag) === -1; + + case 'caption': + case 'col': + case 'colgroup': + case 'frame': + case 'head': + case 'tbody': + case 'td': + case 'tfoot': + case 'th': + case 'thead': + case 'tr': + // These tags are only valid with a few parents that have special child + // parsing rules -- if we're down here, then none of those matched and + // so we allow it only if we don't know what the parent is, as all other + // cases are invalid. + return parentTag == null; + } + + return true; + }; + + /** + * Returns whether + */ + var findInvalidAncestorForTag = function (tag, ancestorInfo) { + switch (tag) { + case 'address': + case 'article': + case 'aside': + case 'blockquote': + case 'center': + case 'details': + case 'dialog': + case 'dir': + case 'div': + case 'dl': + case 'fieldset': + case 'figcaption': + case 'figure': + case 'footer': + case 'header': + case 'hgroup': + case 'main': + case 'menu': + case 'nav': + case 'ol': + case 'p': + case 'section': + case 'summary': + case 'ul': + + case 'pre': + case 'listing': + + case 'table': + + case 'hr': + + case 'xmp': + + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + return ancestorInfo.pTagInButtonScope; + + case 'form': + return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope; + + case 'li': + return ancestorInfo.listItemTagAutoclosing; + + case 'dd': + case 'dt': + return ancestorInfo.dlItemTagAutoclosing; + + case 'button': + return ancestorInfo.buttonTagInScope; + + case 'a': + // Spec says something about storing a list of markers, but it sounds + // equivalent to this check. + return ancestorInfo.aTagInScope; + + case 'nobr': + return ancestorInfo.nobrTagInScope; + } + + return null; + }; + + /** + * Given a ReactCompositeComponent instance, return a list of its recursive + * owners, starting at the root and ending with the instance itself. + */ + var findOwnerStack = function (instance) { + if (!instance) { + return []; + } + + var stack = []; + /*eslint-disable space-after-keywords */ + do { + /*eslint-enable space-after-keywords */ + stack.push(instance); + } while (instance = instance._currentElement._owner); + stack.reverse(); + return stack; + }; + + var didWarn = {}; + + validateDOMNesting = function (childTag, childInstance, ancestorInfo) { + ancestorInfo = ancestorInfo || emptyAncestorInfo; + var parentInfo = ancestorInfo.parentTag; + var parentTag = parentInfo && parentInfo.tag; + + var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo; + var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo); + var problematic = invalidParent || invalidAncestor; + + if (problematic) { + var ancestorTag = problematic.tag; + var ancestorInstance = problematic.instance; + + var childOwner = childInstance && childInstance._currentElement._owner; + var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner; + + var childOwners = findOwnerStack(childOwner); + var ancestorOwners = findOwnerStack(ancestorOwner); + + var minStackLen = Math.min(childOwners.length, ancestorOwners.length); + var i; + + var deepestCommon = -1; + for (i = 0; i < minStackLen; i++) { + if (childOwners[i] === ancestorOwners[i]) { + deepestCommon = i; + } else { + break; + } + } + + var UNKNOWN = '(unknown)'; + var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) { + return inst.getName() || UNKNOWN; + }); + var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) { + return inst.getName() || UNKNOWN; + }); + var ownerInfo = [].concat( + // If the parent and child instances have a common owner ancestor, start + // with that -- otherwise we just start with the parent's owners. + deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag, + // If we're warning about an invalid (non-parent) ancestry, add '...' + invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > '); + + var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo; + if (didWarn[warnKey]) { + return; + } + didWarn[warnKey] = true; + + if (invalidParent) { + var info = ''; + if (ancestorTag === 'table' && childTag === 'tr') { + info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.'; + } + process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined; + } + } + }; + + validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2); + + validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo; + + // For testing + validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) { + ancestorInfo = ancestorInfo || emptyAncestorInfo; + var parentInfo = ancestorInfo.parentTag; + var parentTag = parentInfo && parentInfo.tag; + return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo); + }; + } + + module.exports = validateDOMNesting; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 70 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultInjection + */ + + 'use strict'; + + var BeforeInputEventPlugin = __webpack_require__(71); + var ChangeEventPlugin = __webpack_require__(79); + var ClientReactRootIndex = __webpack_require__(82); + var DefaultEventPluginOrder = __webpack_require__(83); + var EnterLeaveEventPlugin = __webpack_require__(84); + var ExecutionEnvironment = __webpack_require__(8); + var HTMLDOMPropertyConfig = __webpack_require__(88); + var ReactBrowserComponentMixin = __webpack_require__(89); + var ReactComponentBrowserEnvironment = __webpack_require__(25); + var ReactDefaultBatchingStrategy = __webpack_require__(91); + var ReactDOMComponent = __webpack_require__(92); + var ReactDOMTextComponent = __webpack_require__(5); + var ReactEventListener = __webpack_require__(117); + var ReactInjection = __webpack_require__(120); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMount = __webpack_require__(27); + var ReactReconcileTransaction = __webpack_require__(124); + var SelectEventPlugin = __webpack_require__(129); + var ServerReactRootIndex = __webpack_require__(130); + var SimpleEventPlugin = __webpack_require__(131); + var SVGDOMPropertyConfig = __webpack_require__(140); + + var alreadyInjected = false; + + function inject() { + if (alreadyInjected) { + // TODO: This is currently true because these injections are shared between + // the client and the server package. They should be built independently + // and not share any injection state. Then this problem will be solved. + return; + } + alreadyInjected = true; + + ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener); + + /** + * Inject modules for resolving DOM hierarchy and plugin ordering. + */ + ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder); + ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles); + ReactInjection.EventPluginHub.injectMount(ReactMount); + + /** + * Some important event plugins included by default (without having to require + * them). + */ + ReactInjection.EventPluginHub.injectEventPluginsByName({ + SimpleEventPlugin: SimpleEventPlugin, + EnterLeaveEventPlugin: EnterLeaveEventPlugin, + ChangeEventPlugin: ChangeEventPlugin, + SelectEventPlugin: SelectEventPlugin, + BeforeInputEventPlugin: BeforeInputEventPlugin + }); + + ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent); + + ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent); + + ReactInjection.Class.injectMixin(ReactBrowserComponentMixin); + + ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig); + ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig); + + ReactInjection.EmptyComponent.injectEmptyComponent('noscript'); + + ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction); + ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy); + + ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex); + + ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment); + + if (process.env.NODE_ENV !== 'production') { + var url = ExecutionEnvironment.canUseDOM && window.location.href || ''; + if (/[?&]react_perf\b/.test(url)) { + var ReactDefaultPerf = __webpack_require__(141); + ReactDefaultPerf.start(); + } + } + } + + module.exports = { + inject: inject + }; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 71 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015 Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule BeforeInputEventPlugin + * @typechecks static-only + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPropagators = __webpack_require__(72); + var ExecutionEnvironment = __webpack_require__(8); + var FallbackCompositionState = __webpack_require__(73); + var SyntheticCompositionEvent = __webpack_require__(75); + var SyntheticInputEvent = __webpack_require__(77); + + var keyOf = __webpack_require__(78); + + var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space + var START_KEYCODE = 229; + + var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window; + + var documentMode = null; + if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) { + documentMode = document.documentMode; + } + + // Webkit offers a very useful `textInput` event that can be used to + // directly represent `beforeInput`. The IE `textinput` event is not as + // useful, so we don't use it. + var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto(); + + // In IE9+, we have access to composition events, but the data supplied + // by the native compositionend event may be incorrect. Japanese ideographic + // spaces, for instance (\u3000) are not recorded correctly. + var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11); + + /** + * Opera <= 12 includes TextEvent in window, but does not fire + * text input events. Rely on keypress instead. + */ + function isPresto() { + var opera = window.opera; + return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12; + } + + var SPACEBAR_CODE = 32; + var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); + + var topLevelTypes = EventConstants.topLevelTypes; + + // Events and their corresponding property names. + var eventTypes = { + beforeInput: { + phasedRegistrationNames: { + bubbled: keyOf({ onBeforeInput: null }), + captured: keyOf({ onBeforeInputCapture: null }) + }, + dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste] + }, + compositionEnd: { + phasedRegistrationNames: { + bubbled: keyOf({ onCompositionEnd: null }), + captured: keyOf({ onCompositionEndCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] + }, + compositionStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onCompositionStart: null }), + captured: keyOf({ onCompositionStartCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] + }, + compositionUpdate: { + phasedRegistrationNames: { + bubbled: keyOf({ onCompositionUpdate: null }), + captured: keyOf({ onCompositionUpdateCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] + } + }; + + // Track whether we've ever handled a keypress on the space key. + var hasSpaceKeypress = false; + + /** + * Return whether a native keypress event is assumed to be a command. + * This is required because Firefox fires `keypress` events for key commands + * (cut, copy, select-all, etc.) even though no character is inserted. + */ + function isKeypressCommand(nativeEvent) { + return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && + // ctrlKey && altKey is equivalent to AltGr, and is not a command. + !(nativeEvent.ctrlKey && nativeEvent.altKey); + } + + /** + * Translate native top level events into event types. + * + * @param {string} topLevelType + * @return {object} + */ + function getCompositionEventType(topLevelType) { + switch (topLevelType) { + case topLevelTypes.topCompositionStart: + return eventTypes.compositionStart; + case topLevelTypes.topCompositionEnd: + return eventTypes.compositionEnd; + case topLevelTypes.topCompositionUpdate: + return eventTypes.compositionUpdate; + } + } + + /** + * Does our fallback best-guess model think this event signifies that + * composition has begun? + * + * @param {string} topLevelType + * @param {object} nativeEvent + * @return {boolean} + */ + function isFallbackCompositionStart(topLevelType, nativeEvent) { + return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE; + } + + /** + * Does our fallback mode think that this event is the end of composition? + * + * @param {string} topLevelType + * @param {object} nativeEvent + * @return {boolean} + */ + function isFallbackCompositionEnd(topLevelType, nativeEvent) { + switch (topLevelType) { + case topLevelTypes.topKeyUp: + // Command keys insert or clear IME input. + return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1; + case topLevelTypes.topKeyDown: + // Expect IME keyCode on each keydown. If we get any other + // code we must have exited earlier. + return nativeEvent.keyCode !== START_KEYCODE; + case topLevelTypes.topKeyPress: + case topLevelTypes.topMouseDown: + case topLevelTypes.topBlur: + // Events are not possible without cancelling IME. + return true; + default: + return false; + } + } + + /** + * Google Input Tools provides composition data via a CustomEvent, + * with the `data` property populated in the `detail` object. If this + * is available on the event object, use it. If not, this is a plain + * composition event and we have nothing special to extract. + * + * @param {object} nativeEvent + * @return {?string} + */ + function getDataFromCustomEvent(nativeEvent) { + var detail = nativeEvent.detail; + if (typeof detail === 'object' && 'data' in detail) { + return detail.data; + } + return null; + } + + // Track the current IME composition fallback object, if any. + var currentComposition = null; + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {?object} A SyntheticCompositionEvent. + */ + function extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var eventType; + var fallbackData; + + if (canUseCompositionEvent) { + eventType = getCompositionEventType(topLevelType); + } else if (!currentComposition) { + if (isFallbackCompositionStart(topLevelType, nativeEvent)) { + eventType = eventTypes.compositionStart; + } + } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) { + eventType = eventTypes.compositionEnd; + } + + if (!eventType) { + return null; + } + + if (useFallbackCompositionData) { + // The current composition is stored statically and must not be + // overwritten while composition continues. + if (!currentComposition && eventType === eventTypes.compositionStart) { + currentComposition = FallbackCompositionState.getPooled(topLevelTarget); + } else if (eventType === eventTypes.compositionEnd) { + if (currentComposition) { + fallbackData = currentComposition.getData(); + } + } + } + + var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget); + + if (fallbackData) { + // Inject data generated from fallback path into the synthetic event. + // This matches the property of native CompositionEventInterface. + event.data = fallbackData; + } else { + var customData = getDataFromCustomEvent(nativeEvent); + if (customData !== null) { + event.data = customData; + } + } + + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + } + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {object} nativeEvent Native browser event. + * @return {?string} The string corresponding to this `beforeInput` event. + */ + function getNativeBeforeInputChars(topLevelType, nativeEvent) { + switch (topLevelType) { + case topLevelTypes.topCompositionEnd: + return getDataFromCustomEvent(nativeEvent); + case topLevelTypes.topKeyPress: + /** + * If native `textInput` events are available, our goal is to make + * use of them. However, there is a special case: the spacebar key. + * In Webkit, preventing default on a spacebar `textInput` event + * cancels character insertion, but it *also* causes the browser + * to fall back to its default spacebar behavior of scrolling the + * page. + * + * Tracking at: + * https://code.google.com/p/chromium/issues/detail?id=355103 + * + * To avoid this issue, use the keypress event as if no `textInput` + * event is available. + */ + var which = nativeEvent.which; + if (which !== SPACEBAR_CODE) { + return null; + } + + hasSpaceKeypress = true; + return SPACEBAR_CHAR; + + case topLevelTypes.topTextInput: + // Record the characters to be added to the DOM. + var chars = nativeEvent.data; + + // If it's a spacebar character, assume that we have already handled + // it at the keypress level and bail immediately. Android Chrome + // doesn't give us keycodes, so we need to blacklist it. + if (chars === SPACEBAR_CHAR && hasSpaceKeypress) { + return null; + } + + return chars; + + default: + // For other native event types, do nothing. + return null; + } + } + + /** + * For browsers that do not provide the `textInput` event, extract the + * appropriate string to use for SyntheticInputEvent. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {object} nativeEvent Native browser event. + * @return {?string} The fallback string for this `beforeInput` event. + */ + function getFallbackBeforeInputChars(topLevelType, nativeEvent) { + // If we are currently composing (IME) and using a fallback to do so, + // try to extract the composed characters from the fallback object. + if (currentComposition) { + if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) { + var chars = currentComposition.getData(); + FallbackCompositionState.release(currentComposition); + currentComposition = null; + return chars; + } + return null; + } + + switch (topLevelType) { + case topLevelTypes.topPaste: + // If a paste event occurs after a keypress, throw out the input + // chars. Paste events should not lead to BeforeInput events. + return null; + case topLevelTypes.topKeyPress: + /** + * As of v27, Firefox may fire keypress events even when no character + * will be inserted. A few possibilities: + * + * - `which` is `0`. Arrow keys, Esc key, etc. + * + * - `which` is the pressed key code, but no char is available. + * Ex: 'AltGr + d` in Polish. There is no modified character for + * this key combination and no character is inserted into the + * document, but FF fires the keypress for char code `100` anyway. + * No `input` event will occur. + * + * - `which` is the pressed key code, but a command combination is + * being used. Ex: `Cmd+C`. No character is inserted, and no + * `input` event will occur. + */ + if (nativeEvent.which && !isKeypressCommand(nativeEvent)) { + return String.fromCharCode(nativeEvent.which); + } + return null; + case topLevelTypes.topCompositionEnd: + return useFallbackCompositionData ? null : nativeEvent.data; + default: + return null; + } + } + + /** + * Extract a SyntheticInputEvent for `beforeInput`, based on either native + * `textInput` or fallback behavior. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {?object} A SyntheticInputEvent. + */ + function extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var chars; + + if (canUseTextInputEvent) { + chars = getNativeBeforeInputChars(topLevelType, nativeEvent); + } else { + chars = getFallbackBeforeInputChars(topLevelType, nativeEvent); + } + + // If no characters are being inserted, no BeforeInput event should + // be fired. + if (!chars) { + return null; + } + + var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget); + + event.data = chars; + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + } + + /** + * Create an `onBeforeInput` event to match + * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents. + * + * This event plugin is based on the native `textInput` event + * available in Chrome, Safari, Opera, and IE. This event fires after + * `onKeyPress` and `onCompositionEnd`, but before `onInput`. + * + * `beforeInput` is spec'd but not implemented in any browsers, and + * the `input` event does not provide any useful information about what has + * actually been added, contrary to the spec. Thus, `textInput` is the best + * available event to identify the characters that have actually been inserted + * into the target node. + * + * This plugin is also responsible for emitting `composition` events, thus + * allowing us to share composition fallback code for both `beforeInput` and + * `composition` event types. + */ + var BeforeInputEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)]; + } + }; + + module.exports = BeforeInputEventPlugin; + +/***/ }, +/* 72 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPropagators + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPluginHub = __webpack_require__(30); + + var warning = __webpack_require__(24); + + var accumulateInto = __webpack_require__(34); + var forEachAccumulated = __webpack_require__(35); + + var PropagationPhases = EventConstants.PropagationPhases; + var getListener = EventPluginHub.getListener; + + /** + * Some event types have a notion of different registration names for different + * "phases" of propagation. This finds listeners by a given phase. + */ + function listenerAtPhase(id, event, propagationPhase) { + var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase]; + return getListener(id, registrationName); + } + + /** + * Tags a `SyntheticEvent` with dispatched listeners. Creating this function + * here, allows us to not have to bind or create functions for each event. + * Mutating the event's members allows us to not have to create a wrapping + * "dispatch" object that pairs the event with the listener. + */ + function accumulateDirectionalDispatches(domID, upwards, event) { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined; + } + var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured; + var listener = listenerAtPhase(domID, event, phase); + if (listener) { + event._dispatchListeners = accumulateInto(event._dispatchListeners, listener); + event._dispatchIDs = accumulateInto(event._dispatchIDs, domID); + } + } + + /** + * Collect dispatches (must be entirely collected before dispatching - see unit + * tests). Lazily allocate the array to conserve memory. We must loop through + * each event and perform the traversal for each one. We cannot perform a + * single traversal for the entire collection of events because each event may + * have a different target. + */ + function accumulateTwoPhaseDispatchesSingle(event) { + if (event && event.dispatchConfig.phasedRegistrationNames) { + EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event); + } + } + + /** + * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID. + */ + function accumulateTwoPhaseDispatchesSingleSkipTarget(event) { + if (event && event.dispatchConfig.phasedRegistrationNames) { + EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event); + } + } + + /** + * Accumulates without regard to direction, does not look for phased + * registration names. Same as `accumulateDirectDispatchesSingle` but without + * requiring that the `dispatchMarker` be the same as the dispatched ID. + */ + function accumulateDispatches(id, ignoredDirection, event) { + if (event && event.dispatchConfig.registrationName) { + var registrationName = event.dispatchConfig.registrationName; + var listener = getListener(id, registrationName); + if (listener) { + event._dispatchListeners = accumulateInto(event._dispatchListeners, listener); + event._dispatchIDs = accumulateInto(event._dispatchIDs, id); + } + } + } + + /** + * Accumulates dispatches on an `SyntheticEvent`, but only for the + * `dispatchMarker`. + * @param {SyntheticEvent} event + */ + function accumulateDirectDispatchesSingle(event) { + if (event && event.dispatchConfig.registrationName) { + accumulateDispatches(event.dispatchMarker, null, event); + } + } + + function accumulateTwoPhaseDispatches(events) { + forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle); + } + + function accumulateTwoPhaseDispatchesSkipTarget(events) { + forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget); + } + + function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) { + EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter); + } + + function accumulateDirectDispatches(events) { + forEachAccumulated(events, accumulateDirectDispatchesSingle); + } + + /** + * A small set of propagation patterns, each of which will accept a small amount + * of information, and generate a set of "dispatch ready event objects" - which + * are sets of events that have already been annotated with a set of dispatched + * listener functions/ids. The API is designed this way to discourage these + * propagation strategies from actually executing the dispatches, since we + * always want to collect the entire set of dispatches before executing event a + * single one. + * + * @constructor EventPropagators + */ + var EventPropagators = { + accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches, + accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget, + accumulateDirectDispatches: accumulateDirectDispatches, + accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches + }; + + module.exports = EventPropagators; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 73 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule FallbackCompositionState + * @typechecks static-only + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + + var assign = __webpack_require__(38); + var getTextContentAccessor = __webpack_require__(74); + + /** + * This helper class stores information about text content of a target node, + * allowing comparison of content before and after a given event. + * + * Identify the node where selection currently begins, then observe + * both its text content and its current position in the DOM. Since the + * browser may natively replace the target node during composition, we can + * use its position to find its replacement. + * + * @param {DOMEventTarget} root + */ + function FallbackCompositionState(root) { + this._root = root; + this._startText = this.getText(); + this._fallbackText = null; + } + + assign(FallbackCompositionState.prototype, { + destructor: function () { + this._root = null; + this._startText = null; + this._fallbackText = null; + }, + + /** + * Get current text of input. + * + * @return {string} + */ + getText: function () { + if ('value' in this._root) { + return this._root.value; + } + return this._root[getTextContentAccessor()]; + }, + + /** + * Determine the differing substring between the initially stored + * text content and the current content. + * + * @return {string} + */ + getData: function () { + if (this._fallbackText) { + return this._fallbackText; + } + + var start; + var startValue = this._startText; + var startLength = startValue.length; + var end; + var endValue = this.getText(); + var endLength = endValue.length; + + for (start = 0; start < startLength; start++) { + if (startValue[start] !== endValue[start]) { + break; + } + } + + var minEnd = startLength - start; + for (end = 1; end <= minEnd; end++) { + if (startValue[startLength - end] !== endValue[endLength - end]) { + break; + } + } + + var sliceTail = end > 1 ? 1 - end : undefined; + this._fallbackText = endValue.slice(start, sliceTail); + return this._fallbackText; + } + }); + + PooledClass.addPoolingTo(FallbackCompositionState); + + module.exports = FallbackCompositionState; + +/***/ }, +/* 74 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getTextContentAccessor + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var contentKey = null; + + /** + * Gets the key used to access text content on a DOM node. + * + * @return {?string} Key used to access text content. + * @internal + */ + function getTextContentAccessor() { + if (!contentKey && ExecutionEnvironment.canUseDOM) { + // Prefer textContent to innerText because many browsers support both but + // SVG <text> elements don't support innerText even when <div> does. + contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText'; + } + return contentKey; + } + + module.exports = getTextContentAccessor; + +/***/ }, +/* 75 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticCompositionEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + /** + * @interface Event + * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents + */ + var CompositionEventInterface = { + data: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface); + + module.exports = SyntheticCompositionEvent; + +/***/ }, +/* 76 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticEvent + * @typechecks static-only + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + var warning = __webpack_require__(24); + + /** + * @interface Event + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var EventInterface = { + type: null, + // currentTarget is set when dispatching; no use in copying it here + currentTarget: emptyFunction.thatReturnsNull, + eventPhase: null, + bubbles: null, + cancelable: null, + timeStamp: function (event) { + return event.timeStamp || Date.now(); + }, + defaultPrevented: null, + isTrusted: null + }; + + /** + * Synthetic events are dispatched by event plugins, typically in response to a + * top-level event delegation handler. + * + * These systems should generally use pooling to reduce the frequency of garbage + * collection. The system should check `isPersistent` to determine whether the + * event should be released into the pool after being dispatched. Users that + * need a persisted event should invoke `persist`. + * + * Synthetic events (and subclasses) implement the DOM Level 3 Events API by + * normalizing browser quirks. Subclasses do not necessarily have to implement a + * DOM interface; custom application-specific events can also subclass this. + * + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + */ + function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + this.dispatchConfig = dispatchConfig; + this.dispatchMarker = dispatchMarker; + this.nativeEvent = nativeEvent; + this.target = nativeEventTarget; + this.currentTarget = nativeEventTarget; + + var Interface = this.constructor.Interface; + for (var propName in Interface) { + if (!Interface.hasOwnProperty(propName)) { + continue; + } + var normalize = Interface[propName]; + if (normalize) { + this[propName] = normalize(nativeEvent); + } else { + this[propName] = nativeEvent[propName]; + } + } + + var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false; + if (defaultPrevented) { + this.isDefaultPrevented = emptyFunction.thatReturnsTrue; + } else { + this.isDefaultPrevented = emptyFunction.thatReturnsFalse; + } + this.isPropagationStopped = emptyFunction.thatReturnsFalse; + } + + assign(SyntheticEvent.prototype, { + + preventDefault: function () { + this.defaultPrevented = true; + var event = this.nativeEvent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined; + } + if (!event) { + return; + } + + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + this.isDefaultPrevented = emptyFunction.thatReturnsTrue; + }, + + stopPropagation: function () { + var event = this.nativeEvent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined; + } + if (!event) { + return; + } + + if (event.stopPropagation) { + event.stopPropagation(); + } else { + event.cancelBubble = true; + } + this.isPropagationStopped = emptyFunction.thatReturnsTrue; + }, + + /** + * We release all dispatched `SyntheticEvent`s after each event loop, adding + * them back into the pool. This allows a way to hold onto a reference that + * won't be added back into the pool. + */ + persist: function () { + this.isPersistent = emptyFunction.thatReturnsTrue; + }, + + /** + * Checks if this event should be released back into the pool. + * + * @return {boolean} True if this should not be released, false otherwise. + */ + isPersistent: emptyFunction.thatReturnsFalse, + + /** + * `PooledClass` looks for `destructor` on each instance it releases. + */ + destructor: function () { + var Interface = this.constructor.Interface; + for (var propName in Interface) { + this[propName] = null; + } + this.dispatchConfig = null; + this.dispatchMarker = null; + this.nativeEvent = null; + } + + }); + + SyntheticEvent.Interface = EventInterface; + + /** + * Helper to reduce boilerplate when creating subclasses. + * + * @param {function} Class + * @param {?object} Interface + */ + SyntheticEvent.augmentClass = function (Class, Interface) { + var Super = this; + + var prototype = Object.create(Super.prototype); + assign(prototype, Class.prototype); + Class.prototype = prototype; + Class.prototype.constructor = Class; + + Class.Interface = assign({}, Super.Interface, Interface); + Class.augmentClass = Super.augmentClass; + + PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler); + }; + + PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler); + + module.exports = SyntheticEvent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 77 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticInputEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + /** + * @interface Event + * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105 + * /#events-inputevents + */ + var InputEventInterface = { + data: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface); + + module.exports = SyntheticInputEvent; + +/***/ }, +/* 78 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule keyOf + */ + + /** + * Allows extraction of a minified key. Let's the build system minify keys + * without losing the ability to dynamically use key strings as values + * themselves. Pass in an object with a single key/val pair and it will return + * you the string key of that single record. Suppose you want to grab the + * value for a key 'className' inside of an object. Key/val minification may + * have aliased that key to be 'xa12'. keyOf({className: null}) will return + * 'xa12' in that case. Resolve keys you want to use once at startup time, then + * reuse those resolutions. + */ + "use strict"; + + var keyOf = function (oneKeyObj) { + var key; + for (key in oneKeyObj) { + if (!oneKeyObj.hasOwnProperty(key)) { + continue; + } + return key; + } + return null; + }; + + module.exports = keyOf; + +/***/ }, +/* 79 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ChangeEventPlugin + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPluginHub = __webpack_require__(30); + var EventPropagators = __webpack_require__(72); + var ExecutionEnvironment = __webpack_require__(8); + var ReactUpdates = __webpack_require__(53); + var SyntheticEvent = __webpack_require__(76); + + var getEventTarget = __webpack_require__(80); + var isEventSupported = __webpack_require__(39); + var isTextInputElement = __webpack_require__(81); + var keyOf = __webpack_require__(78); + + var topLevelTypes = EventConstants.topLevelTypes; + + var eventTypes = { + change: { + phasedRegistrationNames: { + bubbled: keyOf({ onChange: null }), + captured: keyOf({ onChangeCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange] + } + }; + + /** + * For IE shims + */ + var activeElement = null; + var activeElementID = null; + var activeElementValue = null; + var activeElementValueProp = null; + + /** + * SECTION: handle `change` event + */ + function shouldUseChangeEvent(elem) { + var nodeName = elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName === 'select' || nodeName === 'input' && elem.type === 'file'; + } + + var doesChangeEventBubble = false; + if (ExecutionEnvironment.canUseDOM) { + // See `handleChange` comment below + doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8); + } + + function manualDispatchChangeEvent(nativeEvent) { + var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent)); + EventPropagators.accumulateTwoPhaseDispatches(event); + + // If change and propertychange bubbled, we'd just bind to it like all the + // other events and have it go through ReactBrowserEventEmitter. Since it + // doesn't, we manually listen for the events and so we have to enqueue and + // process the abstract event manually. + // + // Batching is necessary here in order to ensure that all event handlers run + // before the next rerender (including event handlers attached to ancestor + // elements instead of directly on the input). Without this, controlled + // components don't work properly in conjunction with event bubbling because + // the component is rerendered and the value reverted before all the event + // handlers can run. See https://github.com/facebook/react/issues/708. + ReactUpdates.batchedUpdates(runEventInBatch, event); + } + + function runEventInBatch(event) { + EventPluginHub.enqueueEvents(event); + EventPluginHub.processEventQueue(false); + } + + function startWatchingForChangeEventIE8(target, targetID) { + activeElement = target; + activeElementID = targetID; + activeElement.attachEvent('onchange', manualDispatchChangeEvent); + } + + function stopWatchingForChangeEventIE8() { + if (!activeElement) { + return; + } + activeElement.detachEvent('onchange', manualDispatchChangeEvent); + activeElement = null; + activeElementID = null; + } + + function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topChange) { + return topLevelTargetID; + } + } + function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topFocus) { + // stopWatching() should be a noop here but we call it just in case we + // missed a blur event somehow. + stopWatchingForChangeEventIE8(); + startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID); + } else if (topLevelType === topLevelTypes.topBlur) { + stopWatchingForChangeEventIE8(); + } + } + + /** + * SECTION: handle `input` event + */ + var isInputEventSupported = false; + if (ExecutionEnvironment.canUseDOM) { + // IE9 claims to support the input event but fails to trigger it when + // deleting text, so we ignore its input events + isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9); + } + + /** + * (For old IE.) Replacement getter/setter for the `value` property that gets + * set on the active element. + */ + var newValueProp = { + get: function () { + return activeElementValueProp.get.call(this); + }, + set: function (val) { + // Cast to a string so we can do equality checks. + activeElementValue = '' + val; + activeElementValueProp.set.call(this, val); + } + }; + + /** + * (For old IE.) Starts tracking propertychange events on the passed-in element + * and override the value property so that we can distinguish user events from + * value changes in JS. + */ + function startWatchingForValueChange(target, targetID) { + activeElement = target; + activeElementID = targetID; + activeElementValue = target.value; + activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value'); + + // Not guarded in a canDefineProperty check: IE8 supports defineProperty only + // on DOM elements + Object.defineProperty(activeElement, 'value', newValueProp); + activeElement.attachEvent('onpropertychange', handlePropertyChange); + } + + /** + * (For old IE.) Removes the event listeners from the currently-tracked element, + * if any exists. + */ + function stopWatchingForValueChange() { + if (!activeElement) { + return; + } + + // delete restores the original property definition + delete activeElement.value; + activeElement.detachEvent('onpropertychange', handlePropertyChange); + + activeElement = null; + activeElementID = null; + activeElementValue = null; + activeElementValueProp = null; + } + + /** + * (For old IE.) Handles a propertychange event, sending a `change` event if + * the value of the active element has changed. + */ + function handlePropertyChange(nativeEvent) { + if (nativeEvent.propertyName !== 'value') { + return; + } + var value = nativeEvent.srcElement.value; + if (value === activeElementValue) { + return; + } + activeElementValue = value; + + manualDispatchChangeEvent(nativeEvent); + } + + /** + * If a `change` event should be fired, returns the target's ID. + */ + function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topInput) { + // In modern browsers (i.e., not IE8 or IE9), the input event is exactly + // what we want so fall through here and trigger an abstract event + return topLevelTargetID; + } + } + + // For IE8 and IE9. + function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topFocus) { + // In IE8, we can capture almost all .value changes by adding a + // propertychange handler and looking for events with propertyName + // equal to 'value' + // In IE9, propertychange fires for most input events but is buggy and + // doesn't fire when text is deleted, but conveniently, selectionchange + // appears to fire in all of the remaining cases so we catch those and + // forward the event if the value has changed + // In either case, we don't want to call the event handler if the value + // is changed from JS so we redefine a setter for `.value` that updates + // our activeElementValue variable, allowing us to ignore those changes + // + // stopWatching() should be a noop here but we call it just in case we + // missed a blur event somehow. + stopWatchingForValueChange(); + startWatchingForValueChange(topLevelTarget, topLevelTargetID); + } else if (topLevelType === topLevelTypes.topBlur) { + stopWatchingForValueChange(); + } + } + + // For IE8 and IE9. + function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) { + // On the selectionchange event, the target is just document which isn't + // helpful for us so just check activeElement instead. + // + // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire + // propertychange on the first input event after setting `value` from a + // script and fires only keydown, keypress, keyup. Catching keyup usually + // gets it and catching keydown lets us fire an event for the first + // keystroke if user does a key repeat (it'll be a little delayed: right + // before the second keystroke). Other input methods (e.g., paste) seem to + // fire selectionchange normally. + if (activeElement && activeElement.value !== activeElementValue) { + activeElementValue = activeElement.value; + return activeElementID; + } + } + } + + /** + * SECTION: handle `click` event + */ + function shouldUseClickEvent(elem) { + // Use the `click` event to detect changes to checkbox and radio inputs. + // This approach works across all browsers, whereas `change` does not fire + // until `blur` in IE8. + return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio'); + } + + function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topClick) { + return topLevelTargetID; + } + } + + /** + * This plugin creates an `onChange` event that normalizes change events + * across form elements. This event fires at a time when it's possible to + * change the element's value without seeing a flicker. + * + * Supported elements are: + * - input (see `isTextInputElement`) + * - textarea + * - select + */ + var ChangeEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + + var getTargetIDFunc, handleEventFunc; + if (shouldUseChangeEvent(topLevelTarget)) { + if (doesChangeEventBubble) { + getTargetIDFunc = getTargetIDForChangeEvent; + } else { + handleEventFunc = handleEventsForChangeEventIE8; + } + } else if (isTextInputElement(topLevelTarget)) { + if (isInputEventSupported) { + getTargetIDFunc = getTargetIDForInputEvent; + } else { + getTargetIDFunc = getTargetIDForInputEventIE; + handleEventFunc = handleEventsForInputEventIE; + } + } else if (shouldUseClickEvent(topLevelTarget)) { + getTargetIDFunc = getTargetIDForClickEvent; + } + + if (getTargetIDFunc) { + var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID); + if (targetID) { + var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget); + event.type = 'change'; + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + } + } + + if (handleEventFunc) { + handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID); + } + } + + }; + + module.exports = ChangeEventPlugin; + +/***/ }, +/* 80 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventTarget + * @typechecks static-only + */ + + 'use strict'; + + /** + * Gets the target node from a native browser event by accounting for + * inconsistencies in browser DOM APIs. + * + * @param {object} nativeEvent Native browser event. + * @return {DOMEventTarget} Target node. + */ + function getEventTarget(nativeEvent) { + var target = nativeEvent.target || nativeEvent.srcElement || window; + // Safari may fire events on text nodes (Node.TEXT_NODE is 3). + // @see http://www.quirksmode.org/js/events_properties.html + return target.nodeType === 3 ? target.parentNode : target; + } + + module.exports = getEventTarget; + +/***/ }, +/* 81 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isTextInputElement + */ + + 'use strict'; + + /** + * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + */ + var supportedInputTypes = { + 'color': true, + 'date': true, + 'datetime': true, + 'datetime-local': true, + 'email': true, + 'month': true, + 'number': true, + 'password': true, + 'range': true, + 'search': true, + 'tel': true, + 'text': true, + 'time': true, + 'url': true, + 'week': true + }; + + function isTextInputElement(elem) { + var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea'); + } + + module.exports = isTextInputElement; + +/***/ }, +/* 82 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ClientReactRootIndex + * @typechecks + */ + + 'use strict'; + + var nextReactRootIndex = 0; + + var ClientReactRootIndex = { + createReactRootIndex: function () { + return nextReactRootIndex++; + } + }; + + module.exports = ClientReactRootIndex; + +/***/ }, +/* 83 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DefaultEventPluginOrder + */ + + 'use strict'; + + var keyOf = __webpack_require__(78); + + /** + * Module that is injectable into `EventPluginHub`, that specifies a + * deterministic ordering of `EventPlugin`s. A convenient way to reason about + * plugins, without having to package every one of them. This is better than + * having plugins be ordered in the same order that they are injected because + * that ordering would be influenced by the packaging order. + * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that + * preventing default on events is convenient in `SimpleEventPlugin` handlers. + */ + var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })]; + + module.exports = DefaultEventPluginOrder; + +/***/ }, +/* 84 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EnterLeaveEventPlugin + * @typechecks static-only + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPropagators = __webpack_require__(72); + var SyntheticMouseEvent = __webpack_require__(85); + + var ReactMount = __webpack_require__(27); + var keyOf = __webpack_require__(78); + + var topLevelTypes = EventConstants.topLevelTypes; + var getFirstReactDOM = ReactMount.getFirstReactDOM; + + var eventTypes = { + mouseEnter: { + registrationName: keyOf({ onMouseEnter: null }), + dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver] + }, + mouseLeave: { + registrationName: keyOf({ onMouseLeave: null }), + dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver] + } + }; + + var extractedEvents = [null, null]; + + var EnterLeaveEventPlugin = { + + eventTypes: eventTypes, + + /** + * For almost every interaction we care about, there will be both a top-level + * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that + * we do not extract duplicate events. However, moving the mouse into the + * browser from outside will not fire a `mouseout` event. In this case, we use + * the `mouseover` top-level event. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) { + return null; + } + if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) { + // Must not be a mouse in or mouse out - ignoring. + return null; + } + + var win; + if (topLevelTarget.window === topLevelTarget) { + // `topLevelTarget` is probably a window object. + win = topLevelTarget; + } else { + // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. + var doc = topLevelTarget.ownerDocument; + if (doc) { + win = doc.defaultView || doc.parentWindow; + } else { + win = window; + } + } + + var from; + var to; + var fromID = ''; + var toID = ''; + if (topLevelType === topLevelTypes.topMouseOut) { + from = topLevelTarget; + fromID = topLevelTargetID; + to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement); + if (to) { + toID = ReactMount.getID(to); + } else { + to = win; + } + to = to || win; + } else { + from = win; + to = topLevelTarget; + toID = topLevelTargetID; + } + + if (from === to) { + // Nothing pertains to our managed components. + return null; + } + + var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget); + leave.type = 'mouseleave'; + leave.target = from; + leave.relatedTarget = to; + + var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget); + enter.type = 'mouseenter'; + enter.target = to; + enter.relatedTarget = from; + + EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID); + + extractedEvents[0] = leave; + extractedEvents[1] = enter; + + return extractedEvents; + } + + }; + + module.exports = EnterLeaveEventPlugin; + +/***/ }, +/* 85 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticMouseEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + var ViewportMetrics = __webpack_require__(37); + + var getEventModifierState = __webpack_require__(87); + + /** + * @interface MouseEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var MouseEventInterface = { + screenX: null, + screenY: null, + clientX: null, + clientY: null, + ctrlKey: null, + shiftKey: null, + altKey: null, + metaKey: null, + getModifierState: getEventModifierState, + button: function (event) { + // Webkit, Firefox, IE9+ + // which: 1 2 3 + // button: 0 1 2 (standard) + var button = event.button; + if ('which' in event) { + return button; + } + // IE<9 + // which: undefined + // button: 0 0 0 + // button: 1 4 2 (onmouseup) + return button === 2 ? 2 : button === 4 ? 1 : 0; + }, + buttons: null, + relatedTarget: function (event) { + return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement); + }, + // "Proprietary" Interface. + pageX: function (event) { + return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft; + }, + pageY: function (event) { + return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface); + + module.exports = SyntheticMouseEvent; + +/***/ }, +/* 86 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticUIEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + var getEventTarget = __webpack_require__(80); + + /** + * @interface UIEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var UIEventInterface = { + view: function (event) { + if (event.view) { + return event.view; + } + + var target = getEventTarget(event); + if (target != null && target.window === target) { + // target is a window object + return target; + } + + var doc = target.ownerDocument; + // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. + if (doc) { + return doc.defaultView || doc.parentWindow; + } else { + return window; + } + }, + detail: function (event) { + return event.detail || 0; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ + function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface); + + module.exports = SyntheticUIEvent; + +/***/ }, +/* 87 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventModifierState + * @typechecks static-only + */ + + 'use strict'; + + /** + * Translation from modifier key to the associated property in the event. + * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers + */ + + var modifierKeyToProp = { + 'Alt': 'altKey', + 'Control': 'ctrlKey', + 'Meta': 'metaKey', + 'Shift': 'shiftKey' + }; + + // IE8 does not implement getModifierState so we simply map it to the only + // modifier keys exposed by the event itself, does not support Lock-keys. + // Currently, all major browsers except Chrome seems to support Lock-keys. + function modifierStateGetter(keyArg) { + var syntheticEvent = this; + var nativeEvent = syntheticEvent.nativeEvent; + if (nativeEvent.getModifierState) { + return nativeEvent.getModifierState(keyArg); + } + var keyProp = modifierKeyToProp[keyArg]; + return keyProp ? !!nativeEvent[keyProp] : false; + } + + function getEventModifierState(nativeEvent) { + return modifierStateGetter; + } + + module.exports = getEventModifierState; + +/***/ }, +/* 88 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule HTMLDOMPropertyConfig + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ExecutionEnvironment = __webpack_require__(8); + + var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE; + var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY; + var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE; + var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS; + var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE; + var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE; + var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE; + + var hasSVG; + if (ExecutionEnvironment.canUseDOM) { + var implementation = document.implementation; + hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1'); + } + + var HTMLDOMPropertyConfig = { + isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/), + Properties: { + /** + * Standard Properties + */ + accept: null, + acceptCharset: null, + accessKey: null, + action: null, + allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + allowTransparency: MUST_USE_ATTRIBUTE, + alt: null, + async: HAS_BOOLEAN_VALUE, + autoComplete: null, + // autoFocus is polyfilled/normalized by AutoFocusUtils + // autoFocus: HAS_BOOLEAN_VALUE, + autoPlay: HAS_BOOLEAN_VALUE, + capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + cellPadding: null, + cellSpacing: null, + charSet: MUST_USE_ATTRIBUTE, + challenge: MUST_USE_ATTRIBUTE, + checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + classID: MUST_USE_ATTRIBUTE, + // To set className on SVG elements, it's necessary to use .setAttribute; + // this works on HTML elements too in all browsers except IE8. Conveniently, + // IE8 doesn't support SVG and so we can simply use the attribute in + // browsers that support SVG and the property in browsers that don't, + // regardless of whether the element is HTML or SVG. + className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY, + cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, + colSpan: null, + content: null, + contentEditable: null, + contextMenu: MUST_USE_ATTRIBUTE, + controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + coords: null, + crossOrigin: null, + data: null, // For `<object />` acts as `src`. + dateTime: MUST_USE_ATTRIBUTE, + 'default': HAS_BOOLEAN_VALUE, + defer: HAS_BOOLEAN_VALUE, + dir: null, + disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + download: HAS_OVERLOADED_BOOLEAN_VALUE, + draggable: null, + encType: null, + form: MUST_USE_ATTRIBUTE, + formAction: MUST_USE_ATTRIBUTE, + formEncType: MUST_USE_ATTRIBUTE, + formMethod: MUST_USE_ATTRIBUTE, + formNoValidate: HAS_BOOLEAN_VALUE, + formTarget: MUST_USE_ATTRIBUTE, + frameBorder: MUST_USE_ATTRIBUTE, + headers: null, + height: MUST_USE_ATTRIBUTE, + hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + high: null, + href: null, + hrefLang: null, + htmlFor: null, + httpEquiv: null, + icon: null, + id: MUST_USE_PROPERTY, + inputMode: MUST_USE_ATTRIBUTE, + integrity: null, + is: MUST_USE_ATTRIBUTE, + keyParams: MUST_USE_ATTRIBUTE, + keyType: MUST_USE_ATTRIBUTE, + kind: null, + label: null, + lang: null, + list: MUST_USE_ATTRIBUTE, + loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + low: null, + manifest: MUST_USE_ATTRIBUTE, + marginHeight: null, + marginWidth: null, + max: null, + maxLength: MUST_USE_ATTRIBUTE, + media: MUST_USE_ATTRIBUTE, + mediaGroup: null, + method: null, + min: null, + minLength: MUST_USE_ATTRIBUTE, + multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + name: null, + nonce: MUST_USE_ATTRIBUTE, + noValidate: HAS_BOOLEAN_VALUE, + open: HAS_BOOLEAN_VALUE, + optimum: null, + pattern: null, + placeholder: null, + poster: null, + preload: null, + radioGroup: null, + readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + rel: null, + required: HAS_BOOLEAN_VALUE, + reversed: HAS_BOOLEAN_VALUE, + role: MUST_USE_ATTRIBUTE, + rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, + rowSpan: null, + sandbox: null, + scope: null, + scoped: HAS_BOOLEAN_VALUE, + scrolling: null, + seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + shape: null, + size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, + sizes: MUST_USE_ATTRIBUTE, + span: HAS_POSITIVE_NUMERIC_VALUE, + spellCheck: null, + src: null, + srcDoc: MUST_USE_PROPERTY, + srcLang: null, + srcSet: MUST_USE_ATTRIBUTE, + start: HAS_NUMERIC_VALUE, + step: null, + style: null, + summary: null, + tabIndex: null, + target: null, + title: null, + type: null, + useMap: null, + value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS, + width: MUST_USE_ATTRIBUTE, + wmode: MUST_USE_ATTRIBUTE, + wrap: null, + + /** + * RDFa Properties + */ + about: MUST_USE_ATTRIBUTE, + datatype: MUST_USE_ATTRIBUTE, + inlist: MUST_USE_ATTRIBUTE, + prefix: MUST_USE_ATTRIBUTE, + // property is also supported for OpenGraph in meta tags. + property: MUST_USE_ATTRIBUTE, + resource: MUST_USE_ATTRIBUTE, + 'typeof': MUST_USE_ATTRIBUTE, + vocab: MUST_USE_ATTRIBUTE, + + /** + * Non-standard Properties + */ + // autoCapitalize and autoCorrect are supported in Mobile Safari for + // keyboard hints. + autoCapitalize: null, + autoCorrect: null, + // autoSave allows WebKit/Blink to persist values of input fields on page reloads + autoSave: null, + // color is for Safari mask-icon link + color: null, + // itemProp, itemScope, itemType are for + // Microdata support. See http://schema.org/docs/gs.html + itemProp: MUST_USE_ATTRIBUTE, + itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + itemType: MUST_USE_ATTRIBUTE, + // itemID and itemRef are for Microdata support as well but + // only specified in the the WHATWG spec document. See + // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api + itemID: MUST_USE_ATTRIBUTE, + itemRef: MUST_USE_ATTRIBUTE, + // results show looking glass icon and recent searches on input + // search fields in WebKit/Blink + results: null, + // IE-only attribute that specifies security restrictions on an iframe + // as an alternative to the sandbox attribute on IE<10 + security: MUST_USE_ATTRIBUTE, + // IE-only attribute that controls focus behavior + unselectable: MUST_USE_ATTRIBUTE + }, + DOMAttributeNames: { + acceptCharset: 'accept-charset', + className: 'class', + htmlFor: 'for', + httpEquiv: 'http-equiv' + }, + DOMPropertyNames: { + autoCapitalize: 'autocapitalize', + autoComplete: 'autocomplete', + autoCorrect: 'autocorrect', + autoFocus: 'autofocus', + autoPlay: 'autoplay', + autoSave: 'autosave', + // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter. + // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding + encType: 'encoding', + hrefLang: 'hreflang', + radioGroup: 'radiogroup', + spellCheck: 'spellcheck', + srcDoc: 'srcdoc', + srcSet: 'srcset' + } + }; + + module.exports = HTMLDOMPropertyConfig; + +/***/ }, +/* 89 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactBrowserComponentMixin + */ + + 'use strict'; + + var ReactInstanceMap = __webpack_require__(46); + + var findDOMNode = __webpack_require__(90); + var warning = __webpack_require__(24); + + var didWarnKey = '_getDOMNodeDidWarn'; + + var ReactBrowserComponentMixin = { + /** + * Returns the DOM node rendered by this component. + * + * @return {DOMElement} The root node of this component. + * @final + * @protected + */ + getDOMNode: function () { + process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined; + this.constructor[didWarnKey] = true; + return findDOMNode(this); + } + }; + + module.exports = ReactBrowserComponentMixin; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 90 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule findDOMNode + * @typechecks static-only + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactInstanceMap = __webpack_require__(46); + var ReactMount = __webpack_require__(27); + + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Returns the DOM node rendered by this element. + * + * @param {ReactComponent|DOMElement} componentOrElement + * @return {?DOMElement} The root node of this element. + */ + function findDOMNode(componentOrElement) { + if (process.env.NODE_ENV !== 'production') { + var owner = ReactCurrentOwner.current; + if (owner !== null) { + process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined; + owner._warnedAboutRefsInRender = true; + } + } + if (componentOrElement == null) { + return null; + } + if (componentOrElement.nodeType === 1) { + return componentOrElement; + } + if (ReactInstanceMap.has(componentOrElement)) { + return ReactMount.getNodeFromInstance(componentOrElement); + } + !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined; + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined; + } + + module.exports = findDOMNode; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 91 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultBatchingStrategy + */ + + 'use strict'; + + var ReactUpdates = __webpack_require__(53); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + + var RESET_BATCHED_UPDATES = { + initialize: emptyFunction, + close: function () { + ReactDefaultBatchingStrategy.isBatchingUpdates = false; + } + }; + + var FLUSH_BATCHED_UPDATES = { + initialize: emptyFunction, + close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates) + }; + + var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES]; + + function ReactDefaultBatchingStrategyTransaction() { + this.reinitializeTransaction(); + } + + assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, { + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + } + }); + + var transaction = new ReactDefaultBatchingStrategyTransaction(); + + var ReactDefaultBatchingStrategy = { + isBatchingUpdates: false, + + /** + * Call the provided function in a context within which calls to `setState` + * and friends are batched such that components aren't updated unnecessarily. + */ + batchedUpdates: function (callback, a, b, c, d, e) { + var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates; + + ReactDefaultBatchingStrategy.isBatchingUpdates = true; + + // The code is written this way to avoid extra allocations + if (alreadyBatchingUpdates) { + callback(a, b, c, d, e); + } else { + transaction.perform(callback, null, a, b, c, d, e); + } + } + }; + + module.exports = ReactDefaultBatchingStrategy; + +/***/ }, +/* 92 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMComponent + * @typechecks static-only + */ + + /* global hasOwnProperty:true */ + + 'use strict'; + + var AutoFocusUtils = __webpack_require__(93); + var CSSPropertyOperations = __webpack_require__(95); + var DOMProperty = __webpack_require__(22); + var DOMPropertyOperations = __webpack_require__(21); + var EventConstants = __webpack_require__(29); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactComponentBrowserEnvironment = __webpack_require__(25); + var ReactDOMButton = __webpack_require__(103); + var ReactDOMInput = __webpack_require__(104); + var ReactDOMOption = __webpack_require__(108); + var ReactDOMSelect = __webpack_require__(111); + var ReactDOMTextarea = __webpack_require__(112); + var ReactMount = __webpack_require__(27); + var ReactMultiChild = __webpack_require__(113); + var ReactPerf = __webpack_require__(17); + var ReactUpdateQueue = __webpack_require__(52); + + var assign = __webpack_require__(38); + var canDefineProperty = __webpack_require__(42); + var escapeTextContentForBrowser = __webpack_require__(20); + var invariant = __webpack_require__(12); + var isEventSupported = __webpack_require__(39); + var keyOf = __webpack_require__(78); + var setInnerHTML = __webpack_require__(18); + var setTextContent = __webpack_require__(19); + var shallowEqual = __webpack_require__(116); + var validateDOMNesting = __webpack_require__(69); + var warning = __webpack_require__(24); + + var deleteListener = ReactBrowserEventEmitter.deleteListener; + var listenTo = ReactBrowserEventEmitter.listenTo; + var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules; + + // For quickly matching children type, to test if can be treated as content. + var CONTENT_TYPES = { 'string': true, 'number': true }; + + var CHILDREN = keyOf({ children: null }); + var STYLE = keyOf({ style: null }); + var HTML = keyOf({ __html: null }); + + var ELEMENT_NODE_TYPE = 1; + + function getDeclarationErrorAddendum(internalInstance) { + if (internalInstance) { + var owner = internalInstance._currentElement._owner || null; + if (owner) { + var name = owner.getName(); + if (name) { + return ' This DOM node was rendered by `' + name + '`.'; + } + } + } + return ''; + } + + var legacyPropsDescriptor; + if (process.env.NODE_ENV !== 'production') { + legacyPropsDescriptor = { + props: { + enumerable: false, + get: function () { + var component = this._reactInternalComponent; + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined; + return component._currentElement.props; + } + } + }; + } + + function legacyGetDOMNode() { + if (process.env.NODE_ENV !== 'production') { + var component = this._reactInternalComponent; + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined; + } + return this; + } + + function legacyIsMounted() { + var component = this._reactInternalComponent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined; + } + return !!component; + } + + function legacySetStateEtc() { + if (process.env.NODE_ENV !== 'production') { + var component = this._reactInternalComponent; + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined; + } + } + + function legacySetProps(partialProps, callback) { + var component = this._reactInternalComponent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined; + } + if (!component) { + return; + } + ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(component, callback); + } + } + + function legacyReplaceProps(partialProps, callback) { + var component = this._reactInternalComponent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined; + } + if (!component) { + return; + } + ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(component, callback); + } + } + + function friendlyStringify(obj) { + if (typeof obj === 'object') { + if (Array.isArray(obj)) { + return '[' + obj.map(friendlyStringify).join(', ') + ']'; + } else { + var pairs = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key); + pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key])); + } + } + return '{' + pairs.join(', ') + '}'; + } + } else if (typeof obj === 'string') { + return JSON.stringify(obj); + } else if (typeof obj === 'function') { + return '[function object]'; + } + // Differs from JSON.stringify in that undefined becauses undefined and that + // inf and nan don't become null + return String(obj); + } + + var styleMutationWarning = {}; + + function checkAndWarnForMutatedStyle(style1, style2, component) { + if (style1 == null || style2 == null) { + return; + } + if (shallowEqual(style1, style2)) { + return; + } + + var componentName = component._tag; + var owner = component._currentElement._owner; + var ownerName; + if (owner) { + ownerName = owner.getName(); + } + + var hash = ownerName + '|' + componentName; + + if (styleMutationWarning.hasOwnProperty(hash)) { + return; + } + + styleMutationWarning[hash] = true; + + process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined; + } + + /** + * @param {object} component + * @param {?object} props + */ + function assertValidProps(component, props) { + if (!props) { + return; + } + // Note the use of `==` which checks for null or undefined. + if (process.env.NODE_ENV !== 'production') { + if (voidElementTags[component._tag]) { + process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined; + } + } + if (props.dangerouslySetInnerHTML != null) { + !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined; + !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined; + } + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined; + } + !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined; + } + + function enqueuePutListener(id, registrationName, listener, transaction) { + if (process.env.NODE_ENV !== 'production') { + // IE8 has no API for event capturing and the `onScroll` event doesn't + // bubble. + process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : undefined; + } + var container = ReactMount.findReactContainerForID(id); + if (container) { + var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container; + listenTo(registrationName, doc); + } + transaction.getReactMountReady().enqueue(putListener, { + id: id, + registrationName: registrationName, + listener: listener + }); + } + + function putListener() { + var listenerToPut = this; + ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener); + } + + // There are so many media events, it makes sense to just + // maintain a list rather than create a `trapBubbledEvent` for each + var mediaEvents = { + topAbort: 'abort', + topCanPlay: 'canplay', + topCanPlayThrough: 'canplaythrough', + topDurationChange: 'durationchange', + topEmptied: 'emptied', + topEncrypted: 'encrypted', + topEnded: 'ended', + topError: 'error', + topLoadedData: 'loadeddata', + topLoadedMetadata: 'loadedmetadata', + topLoadStart: 'loadstart', + topPause: 'pause', + topPlay: 'play', + topPlaying: 'playing', + topProgress: 'progress', + topRateChange: 'ratechange', + topSeeked: 'seeked', + topSeeking: 'seeking', + topStalled: 'stalled', + topSuspend: 'suspend', + topTimeUpdate: 'timeupdate', + topVolumeChange: 'volumechange', + topWaiting: 'waiting' + }; + + function trapBubbledEventsLocal() { + var inst = this; + // If a component renders to null or if another component fatals and causes + // the state of the tree to be corrupted, `node` here can be null. + !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined; + var node = ReactMount.getNode(inst._rootNodeID); + !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined; + + switch (inst._tag) { + case 'iframe': + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)]; + break; + case 'video': + case 'audio': + + inst._wrapperState.listeners = []; + // create listener for each media event + for (var event in mediaEvents) { + if (mediaEvents.hasOwnProperty(event)) { + inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node)); + } + } + + break; + case 'img': + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)]; + break; + case 'form': + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)]; + break; + } + } + + function mountReadyInputWrapper() { + ReactDOMInput.mountReadyWrapper(this); + } + + function postUpdateSelectWrapper() { + ReactDOMSelect.postUpdateWrapper(this); + } + + // For HTML, certain tags should omit their close tag. We keep a whitelist for + // those special cased tags. + + var omittedCloseTags = { + 'area': true, + 'base': true, + 'br': true, + 'col': true, + 'embed': true, + 'hr': true, + 'img': true, + 'input': true, + 'keygen': true, + 'link': true, + 'meta': true, + 'param': true, + 'source': true, + 'track': true, + 'wbr': true + }; + + // NOTE: menuitem's close tag should be omitted, but that causes problems. + var newlineEatingTags = { + 'listing': true, + 'pre': true, + 'textarea': true + }; + + // For HTML, certain tags cannot have children. This has the same purpose as + // `omittedCloseTags` except that `menuitem` should still have its closing tag. + + var voidElementTags = assign({ + 'menuitem': true + }, omittedCloseTags); + + // We accept any tag to be rendered but since this gets injected into arbitrary + // HTML, we want to make sure that it's a safe tag. + // http://www.w3.org/TR/REC-xml/#NT-Name + + var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset + var validatedTagCache = {}; + var hasOwnProperty = ({}).hasOwnProperty; + + function validateDangerousTag(tag) { + if (!hasOwnProperty.call(validatedTagCache, tag)) { + !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined; + validatedTagCache[tag] = true; + } + } + + function processChildContextDev(context, inst) { + // Pass down our tag name to child components for validation purposes + context = assign({}, context); + var info = context[validateDOMNesting.ancestorInfoContextKey]; + context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst); + return context; + } + + function isCustomComponent(tagName, props) { + return tagName.indexOf('-') >= 0 || props.is != null; + } + + /** + * Creates a new React class that is idempotent and capable of containing other + * React components. It accepts event listeners and DOM properties that are + * valid according to `DOMProperty`. + * + * - Event listeners: `onClick`, `onMouseDown`, etc. + * - DOM properties: `className`, `name`, `title`, etc. + * + * The `style` property functions differently from the DOM API. It accepts an + * object mapping of style properties to values. + * + * @constructor ReactDOMComponent + * @extends ReactMultiChild + */ + function ReactDOMComponent(tag) { + validateDangerousTag(tag); + this._tag = tag.toLowerCase(); + this._renderedChildren = null; + this._previousStyle = null; + this._previousStyleCopy = null; + this._rootNodeID = null; + this._wrapperState = null; + this._topLevelWrapper = null; + this._nodeWithLegacyProperties = null; + if (process.env.NODE_ENV !== 'production') { + this._unprocessedContextDev = null; + this._processedContextDev = null; + } + } + + ReactDOMComponent.displayName = 'ReactDOMComponent'; + + ReactDOMComponent.Mixin = { + + construct: function (element) { + this._currentElement = element; + }, + + /** + * Generates root tag markup then recurses. This method has side effects and + * is not idempotent. + * + * @internal + * @param {string} rootID The root DOM ID for this node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} context + * @return {string} The computed markup. + */ + mountComponent: function (rootID, transaction, context) { + this._rootNodeID = rootID; + + var props = this._currentElement.props; + + switch (this._tag) { + case 'iframe': + case 'img': + case 'form': + case 'video': + case 'audio': + this._wrapperState = { + listeners: null + }; + transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this); + break; + case 'button': + props = ReactDOMButton.getNativeProps(this, props, context); + break; + case 'input': + ReactDOMInput.mountWrapper(this, props, context); + props = ReactDOMInput.getNativeProps(this, props, context); + break; + case 'option': + ReactDOMOption.mountWrapper(this, props, context); + props = ReactDOMOption.getNativeProps(this, props, context); + break; + case 'select': + ReactDOMSelect.mountWrapper(this, props, context); + props = ReactDOMSelect.getNativeProps(this, props, context); + context = ReactDOMSelect.processChildContext(this, props, context); + break; + case 'textarea': + ReactDOMTextarea.mountWrapper(this, props, context); + props = ReactDOMTextarea.getNativeProps(this, props, context); + break; + } + + assertValidProps(this, props); + if (process.env.NODE_ENV !== 'production') { + if (context[validateDOMNesting.ancestorInfoContextKey]) { + validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]); + } + } + + if (process.env.NODE_ENV !== 'production') { + this._unprocessedContextDev = context; + this._processedContextDev = processChildContextDev(context, this); + context = this._processedContextDev; + } + + var mountImage; + if (transaction.useCreateElement) { + var ownerDocument = context[ReactMount.ownerDocumentContextKey]; + var el = ownerDocument.createElement(this._currentElement.type); + DOMPropertyOperations.setAttributeForID(el, this._rootNodeID); + // Populate node cache + ReactMount.getID(el); + this._updateDOMProperties({}, props, transaction, el); + this._createInitialChildren(transaction, props, context, el); + mountImage = el; + } else { + var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props); + var tagContent = this._createContentMarkup(transaction, props, context); + if (!tagContent && omittedCloseTags[this._tag]) { + mountImage = tagOpen + '/>'; + } else { + mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>'; + } + } + + switch (this._tag) { + case 'input': + transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this); + // falls through + case 'button': + case 'select': + case 'textarea': + if (props.autoFocus) { + transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this); + } + break; + } + + return mountImage; + }, + + /** + * Creates markup for the open tag and all attributes. + * + * This method has side effects because events get registered. + * + * Iterating over object properties is faster than iterating over arrays. + * @see http://jsperf.com/obj-vs-arr-iteration + * + * @private + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} props + * @return {string} Markup of opening tag. + */ + _createOpenTagMarkupAndPutListeners: function (transaction, props) { + var ret = '<' + this._currentElement.type; + + for (var propKey in props) { + if (!props.hasOwnProperty(propKey)) { + continue; + } + var propValue = props[propKey]; + if (propValue == null) { + continue; + } + if (registrationNameModules.hasOwnProperty(propKey)) { + if (propValue) { + enqueuePutListener(this._rootNodeID, propKey, propValue, transaction); + } + } else { + if (propKey === STYLE) { + if (propValue) { + if (process.env.NODE_ENV !== 'production') { + // See `_updateDOMProperties`. style block + this._previousStyle = propValue; + } + propValue = this._previousStyleCopy = assign({}, props.style); + } + propValue = CSSPropertyOperations.createMarkupForStyles(propValue); + } + var markup = null; + if (this._tag != null && isCustomComponent(this._tag, props)) { + if (propKey !== CHILDREN) { + markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue); + } + } else { + markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue); + } + if (markup) { + ret += ' ' + markup; + } + } + } + + // For static pages, no need to put React ID and checksum. Saves lots of + // bytes. + if (transaction.renderToStaticMarkup) { + return ret; + } + + var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID); + return ret + ' ' + markupForID; + }, + + /** + * Creates markup for the content between the tags. + * + * @private + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} props + * @param {object} context + * @return {string} Content markup. + */ + _createContentMarkup: function (transaction, props, context) { + var ret = ''; + + // Intentional use of != to avoid catching zero/false. + var innerHTML = props.dangerouslySetInnerHTML; + if (innerHTML != null) { + if (innerHTML.__html != null) { + ret = innerHTML.__html; + } + } else { + var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null; + var childrenToUse = contentToUse != null ? null : props.children; + if (contentToUse != null) { + // TODO: Validate that text is allowed as a child of this node + ret = escapeTextContentForBrowser(contentToUse); + } else if (childrenToUse != null) { + var mountImages = this.mountChildren(childrenToUse, transaction, context); + ret = mountImages.join(''); + } + } + if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') { + // text/html ignores the first character in these tags if it's a newline + // Prefer to break application/xml over text/html (for now) by adding + // a newline specifically to get eaten by the parser. (Alternately for + // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first + // \r is normalized out by HTMLTextAreaElement#value.) + // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre> + // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions> + // See: <http://www.w3.org/TR/html5/syntax.html#newlines> + // See: Parsing of "textarea" "listing" and "pre" elements + // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody> + return '\n' + ret; + } else { + return ret; + } + }, + + _createInitialChildren: function (transaction, props, context, el) { + // Intentional use of != to avoid catching zero/false. + var innerHTML = props.dangerouslySetInnerHTML; + if (innerHTML != null) { + if (innerHTML.__html != null) { + setInnerHTML(el, innerHTML.__html); + } + } else { + var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null; + var childrenToUse = contentToUse != null ? null : props.children; + if (contentToUse != null) { + // TODO: Validate that text is allowed as a child of this node + setTextContent(el, contentToUse); + } else if (childrenToUse != null) { + var mountImages = this.mountChildren(childrenToUse, transaction, context); + for (var i = 0; i < mountImages.length; i++) { + el.appendChild(mountImages[i]); + } + } + } + }, + + /** + * Receives a next element and updates the component. + * + * @internal + * @param {ReactElement} nextElement + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} context + */ + receiveComponent: function (nextElement, transaction, context) { + var prevElement = this._currentElement; + this._currentElement = nextElement; + this.updateComponent(transaction, prevElement, nextElement, context); + }, + + /** + * Updates a native DOM component after it has already been allocated and + * attached to the DOM. Reconciles the root DOM node, then recurses. + * + * @param {ReactReconcileTransaction} transaction + * @param {ReactElement} prevElement + * @param {ReactElement} nextElement + * @internal + * @overridable + */ + updateComponent: function (transaction, prevElement, nextElement, context) { + var lastProps = prevElement.props; + var nextProps = this._currentElement.props; + + switch (this._tag) { + case 'button': + lastProps = ReactDOMButton.getNativeProps(this, lastProps); + nextProps = ReactDOMButton.getNativeProps(this, nextProps); + break; + case 'input': + ReactDOMInput.updateWrapper(this); + lastProps = ReactDOMInput.getNativeProps(this, lastProps); + nextProps = ReactDOMInput.getNativeProps(this, nextProps); + break; + case 'option': + lastProps = ReactDOMOption.getNativeProps(this, lastProps); + nextProps = ReactDOMOption.getNativeProps(this, nextProps); + break; + case 'select': + lastProps = ReactDOMSelect.getNativeProps(this, lastProps); + nextProps = ReactDOMSelect.getNativeProps(this, nextProps); + break; + case 'textarea': + ReactDOMTextarea.updateWrapper(this); + lastProps = ReactDOMTextarea.getNativeProps(this, lastProps); + nextProps = ReactDOMTextarea.getNativeProps(this, nextProps); + break; + } + + if (process.env.NODE_ENV !== 'production') { + // If the context is reference-equal to the old one, pass down the same + // processed object so the update bailout in ReactReconciler behaves + // correctly (and identically in dev and prod). See #5005. + if (this._unprocessedContextDev !== context) { + this._unprocessedContextDev = context; + this._processedContextDev = processChildContextDev(context, this); + } + context = this._processedContextDev; + } + + assertValidProps(this, nextProps); + this._updateDOMProperties(lastProps, nextProps, transaction, null); + this._updateDOMChildren(lastProps, nextProps, transaction, context); + + if (!canDefineProperty && this._nodeWithLegacyProperties) { + this._nodeWithLegacyProperties.props = nextProps; + } + + if (this._tag === 'select') { + // <select> value update needs to occur after <option> children + // reconciliation + transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this); + } + }, + + /** + * Reconciles the properties by detecting differences in property values and + * updating the DOM as necessary. This function is probably the single most + * critical path for performance optimization. + * + * TODO: Benchmark whether checking for changed values in memory actually + * improves performance (especially statically positioned elements). + * TODO: Benchmark the effects of putting this at the top since 99% of props + * do not change for a given reconciliation. + * TODO: Benchmark areas that can be improved with caching. + * + * @private + * @param {object} lastProps + * @param {object} nextProps + * @param {ReactReconcileTransaction} transaction + * @param {?DOMElement} node + */ + _updateDOMProperties: function (lastProps, nextProps, transaction, node) { + var propKey; + var styleName; + var styleUpdates; + for (propKey in lastProps) { + if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) { + continue; + } + if (propKey === STYLE) { + var lastStyle = this._previousStyleCopy; + for (styleName in lastStyle) { + if (lastStyle.hasOwnProperty(styleName)) { + styleUpdates = styleUpdates || {}; + styleUpdates[styleName] = ''; + } + } + this._previousStyleCopy = null; + } else if (registrationNameModules.hasOwnProperty(propKey)) { + if (lastProps[propKey]) { + // Only call deleteListener if there was a listener previously or + // else willDeleteListener gets called when there wasn't actually a + // listener (e.g., onClick={null}) + deleteListener(this._rootNodeID, propKey); + } + } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + DOMPropertyOperations.deleteValueForProperty(node, propKey); + } + } + for (propKey in nextProps) { + var nextProp = nextProps[propKey]; + var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey]; + if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) { + continue; + } + if (propKey === STYLE) { + if (nextProp) { + if (process.env.NODE_ENV !== 'production') { + checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this); + this._previousStyle = nextProp; + } + nextProp = this._previousStyleCopy = assign({}, nextProp); + } else { + this._previousStyleCopy = null; + } + if (lastProp) { + // Unset styles on `lastProp` but not on `nextProp`. + for (styleName in lastProp) { + if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) { + styleUpdates = styleUpdates || {}; + styleUpdates[styleName] = ''; + } + } + // Update styles that changed since `lastProp`. + for (styleName in nextProp) { + if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) { + styleUpdates = styleUpdates || {}; + styleUpdates[styleName] = nextProp[styleName]; + } + } + } else { + // Relies on `updateStylesByID` not mutating `styleUpdates`. + styleUpdates = nextProp; + } + } else if (registrationNameModules.hasOwnProperty(propKey)) { + if (nextProp) { + enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction); + } else if (lastProp) { + deleteListener(this._rootNodeID, propKey); + } + } else if (isCustomComponent(this._tag, nextProps)) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + if (propKey === CHILDREN) { + nextProp = null; + } + DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp); + } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + // If we're updating to null or undefined, we should remove the property + // from the DOM node instead of inadvertantly setting to a string. This + // brings us in line with the same behavior we have on initial render. + if (nextProp != null) { + DOMPropertyOperations.setValueForProperty(node, propKey, nextProp); + } else { + DOMPropertyOperations.deleteValueForProperty(node, propKey); + } + } + } + if (styleUpdates) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + CSSPropertyOperations.setValueForStyles(node, styleUpdates); + } + }, + + /** + * Reconciles the children with the various properties that affect the + * children content. + * + * @param {object} lastProps + * @param {object} nextProps + * @param {ReactReconcileTransaction} transaction + * @param {object} context + */ + _updateDOMChildren: function (lastProps, nextProps, transaction, context) { + var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null; + var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null; + + var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html; + var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html; + + // Note the use of `!=` which checks for null or undefined. + var lastChildren = lastContent != null ? null : lastProps.children; + var nextChildren = nextContent != null ? null : nextProps.children; + + // If we're switching from children to content/html or vice versa, remove + // the old content + var lastHasContentOrHtml = lastContent != null || lastHtml != null; + var nextHasContentOrHtml = nextContent != null || nextHtml != null; + if (lastChildren != null && nextChildren == null) { + this.updateChildren(null, transaction, context); + } else if (lastHasContentOrHtml && !nextHasContentOrHtml) { + this.updateTextContent(''); + } + + if (nextContent != null) { + if (lastContent !== nextContent) { + this.updateTextContent('' + nextContent); + } + } else if (nextHtml != null) { + if (lastHtml !== nextHtml) { + this.updateMarkup('' + nextHtml); + } + } else if (nextChildren != null) { + this.updateChildren(nextChildren, transaction, context); + } + }, + + /** + * Destroys all event registrations for this instance. Does not remove from + * the DOM. That must be done by the parent. + * + * @internal + */ + unmountComponent: function () { + switch (this._tag) { + case 'iframe': + case 'img': + case 'form': + case 'video': + case 'audio': + var listeners = this._wrapperState.listeners; + if (listeners) { + for (var i = 0; i < listeners.length; i++) { + listeners[i].remove(); + } + } + break; + case 'input': + ReactDOMInput.unmountWrapper(this); + break; + case 'html': + case 'head': + case 'body': + /** + * Components like <html> <head> and <body> can't be removed or added + * easily in a cross-browser way, however it's valuable to be able to + * take advantage of React's reconciliation for styling and <title> + * management. So we just document it and throw in dangerous cases. + */ + true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined; + break; + } + + this.unmountChildren(); + ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID); + ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID); + this._rootNodeID = null; + this._wrapperState = null; + if (this._nodeWithLegacyProperties) { + var node = this._nodeWithLegacyProperties; + node._reactInternalComponent = null; + this._nodeWithLegacyProperties = null; + } + }, + + getPublicInstance: function () { + if (!this._nodeWithLegacyProperties) { + var node = ReactMount.getNode(this._rootNodeID); + + node._reactInternalComponent = this; + node.getDOMNode = legacyGetDOMNode; + node.isMounted = legacyIsMounted; + node.setState = legacySetStateEtc; + node.replaceState = legacySetStateEtc; + node.forceUpdate = legacySetStateEtc; + node.setProps = legacySetProps; + node.replaceProps = legacyReplaceProps; + + if (process.env.NODE_ENV !== 'production') { + if (canDefineProperty) { + Object.defineProperties(node, legacyPropsDescriptor); + } else { + // updateComponent will update this property on subsequent renders + node.props = this._currentElement.props; + } + } else { + // updateComponent will update this property on subsequent renders + node.props = this._currentElement.props; + } + + this._nodeWithLegacyProperties = node; + } + return this._nodeWithLegacyProperties; + } + + }; + + ReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', { + mountComponent: 'mountComponent', + updateComponent: 'updateComponent' + }); + + assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin); + + module.exports = ReactDOMComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 93 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AutoFocusUtils + * @typechecks static-only + */ + + 'use strict'; + + var ReactMount = __webpack_require__(27); + + var findDOMNode = __webpack_require__(90); + var focusNode = __webpack_require__(94); + + var Mixin = { + componentDidMount: function () { + if (this.props.autoFocus) { + focusNode(findDOMNode(this)); + } + } + }; + + var AutoFocusUtils = { + Mixin: Mixin, + + focusDOMComponent: function () { + focusNode(ReactMount.getNode(this._rootNodeID)); + } + }; + + module.exports = AutoFocusUtils; + +/***/ }, +/* 94 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule focusNode + */ + + 'use strict'; + + /** + * @param {DOMElement} node input/textarea to focus + */ + function focusNode(node) { + // IE8 can throw "Can't move focus to the control because it is invisible, + // not enabled, or of a type that does not accept the focus." for all kinds of + // reasons that are too expensive and fragile to test. + try { + node.focus(); + } catch (e) {} + } + + module.exports = focusNode; + +/***/ }, +/* 95 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule CSSPropertyOperations + * @typechecks static-only + */ + + 'use strict'; + + var CSSProperty = __webpack_require__(96); + var ExecutionEnvironment = __webpack_require__(8); + var ReactPerf = __webpack_require__(17); + + var camelizeStyleName = __webpack_require__(97); + var dangerousStyleValue = __webpack_require__(99); + var hyphenateStyleName = __webpack_require__(100); + var memoizeStringOnly = __webpack_require__(102); + var warning = __webpack_require__(24); + + var processStyleName = memoizeStringOnly(function (styleName) { + return hyphenateStyleName(styleName); + }); + + var hasShorthandPropertyBug = false; + var styleFloatAccessor = 'cssFloat'; + if (ExecutionEnvironment.canUseDOM) { + var tempStyle = document.createElement('div').style; + try { + // IE8 throws "Invalid argument." if resetting shorthand style properties. + tempStyle.font = ''; + } catch (e) { + hasShorthandPropertyBug = true; + } + // IE8 only supports accessing cssFloat (standard) as styleFloat + if (document.documentElement.style.cssFloat === undefined) { + styleFloatAccessor = 'styleFloat'; + } + } + + if (process.env.NODE_ENV !== 'production') { + // 'msTransform' is correct, but the other prefixes should be capitalized + var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/; + + // style values shouldn't contain a semicolon + var badStyleValueWithSemicolonPattern = /;\s*$/; + + var warnedStyleNames = {}; + var warnedStyleValues = {}; + + var warnHyphenatedStyleName = function (name) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined; + }; + + var warnBadVendoredStyleName = function (name) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined; + }; + + var warnStyleValueWithSemicolon = function (name, value) { + if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) { + return; + } + + warnedStyleValues[value] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon. ' + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined; + }; + + /** + * @param {string} name + * @param {*} value + */ + var warnValidStyle = function (name, value) { + if (name.indexOf('-') > -1) { + warnHyphenatedStyleName(name); + } else if (badVendoredStyleNamePattern.test(name)) { + warnBadVendoredStyleName(name); + } else if (badStyleValueWithSemicolonPattern.test(value)) { + warnStyleValueWithSemicolon(name, value); + } + }; + } + + /** + * Operations for dealing with CSS properties. + */ + var CSSPropertyOperations = { + + /** + * Serializes a mapping of style properties for use as inline styles: + * + * > createMarkupForStyles({width: '200px', height: 0}) + * "width:200px;height:0;" + * + * Undefined values are ignored so that declarative programming is easier. + * The result should be HTML-escaped before insertion into the DOM. + * + * @param {object} styles + * @return {?string} + */ + createMarkupForStyles: function (styles) { + var serialized = ''; + for (var styleName in styles) { + if (!styles.hasOwnProperty(styleName)) { + continue; + } + var styleValue = styles[styleName]; + if (process.env.NODE_ENV !== 'production') { + warnValidStyle(styleName, styleValue); + } + if (styleValue != null) { + serialized += processStyleName(styleName) + ':'; + serialized += dangerousStyleValue(styleName, styleValue) + ';'; + } + } + return serialized || null; + }, + + /** + * Sets the value for multiple styles on a node. If a value is specified as + * '' (empty string), the corresponding style property will be unset. + * + * @param {DOMElement} node + * @param {object} styles + */ + setValueForStyles: function (node, styles) { + var style = node.style; + for (var styleName in styles) { + if (!styles.hasOwnProperty(styleName)) { + continue; + } + if (process.env.NODE_ENV !== 'production') { + warnValidStyle(styleName, styles[styleName]); + } + var styleValue = dangerousStyleValue(styleName, styles[styleName]); + if (styleName === 'float') { + styleName = styleFloatAccessor; + } + if (styleValue) { + style[styleName] = styleValue; + } else { + var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName]; + if (expansion) { + // Shorthand property that IE8 won't like unsetting, so unset each + // component to placate it + for (var individualStyleName in expansion) { + style[individualStyleName] = ''; + } + } else { + style[styleName] = ''; + } + } + } + } + + }; + + ReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', { + setValueForStyles: 'setValueForStyles' + }); + + module.exports = CSSPropertyOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 96 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule CSSProperty + */ + + 'use strict'; + + /** + * CSS properties which accept numbers but are not in units of "px". + */ + var isUnitlessNumber = { + animationIterationCount: true, + boxFlex: true, + boxFlexGroup: true, + boxOrdinalGroup: true, + columnCount: true, + flex: true, + flexGrow: true, + flexPositive: true, + flexShrink: true, + flexNegative: true, + flexOrder: true, + fontWeight: true, + lineClamp: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + tabSize: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related properties + fillOpacity: true, + stopOpacity: true, + strokeDashoffset: true, + strokeOpacity: true, + strokeWidth: true + }; + + /** + * @param {string} prefix vendor-specific prefix, eg: Webkit + * @param {string} key style name, eg: transitionDuration + * @return {string} style name prefixed with `prefix`, properly camelCased, eg: + * WebkitTransitionDuration + */ + function prefixKey(prefix, key) { + return prefix + key.charAt(0).toUpperCase() + key.substring(1); + } + + /** + * Support style names that may come passed in prefixed by adding permutations + * of vendor prefixes. + */ + var prefixes = ['Webkit', 'ms', 'Moz', 'O']; + + // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an + // infinite loop, because it iterates over the newly added props too. + Object.keys(isUnitlessNumber).forEach(function (prop) { + prefixes.forEach(function (prefix) { + isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop]; + }); + }); + + /** + * Most style properties can be unset by doing .style[prop] = '' but IE8 + * doesn't like doing that with shorthand properties so for the properties that + * IE8 breaks on, which are listed here, we instead unset each of the + * individual properties. See http://bugs.jquery.com/ticket/12385. + * The 4-value 'clock' properties like margin, padding, border-width seem to + * behave without any problems. Curiously, list-style works too without any + * special prodding. + */ + var shorthandPropertyExpansions = { + background: { + backgroundAttachment: true, + backgroundColor: true, + backgroundImage: true, + backgroundPositionX: true, + backgroundPositionY: true, + backgroundRepeat: true + }, + backgroundPosition: { + backgroundPositionX: true, + backgroundPositionY: true + }, + border: { + borderWidth: true, + borderStyle: true, + borderColor: true + }, + borderBottom: { + borderBottomWidth: true, + borderBottomStyle: true, + borderBottomColor: true + }, + borderLeft: { + borderLeftWidth: true, + borderLeftStyle: true, + borderLeftColor: true + }, + borderRight: { + borderRightWidth: true, + borderRightStyle: true, + borderRightColor: true + }, + borderTop: { + borderTopWidth: true, + borderTopStyle: true, + borderTopColor: true + }, + font: { + fontStyle: true, + fontVariant: true, + fontWeight: true, + fontSize: true, + lineHeight: true, + fontFamily: true + }, + outline: { + outlineWidth: true, + outlineStyle: true, + outlineColor: true + } + }; + + var CSSProperty = { + isUnitlessNumber: isUnitlessNumber, + shorthandPropertyExpansions: shorthandPropertyExpansions + }; + + module.exports = CSSProperty; + +/***/ }, +/* 97 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule camelizeStyleName + * @typechecks + */ + + 'use strict'; + + var camelize = __webpack_require__(98); + + var msPattern = /^-ms-/; + + /** + * Camelcases a hyphenated CSS property name, for example: + * + * > camelizeStyleName('background-color') + * < "backgroundColor" + * > camelizeStyleName('-moz-transition') + * < "MozTransition" + * > camelizeStyleName('-ms-transition') + * < "msTransition" + * + * As Andi Smith suggests + * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix + * is converted to lowercase `ms`. + * + * @param {string} string + * @return {string} + */ + function camelizeStyleName(string) { + return camelize(string.replace(msPattern, 'ms-')); + } + + module.exports = camelizeStyleName; + +/***/ }, +/* 98 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule camelize + * @typechecks + */ + + "use strict"; + + var _hyphenPattern = /-(.)/g; + + /** + * Camelcases a hyphenated string, for example: + * + * > camelize('background-color') + * < "backgroundColor" + * + * @param {string} string + * @return {string} + */ + function camelize(string) { + return string.replace(_hyphenPattern, function (_, character) { + return character.toUpperCase(); + }); + } + + module.exports = camelize; + +/***/ }, +/* 99 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule dangerousStyleValue + * @typechecks static-only + */ + + 'use strict'; + + var CSSProperty = __webpack_require__(96); + + var isUnitlessNumber = CSSProperty.isUnitlessNumber; + + /** + * Convert a value into the proper css writable value. The style name `name` + * should be logical (no hyphens), as specified + * in `CSSProperty.isUnitlessNumber`. + * + * @param {string} name CSS property name such as `topMargin`. + * @param {*} value CSS property value such as `10px`. + * @return {string} Normalized style value with dimensions applied. + */ + function dangerousStyleValue(name, value) { + // Note that we've removed escapeTextForBrowser() calls here since the + // whole string will be escaped when the attribute is injected into + // the markup. If you provide unsafe user data here they can inject + // arbitrary CSS which may be problematic (I couldn't repro this): + // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet + // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ + // This is not an XSS hole but instead a potential CSS injection issue + // which has lead to a greater discussion about how we're going to + // trust URLs moving forward. See #2115901 + + var isEmpty = value == null || typeof value === 'boolean' || value === ''; + if (isEmpty) { + return ''; + } + + var isNonNumeric = isNaN(value); + if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) { + return '' + value; // cast to string + } + + if (typeof value === 'string') { + value = value.trim(); + } + return value + 'px'; + } + + module.exports = dangerousStyleValue; + +/***/ }, +/* 100 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule hyphenateStyleName + * @typechecks + */ + + 'use strict'; + + var hyphenate = __webpack_require__(101); + + var msPattern = /^ms-/; + + /** + * Hyphenates a camelcased CSS property name, for example: + * + * > hyphenateStyleName('backgroundColor') + * < "background-color" + * > hyphenateStyleName('MozTransition') + * < "-moz-transition" + * > hyphenateStyleName('msTransition') + * < "-ms-transition" + * + * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix + * is converted to `-ms-`. + * + * @param {string} string + * @return {string} + */ + function hyphenateStyleName(string) { + return hyphenate(string).replace(msPattern, '-ms-'); + } + + module.exports = hyphenateStyleName; + +/***/ }, +/* 101 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule hyphenate + * @typechecks + */ + + 'use strict'; + + var _uppercasePattern = /([A-Z])/g; + + /** + * Hyphenates a camelcased string, for example: + * + * > hyphenate('backgroundColor') + * < "background-color" + * + * For CSS style names, use `hyphenateStyleName` instead which works properly + * with all vendor prefixes, including `ms`. + * + * @param {string} string + * @return {string} + */ + function hyphenate(string) { + return string.replace(_uppercasePattern, '-$1').toLowerCase(); + } + + module.exports = hyphenate; + +/***/ }, +/* 102 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule memoizeStringOnly + * @typechecks static-only + */ + + 'use strict'; + + /** + * Memoizes the return value of a function that accepts one string argument. + * + * @param {function} callback + * @return {function} + */ + function memoizeStringOnly(callback) { + var cache = {}; + return function (string) { + if (!cache.hasOwnProperty(string)) { + cache[string] = callback.call(this, string); + } + return cache[string]; + }; + } + + module.exports = memoizeStringOnly; + +/***/ }, +/* 103 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMButton + */ + + 'use strict'; + + var mouseListenerNames = { + onClick: true, + onDoubleClick: true, + onMouseDown: true, + onMouseMove: true, + onMouseUp: true, + + onClickCapture: true, + onDoubleClickCapture: true, + onMouseDownCapture: true, + onMouseMoveCapture: true, + onMouseUpCapture: true + }; + + /** + * Implements a <button> native component that does not receive mouse events + * when `disabled` is set. + */ + var ReactDOMButton = { + getNativeProps: function (inst, props, context) { + if (!props.disabled) { + return props; + } + + // Copy the props, except the mouse listeners + var nativeProps = {}; + for (var key in props) { + if (props.hasOwnProperty(key) && !mouseListenerNames[key]) { + nativeProps[key] = props[key]; + } + } + + return nativeProps; + } + }; + + module.exports = ReactDOMButton; + +/***/ }, +/* 104 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMInput + */ + + 'use strict'; + + var ReactDOMIDOperations = __webpack_require__(26); + var LinkedValueUtils = __webpack_require__(105); + var ReactMount = __webpack_require__(27); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + var instancesByReactID = {}; + + function forceUpdateIfMounted() { + if (this._rootNodeID) { + // DOM component is still mounted; update + ReactDOMInput.updateWrapper(this); + } + } + + /** + * Implements an <input> native component that allows setting these optional + * props: `checked`, `value`, `defaultChecked`, and `defaultValue`. + * + * If `checked` or `value` are not supplied (or null/undefined), user actions + * that affect the checked state or value will trigger updates to the element. + * + * If they are supplied (and not null/undefined), the rendered element will not + * trigger updates to the element. Instead, the props must change in order for + * the rendered element to be updated. + * + * The rendered element will be initialized as unchecked (or `defaultChecked`) + * with an empty value (or `defaultValue`). + * + * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html + */ + var ReactDOMInput = { + getNativeProps: function (inst, props, context) { + var value = LinkedValueUtils.getValue(props); + var checked = LinkedValueUtils.getChecked(props); + + var nativeProps = assign({}, props, { + defaultChecked: undefined, + defaultValue: undefined, + value: value != null ? value : inst._wrapperState.initialValue, + checked: checked != null ? checked : inst._wrapperState.initialChecked, + onChange: inst._wrapperState.onChange + }); + + return nativeProps; + }, + + mountWrapper: function (inst, props) { + if (process.env.NODE_ENV !== 'production') { + LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner); + } + + var defaultValue = props.defaultValue; + inst._wrapperState = { + initialChecked: props.defaultChecked || false, + initialValue: defaultValue != null ? defaultValue : null, + onChange: _handleChange.bind(inst) + }; + }, + + mountReadyWrapper: function (inst) { + // Can't be in mountWrapper or else server rendering leaks. + instancesByReactID[inst._rootNodeID] = inst; + }, + + unmountWrapper: function (inst) { + delete instancesByReactID[inst._rootNodeID]; + }, + + updateWrapper: function (inst) { + var props = inst._currentElement.props; + + // TODO: Shouldn't this be getChecked(props)? + var checked = props.checked; + if (checked != null) { + ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false); + } + + var value = LinkedValueUtils.getValue(props); + if (value != null) { + // Cast `value` to a string to ensure the value is set correctly. While + // browsers typically do this as necessary, jsdom doesn't. + ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value); + } + } + }; + + function _handleChange(event) { + var props = this._currentElement.props; + + var returnValue = LinkedValueUtils.executeOnChange(props, event); + + // Here we use asap to wait until all updates have propagated, which + // is important when using controlled components within layers: + // https://github.com/facebook/react/issues/1698 + ReactUpdates.asap(forceUpdateIfMounted, this); + + var name = props.name; + if (props.type === 'radio' && name != null) { + var rootNode = ReactMount.getNode(this._rootNodeID); + var queryRoot = rootNode; + + while (queryRoot.parentNode) { + queryRoot = queryRoot.parentNode; + } + + // If `rootNode.form` was non-null, then we could try `form.elements`, + // but that sometimes behaves strangely in IE8. We could also try using + // `form.getElementsByName`, but that will only return direct children + // and won't include inputs that use the HTML5 `form=` attribute. Since + // the input might not even be in a form, let's just use the global + // `querySelectorAll` to ensure we don't miss anything. + var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]'); + + for (var i = 0; i < group.length; i++) { + var otherNode = group[i]; + if (otherNode === rootNode || otherNode.form !== rootNode.form) { + continue; + } + // This will throw if radio buttons rendered by different copies of React + // and the same name are rendered into the same form (same as #1939). + // That's probably okay; we don't support it just as we don't support + // mixing React with non-React. + var otherID = ReactMount.getID(otherNode); + !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined; + var otherInstance = instancesByReactID[otherID]; + !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined; + // If this is a controlled radio button group, forcing the input that + // was previously checked to update will cause it to be come re-checked + // as appropriate. + ReactUpdates.asap(forceUpdateIfMounted, otherInstance); + } + } + + return returnValue; + } + + module.exports = ReactDOMInput; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 105 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule LinkedValueUtils + * @typechecks static-only + */ + + 'use strict'; + + var ReactPropTypes = __webpack_require__(106); + var ReactPropTypeLocations = __webpack_require__(64); + + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + var hasReadOnlyValue = { + 'button': true, + 'checkbox': true, + 'image': true, + 'hidden': true, + 'radio': true, + 'reset': true, + 'submit': true + }; + + function _assertSingleLink(inputProps) { + !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(false) : undefined; + } + function _assertValueLink(inputProps) { + _assertSingleLink(inputProps); + !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(false) : undefined; + } + + function _assertCheckedLink(inputProps) { + _assertSingleLink(inputProps); + !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(false) : undefined; + } + + var propTypes = { + value: function (props, propName, componentName) { + if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) { + return null; + } + return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + }, + checked: function (props, propName, componentName) { + if (!props[propName] || props.onChange || props.readOnly || props.disabled) { + return null; + } + return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + }, + onChange: ReactPropTypes.func + }; + + var loggedTypeFailures = {}; + function getDeclarationErrorAddendum(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + /** + * Provide a linked `value` attribute for controlled forms. You should not use + * this outside of the ReactDOM controlled form components. + */ + var LinkedValueUtils = { + checkPropTypes: function (tagName, props, owner) { + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop); + } + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var addendum = getDeclarationErrorAddendum(owner); + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined; + } + } + }, + + /** + * @param {object} inputProps Props for form component + * @return {*} current value of the input either from value prop or link. + */ + getValue: function (inputProps) { + if (inputProps.valueLink) { + _assertValueLink(inputProps); + return inputProps.valueLink.value; + } + return inputProps.value; + }, + + /** + * @param {object} inputProps Props for form component + * @return {*} current checked status of the input either from checked prop + * or link. + */ + getChecked: function (inputProps) { + if (inputProps.checkedLink) { + _assertCheckedLink(inputProps); + return inputProps.checkedLink.value; + } + return inputProps.checked; + }, + + /** + * @param {object} inputProps Props for form component + * @param {SyntheticEvent} event change event to handle + */ + executeOnChange: function (inputProps, event) { + if (inputProps.valueLink) { + _assertValueLink(inputProps); + return inputProps.valueLink.requestChange(event.target.value); + } else if (inputProps.checkedLink) { + _assertCheckedLink(inputProps); + return inputProps.checkedLink.requestChange(event.target.checked); + } else if (inputProps.onChange) { + return inputProps.onChange.call(undefined, event); + } + } + }; + + module.exports = LinkedValueUtils; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 106 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPropTypes + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactPropTypeLocationNames = __webpack_require__(65); + + var emptyFunction = __webpack_require__(14); + var getIteratorFn = __webpack_require__(107); + + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + var ANONYMOUS = '<<anonymous>>'; + + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker + }; + + function createChainableTypeChecker(validate) { + function checkType(isRequired, props, propName, componentName, location, propFullName) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + if (props[propName] == null) { + var locationName = ReactPropTypeLocationNames[location]; + if (isRequired) { + return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + var locationName = ReactPropTypeLocationNames[location]; + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunction.thatReturns(null)); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var locationName = ReactPropTypeLocationNames[location]; + var propType = getPropType(propValue); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']'); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!ReactElement.isValidElement(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var locationName = ReactPropTypeLocationNames[location]; + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOf, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (propValue === expectedValues[i]) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + var valuesString = JSON.stringify(expectedValues); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (propValue.hasOwnProperty(key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOfType, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName) == null) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || ReactElement.isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + // Equivalent of `typeof` but with special handling for array and regexp. + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + return propType; + } + + // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + function getPreciseType(propValue) { + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + // Returns class name of the object, if any. + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return '<<anonymous>>'; + } + return propValue.constructor.name; + } + + module.exports = ReactPropTypes; + +/***/ }, +/* 107 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getIteratorFn + * @typechecks static-only + */ + + 'use strict'; + + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + module.exports = getIteratorFn; + +/***/ }, +/* 108 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMOption + */ + + 'use strict'; + + var ReactChildren = __webpack_require__(109); + var ReactDOMSelect = __webpack_require__(111); + + var assign = __webpack_require__(38); + var warning = __webpack_require__(24); + + var valueContextKey = ReactDOMSelect.valueContextKey; + + /** + * Implements an <option> native component that warns when `selected` is set. + */ + var ReactDOMOption = { + mountWrapper: function (inst, props, context) { + // TODO (yungsters): Remove support for `selected` in <option>. + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined; + } + + // Look up whether this option is 'selected' via context + var selectValue = context[valueContextKey]; + + // If context key is null (e.g., no specified value or after initial mount) + // or missing (e.g., for <datalist>), we don't change props.selected + var selected = null; + if (selectValue != null) { + selected = false; + if (Array.isArray(selectValue)) { + // multiple + for (var i = 0; i < selectValue.length; i++) { + if ('' + selectValue[i] === '' + props.value) { + selected = true; + break; + } + } + } else { + selected = '' + selectValue === '' + props.value; + } + } + + inst._wrapperState = { selected: selected }; + }, + + getNativeProps: function (inst, props, context) { + var nativeProps = assign({ selected: undefined, children: undefined }, props); + + // Read state only from initial mount because <select> updates value + // manually; we need the initial state only for server rendering + if (inst._wrapperState.selected != null) { + nativeProps.selected = inst._wrapperState.selected; + } + + var content = ''; + + // Flatten children and warn if they aren't strings or numbers; + // invalid types are ignored. + ReactChildren.forEach(props.children, function (child) { + if (child == null) { + return; + } + if (typeof child === 'string' || typeof child === 'number') { + content += child; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined; + } + }); + + nativeProps.children = content; + return nativeProps; + } + + }; + + module.exports = ReactDOMOption; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 109 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactChildren + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + var ReactElement = __webpack_require__(41); + + var emptyFunction = __webpack_require__(14); + var traverseAllChildren = __webpack_require__(110); + + var twoArgumentPooler = PooledClass.twoArgumentPooler; + var fourArgumentPooler = PooledClass.fourArgumentPooler; + + var userProvidedKeyEscapeRegex = /\/(?!\/)/g; + function escapeUserProvidedKey(text) { + return ('' + text).replace(userProvidedKeyEscapeRegex, '//'); + } + + /** + * PooledClass representing the bookkeeping associated with performing a child + * traversal. Allows avoiding binding callbacks. + * + * @constructor ForEachBookKeeping + * @param {!function} forEachFunction Function to perform traversal with. + * @param {?*} forEachContext Context to perform context with. + */ + function ForEachBookKeeping(forEachFunction, forEachContext) { + this.func = forEachFunction; + this.context = forEachContext; + this.count = 0; + } + ForEachBookKeeping.prototype.destructor = function () { + this.func = null; + this.context = null; + this.count = 0; + }; + PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler); + + function forEachSingleChild(bookKeeping, child, name) { + var func = bookKeeping.func; + var context = bookKeeping.context; + + func.call(context, child, bookKeeping.count++); + } + + /** + * Iterates through children that are typically specified as `props.children`. + * + * The provided forEachFunc(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc + * @param {*} forEachContext Context for forEachContext. + */ + function forEachChildren(children, forEachFunc, forEachContext) { + if (children == null) { + return children; + } + var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext); + traverseAllChildren(children, forEachSingleChild, traverseContext); + ForEachBookKeeping.release(traverseContext); + } + + /** + * PooledClass representing the bookkeeping associated with performing a child + * mapping. Allows avoiding binding callbacks. + * + * @constructor MapBookKeeping + * @param {!*} mapResult Object containing the ordered map of results. + * @param {!function} mapFunction Function to perform mapping with. + * @param {?*} mapContext Context to perform mapping with. + */ + function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) { + this.result = mapResult; + this.keyPrefix = keyPrefix; + this.func = mapFunction; + this.context = mapContext; + this.count = 0; + } + MapBookKeeping.prototype.destructor = function () { + this.result = null; + this.keyPrefix = null; + this.func = null; + this.context = null; + this.count = 0; + }; + PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler); + + function mapSingleChildIntoContext(bookKeeping, child, childKey) { + var result = bookKeeping.result; + var keyPrefix = bookKeeping.keyPrefix; + var func = bookKeeping.func; + var context = bookKeeping.context; + + var mappedChild = func.call(context, child, bookKeeping.count++); + if (Array.isArray(mappedChild)) { + mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument); + } else if (mappedChild != null) { + if (ReactElement.isValidElement(mappedChild)) { + mappedChild = ReactElement.cloneAndReplaceKey(mappedChild, + // Keep both the (mapped) and old keys if they differ, just as + // traverseAllChildren used to do for objects as children + keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey); + } + result.push(mappedChild); + } + } + + function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) { + var escapedPrefix = ''; + if (prefix != null) { + escapedPrefix = escapeUserProvidedKey(prefix) + '/'; + } + var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context); + traverseAllChildren(children, mapSingleChildIntoContext, traverseContext); + MapBookKeeping.release(traverseContext); + } + + /** + * Maps children that are typically specified as `props.children`. + * + * The provided mapFunction(child, key, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} func The map function. + * @param {*} context Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ + function mapChildren(children, func, context) { + if (children == null) { + return children; + } + var result = []; + mapIntoWithKeyPrefixInternal(children, result, null, func, context); + return result; + } + + function forEachSingleChildDummy(traverseContext, child, name) { + return null; + } + + /** + * Count the number of children that are typically specified as + * `props.children`. + * + * @param {?*} children Children tree container. + * @return {number} The number of children. + */ + function countChildren(children, context) { + return traverseAllChildren(children, forEachSingleChildDummy, null); + } + + /** + * Flatten a children object (typically specified as `props.children`) and + * return an array with appropriately re-keyed children. + */ + function toArray(children) { + var result = []; + mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument); + return result; + } + + var ReactChildren = { + forEach: forEachChildren, + map: mapChildren, + mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal, + count: countChildren, + toArray: toArray + }; + + module.exports = ReactChildren; + +/***/ }, +/* 110 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule traverseAllChildren + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactElement = __webpack_require__(41); + var ReactInstanceHandles = __webpack_require__(44); + + var getIteratorFn = __webpack_require__(107); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + var SEPARATOR = ReactInstanceHandles.SEPARATOR; + var SUBSEPARATOR = ':'; + + /** + * TODO: Test that a single child and an array with one item have the same key + * pattern. + */ + + var userProvidedKeyEscaperLookup = { + '=': '=0', + '.': '=1', + ':': '=2' + }; + + var userProvidedKeyEscapeRegex = /[=.:]/g; + + var didWarnAboutMaps = false; + + function userProvidedKeyEscaper(match) { + return userProvidedKeyEscaperLookup[match]; + } + + /** + * Generate a key string that identifies a component within a set. + * + * @param {*} component A component that could contain a manual key. + * @param {number} index Index that is used if a manual key is not provided. + * @return {string} + */ + function getComponentKey(component, index) { + if (component && component.key != null) { + // Explicit key + return wrapUserProvidedKey(component.key); + } + // Implicit key determined by the index in the set + return index.toString(36); + } + + /** + * Escape a component key so that it is safe to use in a reactid. + * + * @param {*} text Component key to be escaped. + * @return {string} An escaped string. + */ + function escapeUserProvidedKey(text) { + return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper); + } + + /** + * Wrap a `key` value explicitly provided by the user to distinguish it from + * implicitly-generated keys generated by a component's index in its parent. + * + * @param {string} key Value of a user-provided `key` attribute + * @return {string} + */ + function wrapUserProvidedKey(key) { + return '$' + escapeUserProvidedKey(key); + } + + /** + * @param {?*} children Children tree container. + * @param {!string} nameSoFar Name of the key path so far. + * @param {!function} callback Callback to invoke with each child found. + * @param {?*} traverseContext Used to pass information throughout the traversal + * process. + * @return {!number} The number of children in this subtree. + */ + function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) { + var type = typeof children; + + if (type === 'undefined' || type === 'boolean') { + // All of the above are perceived as null. + children = null; + } + + if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) { + callback(traverseContext, children, + // If it's the only child, treat the name as if it was wrapped in an array + // so that it's consistent if the number of children grows. + nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar); + return 1; + } + + var child; + var nextName; + var subtreeCount = 0; // Count of children found in the current subtree. + var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; + + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + child = children[i]; + nextName = nextNamePrefix + getComponentKey(child, i); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } else { + var iteratorFn = getIteratorFn(children); + if (iteratorFn) { + var iterator = iteratorFn.call(children); + var step; + if (iteratorFn !== children.entries) { + var ii = 0; + while (!(step = iterator.next()).done) { + child = step.value; + nextName = nextNamePrefix + getComponentKey(child, ii++); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } else { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined; + didWarnAboutMaps = true; + } + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + child = entry[1]; + nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } + } + } else if (type === 'object') { + var addendum = ''; + if (process.env.NODE_ENV !== 'production') { + addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.'; + if (children._isReactElement) { + addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.'; + } + if (ReactCurrentOwner.current) { + var name = ReactCurrentOwner.current.getName(); + if (name) { + addendum += ' Check the render method of `' + name + '`.'; + } + } + } + var childrenString = String(children); + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined; + } + } + + return subtreeCount; + } + + /** + * Traverses children that are typically specified as `props.children`, but + * might also be specified through attributes: + * + * - `traverseAllChildren(this.props.children, ...)` + * - `traverseAllChildren(this.props.leftPanelChildren, ...)` + * + * The `traverseContext` is an optional argument that is passed through the + * entire traversal. It can be used to store accumulations or anything else that + * the callback might find relevant. + * + * @param {?*} children Children tree object. + * @param {!function} callback To invoke upon traversing each child. + * @param {?*} traverseContext Context for traversal. + * @return {!number} The number of children in this subtree. + */ + function traverseAllChildren(children, callback, traverseContext) { + if (children == null) { + return 0; + } + + return traverseAllChildrenImpl(children, '', callback, traverseContext); + } + + module.exports = traverseAllChildren; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 111 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMSelect + */ + + 'use strict'; + + var LinkedValueUtils = __webpack_require__(105); + var ReactMount = __webpack_require__(27); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var warning = __webpack_require__(24); + + var valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2); + + function updateOptionsIfPendingUpdateAndMounted() { + if (this._rootNodeID && this._wrapperState.pendingUpdate) { + this._wrapperState.pendingUpdate = false; + + var props = this._currentElement.props; + var value = LinkedValueUtils.getValue(props); + + if (value != null) { + updateOptions(this, props, value); + } + } + } + + function getDeclarationErrorAddendum(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + var valuePropNames = ['value', 'defaultValue']; + + /** + * Validation function for `value` and `defaultValue`. + * @private + */ + function checkSelectPropTypes(inst, props) { + var owner = inst._currentElement._owner; + LinkedValueUtils.checkPropTypes('select', props, owner); + + for (var i = 0; i < valuePropNames.length; i++) { + var propName = valuePropNames[i]; + if (props[propName] == null) { + continue; + } + if (props.multiple) { + process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined; + } else { + process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined; + } + } + } + + /** + * @param {ReactDOMComponent} inst + * @param {boolean} multiple + * @param {*} propValue A stringable (with `multiple`, a list of stringables). + * @private + */ + function updateOptions(inst, multiple, propValue) { + var selectedValue, i; + var options = ReactMount.getNode(inst._rootNodeID).options; + + if (multiple) { + selectedValue = {}; + for (i = 0; i < propValue.length; i++) { + selectedValue['' + propValue[i]] = true; + } + for (i = 0; i < options.length; i++) { + var selected = selectedValue.hasOwnProperty(options[i].value); + if (options[i].selected !== selected) { + options[i].selected = selected; + } + } + } else { + // Do not set `select.value` as exact behavior isn't consistent across all + // browsers for all cases. + selectedValue = '' + propValue; + for (i = 0; i < options.length; i++) { + if (options[i].value === selectedValue) { + options[i].selected = true; + return; + } + } + if (options.length) { + options[0].selected = true; + } + } + } + + /** + * Implements a <select> native component that allows optionally setting the + * props `value` and `defaultValue`. If `multiple` is false, the prop must be a + * stringable. If `multiple` is true, the prop must be an array of stringables. + * + * If `value` is not supplied (or null/undefined), user actions that change the + * selected option will trigger updates to the rendered options. + * + * If it is supplied (and not null/undefined), the rendered options will not + * update in response to user actions. Instead, the `value` prop must change in + * order for the rendered options to update. + * + * If `defaultValue` is provided, any options with the supplied values will be + * selected. + */ + var ReactDOMSelect = { + valueContextKey: valueContextKey, + + getNativeProps: function (inst, props, context) { + return assign({}, props, { + onChange: inst._wrapperState.onChange, + value: undefined + }); + }, + + mountWrapper: function (inst, props) { + if (process.env.NODE_ENV !== 'production') { + checkSelectPropTypes(inst, props); + } + + var value = LinkedValueUtils.getValue(props); + inst._wrapperState = { + pendingUpdate: false, + initialValue: value != null ? value : props.defaultValue, + onChange: _handleChange.bind(inst), + wasMultiple: Boolean(props.multiple) + }; + }, + + processChildContext: function (inst, props, context) { + // Pass down initial value so initial generated markup has correct + // `selected` attributes + var childContext = assign({}, context); + childContext[valueContextKey] = inst._wrapperState.initialValue; + return childContext; + }, + + postUpdateWrapper: function (inst) { + var props = inst._currentElement.props; + + // After the initial mount, we control selected-ness manually so don't pass + // the context value down + inst._wrapperState.initialValue = undefined; + + var wasMultiple = inst._wrapperState.wasMultiple; + inst._wrapperState.wasMultiple = Boolean(props.multiple); + + var value = LinkedValueUtils.getValue(props); + if (value != null) { + inst._wrapperState.pendingUpdate = false; + updateOptions(inst, Boolean(props.multiple), value); + } else if (wasMultiple !== Boolean(props.multiple)) { + // For simplicity, reapply `defaultValue` if `multiple` is toggled. + if (props.defaultValue != null) { + updateOptions(inst, Boolean(props.multiple), props.defaultValue); + } else { + // Revert the select back to its default unselected state. + updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : ''); + } + } + } + }; + + function _handleChange(event) { + var props = this._currentElement.props; + var returnValue = LinkedValueUtils.executeOnChange(props, event); + + this._wrapperState.pendingUpdate = true; + ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this); + return returnValue; + } + + module.exports = ReactDOMSelect; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 112 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMTextarea + */ + + 'use strict'; + + var LinkedValueUtils = __webpack_require__(105); + var ReactDOMIDOperations = __webpack_require__(26); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + function forceUpdateIfMounted() { + if (this._rootNodeID) { + // DOM component is still mounted; update + ReactDOMTextarea.updateWrapper(this); + } + } + + /** + * Implements a <textarea> native component that allows setting `value`, and + * `defaultValue`. This differs from the traditional DOM API because value is + * usually set as PCDATA children. + * + * If `value` is not supplied (or null/undefined), user actions that affect the + * value will trigger updates to the element. + * + * If `value` is supplied (and not null/undefined), the rendered element will + * not trigger updates to the element. Instead, the `value` prop must change in + * order for the rendered element to be updated. + * + * The rendered element will be initialized with an empty value, the prop + * `defaultValue` if specified, or the children content (deprecated). + */ + var ReactDOMTextarea = { + getNativeProps: function (inst, props, context) { + !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined; + + // Always set children to the same thing. In IE9, the selection range will + // get reset if `textContent` is mutated. + var nativeProps = assign({}, props, { + defaultValue: undefined, + value: undefined, + children: inst._wrapperState.initialValue, + onChange: inst._wrapperState.onChange + }); + + return nativeProps; + }, + + mountWrapper: function (inst, props) { + if (process.env.NODE_ENV !== 'production') { + LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner); + } + + var defaultValue = props.defaultValue; + // TODO (yungsters): Remove support for children content in <textarea>. + var children = props.children; + if (children != null) { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined; + } + !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined; + if (Array.isArray(children)) { + !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined; + children = children[0]; + } + + defaultValue = '' + children; + } + if (defaultValue == null) { + defaultValue = ''; + } + var value = LinkedValueUtils.getValue(props); + + inst._wrapperState = { + // We save the initial value so that `ReactDOMComponent` doesn't update + // `textContent` (unnecessary since we update value). + // The initial value can be a boolean or object so that's why it's + // forced to be a string. + initialValue: '' + (value != null ? value : defaultValue), + onChange: _handleChange.bind(inst) + }; + }, + + updateWrapper: function (inst) { + var props = inst._currentElement.props; + var value = LinkedValueUtils.getValue(props); + if (value != null) { + // Cast `value` to a string to ensure the value is set correctly. While + // browsers typically do this as necessary, jsdom doesn't. + ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value); + } + } + }; + + function _handleChange(event) { + var props = this._currentElement.props; + var returnValue = LinkedValueUtils.executeOnChange(props, event); + ReactUpdates.asap(forceUpdateIfMounted, this); + return returnValue; + } + + module.exports = ReactDOMTextarea; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 113 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMultiChild + * @typechecks static-only + */ + + 'use strict'; + + var ReactComponentEnvironment = __webpack_require__(63); + var ReactMultiChildUpdateTypes = __webpack_require__(15); + + var ReactCurrentOwner = __webpack_require__(4); + var ReactReconciler = __webpack_require__(49); + var ReactChildReconciler = __webpack_require__(114); + + var flattenChildren = __webpack_require__(115); + + /** + * Updating children of a component may trigger recursive updates. The depth is + * used to batch recursive updates to render markup more efficiently. + * + * @type {number} + * @private + */ + var updateDepth = 0; + + /** + * Queue of update configuration objects. + * + * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`. + * + * @type {array<object>} + * @private + */ + var updateQueue = []; + + /** + * Queue of markup to be rendered. + * + * @type {array<string>} + * @private + */ + var markupQueue = []; + + /** + * Enqueues markup to be rendered and inserted at a supplied index. + * + * @param {string} parentID ID of the parent component. + * @param {string} markup Markup that renders into an element. + * @param {number} toIndex Destination index. + * @private + */ + function enqueueInsertMarkup(parentID, markup, toIndex) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.INSERT_MARKUP, + markupIndex: markupQueue.push(markup) - 1, + content: null, + fromIndex: null, + toIndex: toIndex + }); + } + + /** + * Enqueues moving an existing element to another index. + * + * @param {string} parentID ID of the parent component. + * @param {number} fromIndex Source index of the existing element. + * @param {number} toIndex Destination index of the element. + * @private + */ + function enqueueMove(parentID, fromIndex, toIndex) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.MOVE_EXISTING, + markupIndex: null, + content: null, + fromIndex: fromIndex, + toIndex: toIndex + }); + } + + /** + * Enqueues removing an element at an index. + * + * @param {string} parentID ID of the parent component. + * @param {number} fromIndex Index of the element to remove. + * @private + */ + function enqueueRemove(parentID, fromIndex) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.REMOVE_NODE, + markupIndex: null, + content: null, + fromIndex: fromIndex, + toIndex: null + }); + } + + /** + * Enqueues setting the markup of a node. + * + * @param {string} parentID ID of the parent component. + * @param {string} markup Markup that renders into an element. + * @private + */ + function enqueueSetMarkup(parentID, markup) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.SET_MARKUP, + markupIndex: null, + content: markup, + fromIndex: null, + toIndex: null + }); + } + + /** + * Enqueues setting the text content. + * + * @param {string} parentID ID of the parent component. + * @param {string} textContent Text content to set. + * @private + */ + function enqueueTextContent(parentID, textContent) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.TEXT_CONTENT, + markupIndex: null, + content: textContent, + fromIndex: null, + toIndex: null + }); + } + + /** + * Processes any enqueued updates. + * + * @private + */ + function processQueue() { + if (updateQueue.length) { + ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue); + clearQueue(); + } + } + + /** + * Clears any enqueued updates. + * + * @private + */ + function clearQueue() { + updateQueue.length = 0; + markupQueue.length = 0; + } + + /** + * ReactMultiChild are capable of reconciling multiple children. + * + * @class ReactMultiChild + * @internal + */ + var ReactMultiChild = { + + /** + * Provides common functionality for components that must reconcile multiple + * children. This is used by `ReactDOMComponent` to mount, update, and + * unmount child components. + * + * @lends {ReactMultiChild.prototype} + */ + Mixin: { + + _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) { + if (process.env.NODE_ENV !== 'production') { + if (this._currentElement) { + try { + ReactCurrentOwner.current = this._currentElement._owner; + return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context); + } finally { + ReactCurrentOwner.current = null; + } + } + } + return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context); + }, + + _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) { + var nextChildren; + if (process.env.NODE_ENV !== 'production') { + if (this._currentElement) { + try { + ReactCurrentOwner.current = this._currentElement._owner; + nextChildren = flattenChildren(nextNestedChildrenElements); + } finally { + ReactCurrentOwner.current = null; + } + return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context); + } + } + nextChildren = flattenChildren(nextNestedChildrenElements); + return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context); + }, + + /** + * Generates a "mount image" for each of the supplied children. In the case + * of `ReactDOMComponent`, a mount image is a string of markup. + * + * @param {?object} nestedChildren Nested child maps. + * @return {array} An array of mounted representations. + * @internal + */ + mountChildren: function (nestedChildren, transaction, context) { + var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context); + this._renderedChildren = children; + var mountImages = []; + var index = 0; + for (var name in children) { + if (children.hasOwnProperty(name)) { + var child = children[name]; + // Inlined for performance, see `ReactInstanceHandles.createReactID`. + var rootID = this._rootNodeID + name; + var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context); + child._mountIndex = index++; + mountImages.push(mountImage); + } + } + return mountImages; + }, + + /** + * Replaces any rendered children with a text content string. + * + * @param {string} nextContent String of content. + * @internal + */ + updateTextContent: function (nextContent) { + updateDepth++; + var errorThrown = true; + try { + var prevChildren = this._renderedChildren; + // Remove any rendered children. + ReactChildReconciler.unmountChildren(prevChildren); + // TODO: The setTextContent operation should be enough + for (var name in prevChildren) { + if (prevChildren.hasOwnProperty(name)) { + this._unmountChild(prevChildren[name]); + } + } + // Set new text content. + this.setTextContent(nextContent); + errorThrown = false; + } finally { + updateDepth--; + if (!updateDepth) { + if (errorThrown) { + clearQueue(); + } else { + processQueue(); + } + } + } + }, + + /** + * Replaces any rendered children with a markup string. + * + * @param {string} nextMarkup String of markup. + * @internal + */ + updateMarkup: function (nextMarkup) { + updateDepth++; + var errorThrown = true; + try { + var prevChildren = this._renderedChildren; + // Remove any rendered children. + ReactChildReconciler.unmountChildren(prevChildren); + for (var name in prevChildren) { + if (prevChildren.hasOwnProperty(name)) { + this._unmountChildByName(prevChildren[name], name); + } + } + this.setMarkup(nextMarkup); + errorThrown = false; + } finally { + updateDepth--; + if (!updateDepth) { + if (errorThrown) { + clearQueue(); + } else { + processQueue(); + } + } + } + }, + + /** + * Updates the rendered children with new children. + * + * @param {?object} nextNestedChildrenElements Nested child element maps. + * @param {ReactReconcileTransaction} transaction + * @internal + */ + updateChildren: function (nextNestedChildrenElements, transaction, context) { + updateDepth++; + var errorThrown = true; + try { + this._updateChildren(nextNestedChildrenElements, transaction, context); + errorThrown = false; + } finally { + updateDepth--; + if (!updateDepth) { + if (errorThrown) { + clearQueue(); + } else { + processQueue(); + } + } + } + }, + + /** + * Improve performance by isolating this hot code path from the try/catch + * block in `updateChildren`. + * + * @param {?object} nextNestedChildrenElements Nested child element maps. + * @param {ReactReconcileTransaction} transaction + * @final + * @protected + */ + _updateChildren: function (nextNestedChildrenElements, transaction, context) { + var prevChildren = this._renderedChildren; + var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context); + this._renderedChildren = nextChildren; + if (!nextChildren && !prevChildren) { + return; + } + var name; + // `nextIndex` will increment for each child in `nextChildren`, but + // `lastIndex` will be the last index visited in `prevChildren`. + var lastIndex = 0; + var nextIndex = 0; + for (name in nextChildren) { + if (!nextChildren.hasOwnProperty(name)) { + continue; + } + var prevChild = prevChildren && prevChildren[name]; + var nextChild = nextChildren[name]; + if (prevChild === nextChild) { + this.moveChild(prevChild, nextIndex, lastIndex); + lastIndex = Math.max(prevChild._mountIndex, lastIndex); + prevChild._mountIndex = nextIndex; + } else { + if (prevChild) { + // Update `lastIndex` before `_mountIndex` gets unset by unmounting. + lastIndex = Math.max(prevChild._mountIndex, lastIndex); + this._unmountChild(prevChild); + } + // The child must be instantiated before it's mounted. + this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context); + } + nextIndex++; + } + // Remove children that are no longer present. + for (name in prevChildren) { + if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) { + this._unmountChild(prevChildren[name]); + } + } + }, + + /** + * Unmounts all rendered children. This should be used to clean up children + * when this component is unmounted. + * + * @internal + */ + unmountChildren: function () { + var renderedChildren = this._renderedChildren; + ReactChildReconciler.unmountChildren(renderedChildren); + this._renderedChildren = null; + }, + + /** + * Moves a child component to the supplied index. + * + * @param {ReactComponent} child Component to move. + * @param {number} toIndex Destination index of the element. + * @param {number} lastIndex Last index visited of the siblings of `child`. + * @protected + */ + moveChild: function (child, toIndex, lastIndex) { + // If the index of `child` is less than `lastIndex`, then it needs to + // be moved. Otherwise, we do not need to move it because a child will be + // inserted or moved before `child`. + if (child._mountIndex < lastIndex) { + enqueueMove(this._rootNodeID, child._mountIndex, toIndex); + } + }, + + /** + * Creates a child component. + * + * @param {ReactComponent} child Component to create. + * @param {string} mountImage Markup to insert. + * @protected + */ + createChild: function (child, mountImage) { + enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex); + }, + + /** + * Removes a child component. + * + * @param {ReactComponent} child Child to remove. + * @protected + */ + removeChild: function (child) { + enqueueRemove(this._rootNodeID, child._mountIndex); + }, + + /** + * Sets this text content string. + * + * @param {string} textContent Text content to set. + * @protected + */ + setTextContent: function (textContent) { + enqueueTextContent(this._rootNodeID, textContent); + }, + + /** + * Sets this markup string. + * + * @param {string} markup Markup to set. + * @protected + */ + setMarkup: function (markup) { + enqueueSetMarkup(this._rootNodeID, markup); + }, + + /** + * Mounts a child with the supplied name. + * + * NOTE: This is part of `updateChildren` and is here for readability. + * + * @param {ReactComponent} child Component to mount. + * @param {string} name Name of the child. + * @param {number} index Index at which to insert the child. + * @param {ReactReconcileTransaction} transaction + * @private + */ + _mountChildByNameAtIndex: function (child, name, index, transaction, context) { + // Inlined for performance, see `ReactInstanceHandles.createReactID`. + var rootID = this._rootNodeID + name; + var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context); + child._mountIndex = index; + this.createChild(child, mountImage); + }, + + /** + * Unmounts a rendered child. + * + * NOTE: This is part of `updateChildren` and is here for readability. + * + * @param {ReactComponent} child Component to unmount. + * @private + */ + _unmountChild: function (child) { + this.removeChild(child); + child._mountIndex = null; + } + + } + + }; + + module.exports = ReactMultiChild; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 114 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactChildReconciler + * @typechecks static-only + */ + + 'use strict'; + + var ReactReconciler = __webpack_require__(49); + + var instantiateReactComponent = __webpack_require__(61); + var shouldUpdateReactComponent = __webpack_require__(66); + var traverseAllChildren = __webpack_require__(110); + var warning = __webpack_require__(24); + + function instantiateChild(childInstances, child, name) { + // We found a component instance. + var keyUnique = childInstances[name] === undefined; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined; + } + if (child != null && keyUnique) { + childInstances[name] = instantiateReactComponent(child, null); + } + } + + /** + * ReactChildReconciler provides helpers for initializing or updating a set of + * children. Its output is suitable for passing it onto ReactMultiChild which + * does diffed reordering and insertion. + */ + var ReactChildReconciler = { + /** + * Generates a "mount image" for each of the supplied children. In the case + * of `ReactDOMComponent`, a mount image is a string of markup. + * + * @param {?object} nestedChildNodes Nested child maps. + * @return {?object} A set of child instances. + * @internal + */ + instantiateChildren: function (nestedChildNodes, transaction, context) { + if (nestedChildNodes == null) { + return null; + } + var childInstances = {}; + traverseAllChildren(nestedChildNodes, instantiateChild, childInstances); + return childInstances; + }, + + /** + * Updates the rendered children and returns a new set of children. + * + * @param {?object} prevChildren Previously initialized set of children. + * @param {?object} nextChildren Flat child element maps. + * @param {ReactReconcileTransaction} transaction + * @param {object} context + * @return {?object} A new set of child instances. + * @internal + */ + updateChildren: function (prevChildren, nextChildren, transaction, context) { + // We currently don't have a way to track moves here but if we use iterators + // instead of for..in we can zip the iterators and check if an item has + // moved. + // TODO: If nothing has changed, return the prevChildren object so that we + // can quickly bailout if nothing has changed. + if (!nextChildren && !prevChildren) { + return null; + } + var name; + for (name in nextChildren) { + if (!nextChildren.hasOwnProperty(name)) { + continue; + } + var prevChild = prevChildren && prevChildren[name]; + var prevElement = prevChild && prevChild._currentElement; + var nextElement = nextChildren[name]; + if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) { + ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context); + nextChildren[name] = prevChild; + } else { + if (prevChild) { + ReactReconciler.unmountComponent(prevChild, name); + } + // The child must be instantiated before it's mounted. + var nextChildInstance = instantiateReactComponent(nextElement, null); + nextChildren[name] = nextChildInstance; + } + } + // Unmount children that are no longer present. + for (name in prevChildren) { + if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) { + ReactReconciler.unmountComponent(prevChildren[name]); + } + } + return nextChildren; + }, + + /** + * Unmounts all rendered children. This should be used to clean up children + * when this component is unmounted. + * + * @param {?object} renderedChildren Previously initialized set of children. + * @internal + */ + unmountChildren: function (renderedChildren) { + for (var name in renderedChildren) { + if (renderedChildren.hasOwnProperty(name)) { + var renderedChild = renderedChildren[name]; + ReactReconciler.unmountComponent(renderedChild); + } + } + } + + }; + + module.exports = ReactChildReconciler; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 115 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule flattenChildren + */ + + 'use strict'; + + var traverseAllChildren = __webpack_require__(110); + var warning = __webpack_require__(24); + + /** + * @param {function} traverseContext Context passed through traversal. + * @param {?ReactComponent} child React child component. + * @param {!string} name String name of key path to child. + */ + function flattenSingleChildIntoContext(traverseContext, child, name) { + // We found a component instance. + var result = traverseContext; + var keyUnique = result[name] === undefined; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined; + } + if (keyUnique && child != null) { + result[name] = child; + } + } + + /** + * Flattens children that are typically specified as `props.children`. Any null + * children will not be included in the resulting object. + * @return {!object} flattened children keyed by name. + */ + function flattenChildren(children) { + if (children == null) { + return children; + } + var result = {}; + traverseAllChildren(children, flattenSingleChildIntoContext, result); + return result; + } + + module.exports = flattenChildren; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 116 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule shallowEqual + * @typechecks + * + */ + + 'use strict'; + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + /** + * Performs equality by iterating through keys on an object and returning false + * when any key has values which are not strictly equal between the arguments. + * Returns true when the values of all keys are strictly equal. + */ + function shallowEqual(objA, objB) { + if (objA === objB) { + return true; + } + + if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { + return false; + } + + var keysA = Object.keys(objA); + var keysB = Object.keys(objB); + + if (keysA.length !== keysB.length) { + return false; + } + + // Test for A's keys different from B. + var bHasOwnProperty = hasOwnProperty.bind(objB); + for (var i = 0; i < keysA.length; i++) { + if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) { + return false; + } + } + + return true; + } + + module.exports = shallowEqual; + +/***/ }, +/* 117 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEventListener + * @typechecks static-only + */ + + 'use strict'; + + var EventListener = __webpack_require__(118); + var ExecutionEnvironment = __webpack_require__(8); + var PooledClass = __webpack_require__(55); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMount = __webpack_require__(27); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var getEventTarget = __webpack_require__(80); + var getUnboundedScrollPosition = __webpack_require__(119); + + var DOCUMENT_FRAGMENT_NODE_TYPE = 11; + + /** + * Finds the parent React component of `node`. + * + * @param {*} node + * @return {?DOMEventTarget} Parent container, or `null` if the specified node + * is not nested. + */ + function findParent(node) { + // TODO: It may be a good idea to cache this to prevent unnecessary DOM + // traversal, but caching is difficult to do correctly without using a + // mutation observer to listen for all DOM changes. + var nodeID = ReactMount.getID(node); + var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID); + var container = ReactMount.findReactContainerForID(rootID); + var parent = ReactMount.getFirstReactDOM(container); + return parent; + } + + // Used to store ancestor hierarchy in top level callback + function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) { + this.topLevelType = topLevelType; + this.nativeEvent = nativeEvent; + this.ancestors = []; + } + assign(TopLevelCallbackBookKeeping.prototype, { + destructor: function () { + this.topLevelType = null; + this.nativeEvent = null; + this.ancestors.length = 0; + } + }); + PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler); + + function handleTopLevelImpl(bookKeeping) { + // TODO: Re-enable event.path handling + // + // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) { + // // New browsers have a path attribute on native events + // handleTopLevelWithPath(bookKeeping); + // } else { + // // Legacy browsers don't have a path attribute on native events + // handleTopLevelWithoutPath(bookKeeping); + // } + + void handleTopLevelWithPath; // temporarily unused + handleTopLevelWithoutPath(bookKeeping); + } + + // Legacy browsers don't have a path attribute on native events + function handleTopLevelWithoutPath(bookKeeping) { + var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window; + + // Loop through the hierarchy, in case there's any nested components. + // It's important that we build the array of ancestors before calling any + // event handlers, because event handlers can modify the DOM, leading to + // inconsistencies with ReactMount's node cache. See #1105. + var ancestor = topLevelTarget; + while (ancestor) { + bookKeeping.ancestors.push(ancestor); + ancestor = findParent(ancestor); + } + + for (var i = 0; i < bookKeeping.ancestors.length; i++) { + topLevelTarget = bookKeeping.ancestors[i]; + var topLevelTargetID = ReactMount.getID(topLevelTarget) || ''; + ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent)); + } + } + + // New browsers have a path attribute on native events + function handleTopLevelWithPath(bookKeeping) { + var path = bookKeeping.nativeEvent.path; + var currentNativeTarget = path[0]; + var eventsFired = 0; + for (var i = 0; i < path.length; i++) { + var currentPathElement = path[i]; + if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) { + currentNativeTarget = path[i + 1]; + } + // TODO: slow + var reactParent = ReactMount.getFirstReactDOM(currentPathElement); + if (reactParent === currentPathElement) { + var currentPathElementID = ReactMount.getID(currentPathElement); + var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID); + bookKeeping.ancestors.push(currentPathElement); + + var topLevelTargetID = ReactMount.getID(currentPathElement) || ''; + eventsFired++; + ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget); + + // Jump to the root of this React render tree + while (currentPathElementID !== newRootID) { + i++; + currentPathElement = path[i]; + currentPathElementID = ReactMount.getID(currentPathElement); + } + } + } + if (eventsFired === 0) { + ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent)); + } + } + + function scrollValueMonitor(cb) { + var scrollPosition = getUnboundedScrollPosition(window); + cb(scrollPosition); + } + + var ReactEventListener = { + _enabled: true, + _handleTopLevel: null, + + WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null, + + setHandleTopLevel: function (handleTopLevel) { + ReactEventListener._handleTopLevel = handleTopLevel; + }, + + setEnabled: function (enabled) { + ReactEventListener._enabled = !!enabled; + }, + + isEnabled: function () { + return ReactEventListener._enabled; + }, + + /** + * Traps top-level events by using event bubbling. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {object} handle Element on which to attach listener. + * @return {?object} An object with a remove function which will forcefully + * remove the listener. + * @internal + */ + trapBubbledEvent: function (topLevelType, handlerBaseName, handle) { + var element = handle; + if (!element) { + return null; + } + return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType)); + }, + + /** + * Traps a top-level event by using event capturing. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {object} handle Element on which to attach listener. + * @return {?object} An object with a remove function which will forcefully + * remove the listener. + * @internal + */ + trapCapturedEvent: function (topLevelType, handlerBaseName, handle) { + var element = handle; + if (!element) { + return null; + } + return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType)); + }, + + monitorScrollValue: function (refresh) { + var callback = scrollValueMonitor.bind(null, refresh); + EventListener.listen(window, 'scroll', callback); + }, + + dispatchEvent: function (topLevelType, nativeEvent) { + if (!ReactEventListener._enabled) { + return; + } + + var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent); + try { + // Event queue being processed in the same cycle allows + // `preventDefault`. + ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping); + } finally { + TopLevelCallbackBookKeeping.release(bookKeeping); + } + } + }; + + module.exports = ReactEventListener; + +/***/ }, +/* 118 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, 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. + * + * @providesModule EventListener + * @typechecks + */ + + 'use strict'; + + var emptyFunction = __webpack_require__(14); + + /** + * Upstream version of event listener. Does not take into account specific + * nature of platform. + */ + var EventListener = { + /** + * Listen to DOM events during the bubble phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + listen: function (target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, false); + return { + remove: function () { + target.removeEventListener(eventType, callback, false); + } + }; + } else if (target.attachEvent) { + target.attachEvent('on' + eventType, callback); + return { + remove: function () { + target.detachEvent('on' + eventType, callback); + } + }; + } + }, + + /** + * Listen to DOM events during the capture phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + capture: function (target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, true); + return { + remove: function () { + target.removeEventListener(eventType, callback, true); + } + }; + } else { + if (process.env.NODE_ENV !== 'production') { + console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.'); + } + return { + remove: emptyFunction + }; + } + }, + + registerDefault: function () {} + }; + + module.exports = EventListener; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 119 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getUnboundedScrollPosition + * @typechecks + */ + + 'use strict'; + + /** + * Gets the scroll position of the supplied element or window. + * + * The return values are unbounded, unlike `getScrollPosition`. This means they + * may be negative or exceed the element boundaries (which is possible using + * inertial scrolling). + * + * @param {DOMWindow|DOMElement} scrollable + * @return {object} Map with `x` and `y` keys. + */ + function getUnboundedScrollPosition(scrollable) { + if (scrollable === window) { + return { + x: window.pageXOffset || document.documentElement.scrollLeft, + y: window.pageYOffset || document.documentElement.scrollTop + }; + } + return { + x: scrollable.scrollLeft, + y: scrollable.scrollTop + }; + } + + module.exports = getUnboundedScrollPosition; + +/***/ }, +/* 120 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInjection + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var EventPluginHub = __webpack_require__(30); + var ReactComponentEnvironment = __webpack_require__(63); + var ReactClass = __webpack_require__(121); + var ReactEmptyComponent = __webpack_require__(67); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactNativeComponent = __webpack_require__(68); + var ReactPerf = __webpack_require__(17); + var ReactRootIndex = __webpack_require__(45); + var ReactUpdates = __webpack_require__(53); + + var ReactInjection = { + Component: ReactComponentEnvironment.injection, + Class: ReactClass.injection, + DOMProperty: DOMProperty.injection, + EmptyComponent: ReactEmptyComponent.injection, + EventPluginHub: EventPluginHub.injection, + EventEmitter: ReactBrowserEventEmitter.injection, + NativeComponent: ReactNativeComponent.injection, + Perf: ReactPerf.injection, + RootIndex: ReactRootIndex.injection, + Updates: ReactUpdates.injection + }; + + module.exports = ReactInjection; + +/***/ }, +/* 121 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactClass + */ + + 'use strict'; + + var ReactComponent = __webpack_require__(122); + var ReactElement = __webpack_require__(41); + var ReactPropTypeLocations = __webpack_require__(64); + var ReactPropTypeLocationNames = __webpack_require__(65); + var ReactNoopUpdateQueue = __webpack_require__(123); + + var assign = __webpack_require__(38); + var emptyObject = __webpack_require__(57); + var invariant = __webpack_require__(12); + var keyMirror = __webpack_require__(16); + var keyOf = __webpack_require__(78); + var warning = __webpack_require__(24); + + var MIXINS_KEY = keyOf({ mixins: null }); + + /** + * Policies that describe methods in `ReactClassInterface`. + */ + var SpecPolicy = keyMirror({ + /** + * These methods may be defined only once by the class specification or mixin. + */ + DEFINE_ONCE: null, + /** + * These methods may be defined by both the class specification and mixins. + * Subsequent definitions will be chained. These methods must return void. + */ + DEFINE_MANY: null, + /** + * These methods are overriding the base class. + */ + OVERRIDE_BASE: null, + /** + * These methods are similar to DEFINE_MANY, except we assume they return + * objects. We try to merge the keys of the return values of all the mixed in + * functions. If there is a key conflict we throw. + */ + DEFINE_MANY_MERGED: null + }); + + var injectedMixins = []; + + var warnedSetProps = false; + function warnSetProps() { + if (!warnedSetProps) { + warnedSetProps = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined; + } + } + + /** + * Composite components are higher-level components that compose other composite + * or native components. + * + * To create a new type of `ReactClass`, pass a specification of + * your new class to `React.createClass`. The only requirement of your class + * specification is that you implement a `render` method. + * + * var MyComponent = React.createClass({ + * render: function() { + * return <div>Hello World</div>; + * } + * }); + * + * The class specification supports a specific protocol of methods that have + * special meaning (e.g. `render`). See `ReactClassInterface` for + * more the comprehensive protocol. Any other properties and methods in the + * class specification will be available on the prototype. + * + * @interface ReactClassInterface + * @internal + */ + var ReactClassInterface = { + + /** + * An array of Mixin objects to include when defining your component. + * + * @type {array} + * @optional + */ + mixins: SpecPolicy.DEFINE_MANY, + + /** + * An object containing properties and methods that should be defined on + * the component's constructor instead of its prototype (static methods). + * + * @type {object} + * @optional + */ + statics: SpecPolicy.DEFINE_MANY, + + /** + * Definition of prop types for this component. + * + * @type {object} + * @optional + */ + propTypes: SpecPolicy.DEFINE_MANY, + + /** + * Definition of context types for this component. + * + * @type {object} + * @optional + */ + contextTypes: SpecPolicy.DEFINE_MANY, + + /** + * Definition of context types this component sets for its children. + * + * @type {object} + * @optional + */ + childContextTypes: SpecPolicy.DEFINE_MANY, + + // ==== Definition methods ==== + + /** + * Invoked when the component is mounted. Values in the mapping will be set on + * `this.props` if that prop is not specified (i.e. using an `in` check). + * + * This method is invoked before `getInitialState` and therefore cannot rely + * on `this.state` or use `this.setState`. + * + * @return {object} + * @optional + */ + getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED, + + /** + * Invoked once before the component is mounted. The return value will be used + * as the initial value of `this.state`. + * + * getInitialState: function() { + * return { + * isOn: false, + * fooBaz: new BazFoo() + * } + * } + * + * @return {object} + * @optional + */ + getInitialState: SpecPolicy.DEFINE_MANY_MERGED, + + /** + * @return {object} + * @optional + */ + getChildContext: SpecPolicy.DEFINE_MANY_MERGED, + + /** + * Uses props from `this.props` and state from `this.state` to render the + * structure of the component. + * + * No guarantees are made about when or how often this method is invoked, so + * it must not have side effects. + * + * render: function() { + * var name = this.props.name; + * return <div>Hello, {name}!</div>; + * } + * + * @return {ReactComponent} + * @nosideeffects + * @required + */ + render: SpecPolicy.DEFINE_ONCE, + + // ==== Delegate methods ==== + + /** + * Invoked when the component is initially created and about to be mounted. + * This may have side effects, but any external subscriptions or data created + * by this method must be cleaned up in `componentWillUnmount`. + * + * @optional + */ + componentWillMount: SpecPolicy.DEFINE_MANY, + + /** + * Invoked when the component has been mounted and has a DOM representation. + * However, there is no guarantee that the DOM node is in the document. + * + * Use this as an opportunity to operate on the DOM when the component has + * been mounted (initialized and rendered) for the first time. + * + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidMount: SpecPolicy.DEFINE_MANY, + + /** + * Invoked before the component receives new props. + * + * Use this as an opportunity to react to a prop transition by updating the + * state using `this.setState`. Current props are accessed via `this.props`. + * + * componentWillReceiveProps: function(nextProps, nextContext) { + * this.setState({ + * likesIncreasing: nextProps.likeCount > this.props.likeCount + * }); + * } + * + * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop + * transition may cause a state change, but the opposite is not true. If you + * need it, you are probably looking for `componentWillUpdate`. + * + * @param {object} nextProps + * @optional + */ + componentWillReceiveProps: SpecPolicy.DEFINE_MANY, + + /** + * Invoked while deciding if the component should be updated as a result of + * receiving new props, state and/or context. + * + * Use this as an opportunity to `return false` when you're certain that the + * transition to the new props/state/context will not require a component + * update. + * + * shouldComponentUpdate: function(nextProps, nextState, nextContext) { + * return !equal(nextProps, this.props) || + * !equal(nextState, this.state) || + * !equal(nextContext, this.context); + * } + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @return {boolean} True if the component should update. + * @optional + */ + shouldComponentUpdate: SpecPolicy.DEFINE_ONCE, + + /** + * Invoked when the component is about to update due to a transition from + * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` + * and `nextContext`. + * + * Use this as an opportunity to perform preparation before an update occurs. + * + * NOTE: You **cannot** use `this.setState()` in this method. + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @param {ReactReconcileTransaction} transaction + * @optional + */ + componentWillUpdate: SpecPolicy.DEFINE_MANY, + + /** + * Invoked when the component's DOM representation has been updated. + * + * Use this as an opportunity to operate on the DOM when the component has + * been updated. + * + * @param {object} prevProps + * @param {?object} prevState + * @param {?object} prevContext + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidUpdate: SpecPolicy.DEFINE_MANY, + + /** + * Invoked when the component is about to be removed from its parent and have + * its DOM representation destroyed. + * + * Use this as an opportunity to deallocate any external resources. + * + * NOTE: There is no `componentDidUnmount` since your component will have been + * destroyed by that point. + * + * @optional + */ + componentWillUnmount: SpecPolicy.DEFINE_MANY, + + // ==== Advanced methods ==== + + /** + * Updates the component's currently mounted DOM representation. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @internal + * @overridable + */ + updateComponent: SpecPolicy.OVERRIDE_BASE + + }; + + /** + * Mapping from class specification keys to special processing functions. + * + * Although these are declared like instance properties in the specification + * when defining classes using `React.createClass`, they are actually static + * and are accessible on the constructor instead of the prototype. Despite + * being static, they must be defined outside of the "statics" key under + * which all other static methods are defined. + */ + var RESERVED_SPEC_KEYS = { + displayName: function (Constructor, displayName) { + Constructor.displayName = displayName; + }, + mixins: function (Constructor, mixins) { + if (mixins) { + for (var i = 0; i < mixins.length; i++) { + mixSpecIntoComponent(Constructor, mixins[i]); + } + } + }, + childContextTypes: function (Constructor, childContextTypes) { + if (process.env.NODE_ENV !== 'production') { + validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext); + } + Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes); + }, + contextTypes: function (Constructor, contextTypes) { + if (process.env.NODE_ENV !== 'production') { + validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context); + } + Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes); + }, + /** + * Special case getDefaultProps which should move into statics but requires + * automatic merging. + */ + getDefaultProps: function (Constructor, getDefaultProps) { + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps); + } else { + Constructor.getDefaultProps = getDefaultProps; + } + }, + propTypes: function (Constructor, propTypes) { + if (process.env.NODE_ENV !== 'production') { + validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop); + } + Constructor.propTypes = assign({}, Constructor.propTypes, propTypes); + }, + statics: function (Constructor, statics) { + mixStaticSpecIntoComponent(Constructor, statics); + }, + autobind: function () {} }; + + // noop + function validateTypeDef(Constructor, typeDef, location) { + for (var propName in typeDef) { + if (typeDef.hasOwnProperty(propName)) { + // use a warning instead of an invariant so components + // don't show up in prod but not in __DEV__ + process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined; + } + } + } + + function validateMethodOverride(proto, name) { + var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null; + + // Disallow overriding of base class methods unless explicitly allowed. + if (ReactClassMixin.hasOwnProperty(name)) { + !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined; + } + + // Disallow defining methods more than once unless explicitly allowed. + if (proto.hasOwnProperty(name)) { + !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined; + } + } + + /** + * Mixin helper which handles policy validation and reserved + * specification keys when building React classses. + */ + function mixSpecIntoComponent(Constructor, spec) { + if (!spec) { + return; + } + + !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined; + !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined; + + var proto = Constructor.prototype; + + // By handling mixins before any other properties, we ensure the same + // chaining order is applied to methods with DEFINE_MANY policy, whether + // mixins are listed before or after these methods in the spec. + if (spec.hasOwnProperty(MIXINS_KEY)) { + RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); + } + + for (var name in spec) { + if (!spec.hasOwnProperty(name)) { + continue; + } + + if (name === MIXINS_KEY) { + // We have already handled mixins in a special case above. + continue; + } + + var property = spec[name]; + validateMethodOverride(proto, name); + + if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { + RESERVED_SPEC_KEYS[name](Constructor, property); + } else { + // Setup methods on prototype: + // The following member methods should not be automatically bound: + // 1. Expected ReactClass methods (in the "interface"). + // 2. Overridden methods (that were mixed in). + var isReactClassMethod = ReactClassInterface.hasOwnProperty(name); + var isAlreadyDefined = proto.hasOwnProperty(name); + var isFunction = typeof property === 'function'; + var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false; + + if (shouldAutoBind) { + if (!proto.__reactAutoBindMap) { + proto.__reactAutoBindMap = {}; + } + proto.__reactAutoBindMap[name] = property; + proto[name] = property; + } else { + if (isAlreadyDefined) { + var specPolicy = ReactClassInterface[name]; + + // These cases should already be caught by validateMethodOverride. + !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined; + + // For methods which are defined more than once, call the existing + // methods before calling the new property, merging if appropriate. + if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) { + proto[name] = createMergedResultFunction(proto[name], property); + } else if (specPolicy === SpecPolicy.DEFINE_MANY) { + proto[name] = createChainedFunction(proto[name], property); + } + } else { + proto[name] = property; + if (process.env.NODE_ENV !== 'production') { + // Add verbose displayName to the function, which helps when looking + // at profiling tools. + if (typeof property === 'function' && spec.displayName) { + proto[name].displayName = spec.displayName + '_' + name; + } + } + } + } + } + } + } + + function mixStaticSpecIntoComponent(Constructor, statics) { + if (!statics) { + return; + } + for (var name in statics) { + var property = statics[name]; + if (!statics.hasOwnProperty(name)) { + continue; + } + + var isReserved = (name in RESERVED_SPEC_KEYS); + !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined; + + var isInherited = (name in Constructor); + !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined; + Constructor[name] = property; + } + } + + /** + * Merge two objects, but throw if both contain the same key. + * + * @param {object} one The first object, which is mutated. + * @param {object} two The second object + * @return {object} one after it has been mutated to contain everything in two. + */ + function mergeIntoWithNoDuplicateKeys(one, two) { + !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined; + + for (var key in two) { + if (two.hasOwnProperty(key)) { + !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined; + one[key] = two[key]; + } + } + return one; + } + + /** + * Creates a function that invokes two functions and merges their return values. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + function createMergedResultFunction(one, two) { + return function mergedResult() { + var a = one.apply(this, arguments); + var b = two.apply(this, arguments); + if (a == null) { + return b; + } else if (b == null) { + return a; + } + var c = {}; + mergeIntoWithNoDuplicateKeys(c, a); + mergeIntoWithNoDuplicateKeys(c, b); + return c; + }; + } + + /** + * Creates a function that invokes two functions and ignores their return vales. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + function createChainedFunction(one, two) { + return function chainedFunction() { + one.apply(this, arguments); + two.apply(this, arguments); + }; + } + + /** + * Binds a method to the component. + * + * @param {object} component Component whose method is going to be bound. + * @param {function} method Method to be bound. + * @return {function} The bound method. + */ + function bindAutoBindMethod(component, method) { + var boundMethod = method.bind(component); + if (process.env.NODE_ENV !== 'production') { + boundMethod.__reactBoundContext = component; + boundMethod.__reactBoundMethod = method; + boundMethod.__reactBoundArguments = null; + var componentName = component.constructor.displayName; + var _bind = boundMethod.bind; + /* eslint-disable block-scoped-var, no-undef */ + boundMethod.bind = function (newThis) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // User is trying to bind() an autobound method; we effectively will + // ignore the value of "this" that the user is trying to use, so + // let's warn. + if (newThis !== component && newThis !== null) { + process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined; + } else if (!args.length) { + process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined; + return boundMethod; + } + var reboundMethod = _bind.apply(boundMethod, arguments); + reboundMethod.__reactBoundContext = component; + reboundMethod.__reactBoundMethod = method; + reboundMethod.__reactBoundArguments = args; + return reboundMethod; + /* eslint-enable */ + }; + } + return boundMethod; + } + + /** + * Binds all auto-bound methods in a component. + * + * @param {object} component Component whose method is going to be bound. + */ + function bindAutoBindMethods(component) { + for (var autoBindKey in component.__reactAutoBindMap) { + if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) { + var method = component.__reactAutoBindMap[autoBindKey]; + component[autoBindKey] = bindAutoBindMethod(component, method); + } + } + } + + /** + * Add more to the ReactClass base class. These are all legacy features and + * therefore not already part of the modern ReactComponent. + */ + var ReactClassMixin = { + + /** + * TODO: This will be deprecated because state should always keep a consistent + * type signature and the only use case for this, is to avoid that. + */ + replaceState: function (newState, callback) { + this.updater.enqueueReplaceState(this, newState); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }, + + /** + * Checks whether or not this composite component is mounted. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function () { + return this.updater.isMounted(this); + }, + + /** + * Sets a subset of the props. + * + * @param {object} partialProps Subset of the next props. + * @param {?function} callback Called after props are updated. + * @final + * @public + * @deprecated + */ + setProps: function (partialProps, callback) { + if (process.env.NODE_ENV !== 'production') { + warnSetProps(); + } + this.updater.enqueueSetProps(this, partialProps); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }, + + /** + * Replace all the props. + * + * @param {object} newProps Subset of the next props. + * @param {?function} callback Called after props are updated. + * @final + * @public + * @deprecated + */ + replaceProps: function (newProps, callback) { + if (process.env.NODE_ENV !== 'production') { + warnSetProps(); + } + this.updater.enqueueReplaceProps(this, newProps); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + } + }; + + var ReactClassComponent = function () {}; + assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin); + + /** + * Module for creating composite components. + * + * @class ReactClass + */ + var ReactClass = { + + /** + * Creates a composite component class given a class specification. + * + * @param {object} spec Class specification (which must define `render`). + * @return {function} Component constructor function. + * @public + */ + createClass: function (spec) { + var Constructor = function (props, context, updater) { + // This constructor is overridden by mocks. The argument is used + // by mocks to assert on what gets mounted. + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined; + } + + // Wire up auto-binding + if (this.__reactAutoBindMap) { + bindAutoBindMethods(this); + } + + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + + this.state = null; + + // ReactClasses doesn't have constructors. Instead, they use the + // getInitialState and componentWillMount methods for initialization. + + var initialState = this.getInitialState ? this.getInitialState() : null; + if (process.env.NODE_ENV !== 'production') { + // We allow auto-mocks to proceed as if they're returning null. + if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + initialState = null; + } + } + !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined; + + this.state = initialState; + }; + Constructor.prototype = new ReactClassComponent(); + Constructor.prototype.constructor = Constructor; + + injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor)); + + mixSpecIntoComponent(Constructor, spec); + + // Initialize the defaultProps property after all mixins have been merged. + if (Constructor.getDefaultProps) { + Constructor.defaultProps = Constructor.getDefaultProps(); + } + + if (process.env.NODE_ENV !== 'production') { + // This is a tag to indicate that the use of these method names is ok, + // since it's used with createClass. If it's not, then it's likely a + // mistake so we'll warn you to use the static property, property + // initializer or constructor respectively. + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps.isReactClassApproved = {}; + } + if (Constructor.prototype.getInitialState) { + Constructor.prototype.getInitialState.isReactClassApproved = {}; + } + } + + !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined; + } + + // Reduce time spent doing lookups by setting these on the prototype. + for (var methodName in ReactClassInterface) { + if (!Constructor.prototype[methodName]) { + Constructor.prototype[methodName] = null; + } + } + + return Constructor; + }, + + injection: { + injectMixin: function (mixin) { + injectedMixins.push(mixin); + } + } + + }; + + module.exports = ReactClass; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 122 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponent + */ + + 'use strict'; + + var ReactNoopUpdateQueue = __webpack_require__(123); + + var canDefineProperty = __webpack_require__(42); + var emptyObject = __webpack_require__(57); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Base class helpers for the updating state of a component. + */ + function ReactComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + // We initialize the default updater but the real one gets injected by the + // renderer. + this.updater = updater || ReactNoopUpdateQueue; + } + + ReactComponent.prototype.isReactComponent = {}; + + /** + * Sets a subset of the state. Always use this to mutate + * state. You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * There is no guarantee that calls to `setState` will run synchronously, + * as they may eventually be batched together. You can provide an optional + * callback that will be executed when the call to setState is actually + * completed. + * + * When a function is provided to setState, it will be called at some point in + * the future (not synchronously). It will be called with the up to date + * component arguments (state, props, context). These values can be different + * from this.* because your function may be called after receiveProps but before + * shouldComponentUpdate, and this new state, props, and context will not yet be + * assigned to this. + * + * @param {object|function} partialState Next partial state or function to + * produce next partial state to be merged with current state. + * @param {?function} callback Called after state is updated. + * @final + * @protected + */ + ReactComponent.prototype.setState = function (partialState, callback) { + !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined; + } + this.updater.enqueueSetState(this, partialState); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }; + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {?function} callback Called after update is complete. + * @final + * @protected + */ + ReactComponent.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }; + + /** + * Deprecated APIs. These APIs used to exist on classic React classes but since + * we would like to deprecate them, we're not going to move them over to this + * modern base class. Instead, we define a getter that warns if it's accessed. + */ + if (process.env.NODE_ENV !== 'production') { + var deprecatedAPIs = { + getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'], + isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], + replaceProps: ['replaceProps', 'Instead, call render again at the top level.'], + replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'], + setProps: ['setProps', 'Instead, call render again at the top level.'] + }; + var defineDeprecationWarning = function (methodName, info) { + if (canDefineProperty) { + Object.defineProperty(ReactComponent.prototype, methodName, { + get: function () { + process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined; + return undefined; + } + }); + } + }; + for (var fnName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(fnName)) { + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + } + } + } + + module.exports = ReactComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 123 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactNoopUpdateQueue + */ + + 'use strict'; + + var warning = __webpack_require__(24); + + function warnTDZ(publicInstance, callerName) { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined; + } + } + + /** + * This is the abstract API for an update queue. + */ + var ReactNoopUpdateQueue = { + + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + return false; + }, + + /** + * Enqueue a callback that will be executed after all the pending updates + * have processed. + * + * @param {ReactClass} publicInstance The instance to use as `this` context. + * @param {?function} callback Called after state is updated. + * @internal + */ + enqueueCallback: function (publicInstance, callback) {}, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @internal + */ + enqueueForceUpdate: function (publicInstance) { + warnTDZ(publicInstance, 'forceUpdate'); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState) { + warnTDZ(publicInstance, 'replaceState'); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @internal + */ + enqueueSetState: function (publicInstance, partialState) { + warnTDZ(publicInstance, 'setState'); + }, + + /** + * Sets a subset of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialProps Subset of the next props. + * @internal + */ + enqueueSetProps: function (publicInstance, partialProps) { + warnTDZ(publicInstance, 'setProps'); + }, + + /** + * Replaces all of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} props New props. + * @internal + */ + enqueueReplaceProps: function (publicInstance, props) { + warnTDZ(publicInstance, 'replaceProps'); + } + + }; + + module.exports = ReactNoopUpdateQueue; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 124 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactReconcileTransaction + * @typechecks static-only + */ + + 'use strict'; + + var CallbackQueue = __webpack_require__(54); + var PooledClass = __webpack_require__(55); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactDOMFeatureFlags = __webpack_require__(40); + var ReactInputSelection = __webpack_require__(125); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + + /** + * Ensures that, when possible, the selection range (currently selected text + * input) is not disturbed by performing the transaction. + */ + var SELECTION_RESTORATION = { + /** + * @return {Selection} Selection information. + */ + initialize: ReactInputSelection.getSelectionInformation, + /** + * @param {Selection} sel Selection information returned from `initialize`. + */ + close: ReactInputSelection.restoreSelection + }; + + /** + * Suppresses events (blur/focus) that could be inadvertently dispatched due to + * high level DOM manipulations (like temporarily removing a text input from the + * DOM). + */ + var EVENT_SUPPRESSION = { + /** + * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before + * the reconciliation. + */ + initialize: function () { + var currentlyEnabled = ReactBrowserEventEmitter.isEnabled(); + ReactBrowserEventEmitter.setEnabled(false); + return currentlyEnabled; + }, + + /** + * @param {boolean} previouslyEnabled Enabled status of + * `ReactBrowserEventEmitter` before the reconciliation occurred. `close` + * restores the previous value. + */ + close: function (previouslyEnabled) { + ReactBrowserEventEmitter.setEnabled(previouslyEnabled); + } + }; + + /** + * Provides a queue for collecting `componentDidMount` and + * `componentDidUpdate` callbacks during the the transaction. + */ + var ON_DOM_READY_QUEUEING = { + /** + * Initializes the internal `onDOMReady` queue. + */ + initialize: function () { + this.reactMountReady.reset(); + }, + + /** + * After DOM is flushed, invoke all registered `onDOMReady` callbacks. + */ + close: function () { + this.reactMountReady.notifyAll(); + } + }; + + /** + * Executed within the scope of the `Transaction` instance. Consider these as + * being member methods, but with an implied ordering while being isolated from + * each other. + */ + var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING]; + + /** + * Currently: + * - The order that these are listed in the transaction is critical: + * - Suppresses events. + * - Restores selection range. + * + * Future: + * - Restore document/overflow scroll positions that were unintentionally + * modified via DOM insertions above the top viewport boundary. + * - Implement/integrate with customized constraint based layout system and keep + * track of which dimensions must be remeasured. + * + * @class ReactReconcileTransaction + */ + function ReactReconcileTransaction(forceHTML) { + this.reinitializeTransaction(); + // Only server-side rendering really needs this option (see + // `ReactServerRendering`), but server-side uses + // `ReactServerRenderingTransaction` instead. This option is here so that it's + // accessible and defaults to false when `ReactDOMComponent` and + // `ReactTextComponent` checks it in `mountComponent`.` + this.renderToStaticMarkup = false; + this.reactMountReady = CallbackQueue.getPooled(null); + this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement; + } + + var Mixin = { + /** + * @see Transaction + * @abstract + * @final + * @return {array<object>} List of operation wrap procedures. + * TODO: convert to array<TransactionWrapper> + */ + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + }, + + /** + * @return {object} The queue to collect `onDOMReady` callbacks with. + */ + getReactMountReady: function () { + return this.reactMountReady; + }, + + /** + * `PooledClass` looks for this, and will invoke this before allowing this + * instance to be reused. + */ + destructor: function () { + CallbackQueue.release(this.reactMountReady); + this.reactMountReady = null; + } + }; + + assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin); + + PooledClass.addPoolingTo(ReactReconcileTransaction); + + module.exports = ReactReconcileTransaction; + +/***/ }, +/* 125 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInputSelection + */ + + 'use strict'; + + var ReactDOMSelection = __webpack_require__(126); + + var containsNode = __webpack_require__(58); + var focusNode = __webpack_require__(94); + var getActiveElement = __webpack_require__(128); + + function isInDocument(node) { + return containsNode(document.documentElement, node); + } + + /** + * @ReactInputSelection: React input selection module. Based on Selection.js, + * but modified to be suitable for react and has a couple of bug fixes (doesn't + * assume buttons have range selections allowed). + * Input selection module for React. + */ + var ReactInputSelection = { + + hasSelectionCapabilities: function (elem) { + var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true'); + }, + + getSelectionInformation: function () { + var focusedElem = getActiveElement(); + return { + focusedElem: focusedElem, + selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null + }; + }, + + /** + * @restoreSelection: If any selection information was potentially lost, + * restore it. This is useful when performing operations that could remove dom + * nodes and place them back in, resulting in focus being lost. + */ + restoreSelection: function (priorSelectionInformation) { + var curFocusedElem = getActiveElement(); + var priorFocusedElem = priorSelectionInformation.focusedElem; + var priorSelectionRange = priorSelectionInformation.selectionRange; + if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) { + if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) { + ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange); + } + focusNode(priorFocusedElem); + } + }, + + /** + * @getSelection: Gets the selection bounds of a focused textarea, input or + * contentEditable node. + * -@input: Look up selection bounds of this input + * -@return {start: selectionStart, end: selectionEnd} + */ + getSelection: function (input) { + var selection; + + if ('selectionStart' in input) { + // Modern browser with input or textarea. + selection = { + start: input.selectionStart, + end: input.selectionEnd + }; + } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) { + // IE8 input. + var range = document.selection.createRange(); + // There can only be one selection per document in IE, so it must + // be in our element. + if (range.parentElement() === input) { + selection = { + start: -range.moveStart('character', -input.value.length), + end: -range.moveEnd('character', -input.value.length) + }; + } + } else { + // Content editable or old IE textarea. + selection = ReactDOMSelection.getOffsets(input); + } + + return selection || { start: 0, end: 0 }; + }, + + /** + * @setSelection: Sets the selection bounds of a textarea or input and focuses + * the input. + * -@input Set selection bounds of this input or textarea + * -@offsets Object of same form that is returned from get* + */ + setSelection: function (input, offsets) { + var start = offsets.start; + var end = offsets.end; + if (typeof end === 'undefined') { + end = start; + } + + if ('selectionStart' in input) { + input.selectionStart = start; + input.selectionEnd = Math.min(end, input.value.length); + } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) { + var range = input.createTextRange(); + range.collapse(true); + range.moveStart('character', start); + range.moveEnd('character', end - start); + range.select(); + } else { + ReactDOMSelection.setOffsets(input, offsets); + } + } + }; + + module.exports = ReactInputSelection; + +/***/ }, +/* 126 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMSelection + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var getNodeForCharacterOffset = __webpack_require__(127); + var getTextContentAccessor = __webpack_require__(74); + + /** + * While `isCollapsed` is available on the Selection object and `collapsed` + * is available on the Range object, IE11 sometimes gets them wrong. + * If the anchor/focus nodes and offsets are the same, the range is collapsed. + */ + function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) { + return anchorNode === focusNode && anchorOffset === focusOffset; + } + + /** + * Get the appropriate anchor and focus node/offset pairs for IE. + * + * The catch here is that IE's selection API doesn't provide information + * about whether the selection is forward or backward, so we have to + * behave as though it's always forward. + * + * IE text differs from modern selection in that it behaves as though + * block elements end with a new line. This means character offsets will + * differ between the two APIs. + * + * @param {DOMElement} node + * @return {object} + */ + function getIEOffsets(node) { + var selection = document.selection; + var selectedRange = selection.createRange(); + var selectedLength = selectedRange.text.length; + + // Duplicate selection so we can move range without breaking user selection. + var fromStart = selectedRange.duplicate(); + fromStart.moveToElementText(node); + fromStart.setEndPoint('EndToStart', selectedRange); + + var startOffset = fromStart.text.length; + var endOffset = startOffset + selectedLength; + + return { + start: startOffset, + end: endOffset + }; + } + + /** + * @param {DOMElement} node + * @return {?object} + */ + function getModernOffsets(node) { + var selection = window.getSelection && window.getSelection(); + + if (!selection || selection.rangeCount === 0) { + return null; + } + + var anchorNode = selection.anchorNode; + var anchorOffset = selection.anchorOffset; + var focusNode = selection.focusNode; + var focusOffset = selection.focusOffset; + + var currentRange = selection.getRangeAt(0); + + // In Firefox, range.startContainer and range.endContainer can be "anonymous + // divs", e.g. the up/down buttons on an <input type="number">. Anonymous + // divs do not seem to expose properties, triggering a "Permission denied + // error" if any of its properties are accessed. The only seemingly possible + // way to avoid erroring is to access a property that typically works for + // non-anonymous divs and catch any error that may otherwise arise. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=208427 + try { + /* eslint-disable no-unused-expressions */ + currentRange.startContainer.nodeType; + currentRange.endContainer.nodeType; + /* eslint-enable no-unused-expressions */ + } catch (e) { + return null; + } + + // If the node and offset values are the same, the selection is collapsed. + // `Selection.isCollapsed` is available natively, but IE sometimes gets + // this value wrong. + var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset); + + var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length; + + var tempRange = currentRange.cloneRange(); + tempRange.selectNodeContents(node); + tempRange.setEnd(currentRange.startContainer, currentRange.startOffset); + + var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset); + + var start = isTempRangeCollapsed ? 0 : tempRange.toString().length; + var end = start + rangeLength; + + // Detect whether the selection is backward. + var detectionRange = document.createRange(); + detectionRange.setStart(anchorNode, anchorOffset); + detectionRange.setEnd(focusNode, focusOffset); + var isBackward = detectionRange.collapsed; + + return { + start: isBackward ? end : start, + end: isBackward ? start : end + }; + } + + /** + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ + function setIEOffsets(node, offsets) { + var range = document.selection.createRange().duplicate(); + var start, end; + + if (typeof offsets.end === 'undefined') { + start = offsets.start; + end = start; + } else if (offsets.start > offsets.end) { + start = offsets.end; + end = offsets.start; + } else { + start = offsets.start; + end = offsets.end; + } + + range.moveToElementText(node); + range.moveStart('character', start); + range.setEndPoint('EndToStart', range); + range.moveEnd('character', end - start); + range.select(); + } + + /** + * In modern non-IE browsers, we can support both forward and backward + * selections. + * + * Note: IE10+ supports the Selection object, but it does not support + * the `extend` method, which means that even in modern IE, it's not possible + * to programatically create a backward selection. Thus, for all IE + * versions, we use the old IE API to create our selections. + * + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ + function setModernOffsets(node, offsets) { + if (!window.getSelection) { + return; + } + + var selection = window.getSelection(); + var length = node[getTextContentAccessor()].length; + var start = Math.min(offsets.start, length); + var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length); + + // IE 11 uses modern selection, but doesn't support the extend method. + // Flip backward selections, so we can set with a single range. + if (!selection.extend && start > end) { + var temp = end; + end = start; + start = temp; + } + + var startMarker = getNodeForCharacterOffset(node, start); + var endMarker = getNodeForCharacterOffset(node, end); + + if (startMarker && endMarker) { + var range = document.createRange(); + range.setStart(startMarker.node, startMarker.offset); + selection.removeAllRanges(); + + if (start > end) { + selection.addRange(range); + selection.extend(endMarker.node, endMarker.offset); + } else { + range.setEnd(endMarker.node, endMarker.offset); + selection.addRange(range); + } + } + } + + var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window); + + var ReactDOMSelection = { + /** + * @param {DOMElement} node + */ + getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets, + + /** + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ + setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets + }; + + module.exports = ReactDOMSelection; + +/***/ }, +/* 127 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getNodeForCharacterOffset + */ + + 'use strict'; + + /** + * Given any node return the first leaf node without children. + * + * @param {DOMElement|DOMTextNode} node + * @return {DOMElement|DOMTextNode} + */ + function getLeafNode(node) { + while (node && node.firstChild) { + node = node.firstChild; + } + return node; + } + + /** + * Get the next sibling within a container. This will walk up the + * DOM if a node's siblings have been exhausted. + * + * @param {DOMElement|DOMTextNode} node + * @return {?DOMElement|DOMTextNode} + */ + function getSiblingNode(node) { + while (node) { + if (node.nextSibling) { + return node.nextSibling; + } + node = node.parentNode; + } + } + + /** + * Get object describing the nodes which contain characters at offset. + * + * @param {DOMElement|DOMTextNode} root + * @param {number} offset + * @return {?object} + */ + function getNodeForCharacterOffset(root, offset) { + var node = getLeafNode(root); + var nodeStart = 0; + var nodeEnd = 0; + + while (node) { + if (node.nodeType === 3) { + nodeEnd = nodeStart + node.textContent.length; + + if (nodeStart <= offset && nodeEnd >= offset) { + return { + node: node, + offset: offset - nodeStart + }; + } + + nodeStart = nodeEnd; + } + + node = getLeafNode(getSiblingNode(node)); + } + } + + module.exports = getNodeForCharacterOffset; + +/***/ }, +/* 128 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getActiveElement + * @typechecks + */ + + /** + * Same as document.activeElement but wraps in a try-catch block. In IE it is + * not safe to call document.activeElement if there is nothing focused. + * + * The activeElement will be null only if the document or document body is not yet defined. + */ + 'use strict'; + + function getActiveElement() /*?DOMElement*/{ + if (typeof document === 'undefined') { + return null; + } + + try { + return document.activeElement || document.body; + } catch (e) { + return document.body; + } + } + + module.exports = getActiveElement; + +/***/ }, +/* 129 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SelectEventPlugin + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPropagators = __webpack_require__(72); + var ExecutionEnvironment = __webpack_require__(8); + var ReactInputSelection = __webpack_require__(125); + var SyntheticEvent = __webpack_require__(76); + + var getActiveElement = __webpack_require__(128); + var isTextInputElement = __webpack_require__(81); + var keyOf = __webpack_require__(78); + var shallowEqual = __webpack_require__(116); + + var topLevelTypes = EventConstants.topLevelTypes; + + var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11; + + var eventTypes = { + select: { + phasedRegistrationNames: { + bubbled: keyOf({ onSelect: null }), + captured: keyOf({ onSelectCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange] + } + }; + + var activeElement = null; + var activeElementID = null; + var lastSelection = null; + var mouseDown = false; + + // Track whether a listener exists for this plugin. If none exist, we do + // not extract events. + var hasListener = false; + var ON_SELECT_KEY = keyOf({ onSelect: null }); + + /** + * Get an object which is a unique representation of the current selection. + * + * The return value will not be consistent across nodes or browsers, but + * two identical selections on the same node will return identical objects. + * + * @param {DOMElement} node + * @return {object} + */ + function getSelection(node) { + if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) { + return { + start: node.selectionStart, + end: node.selectionEnd + }; + } else if (window.getSelection) { + var selection = window.getSelection(); + return { + anchorNode: selection.anchorNode, + anchorOffset: selection.anchorOffset, + focusNode: selection.focusNode, + focusOffset: selection.focusOffset + }; + } else if (document.selection) { + var range = document.selection.createRange(); + return { + parentElement: range.parentElement(), + text: range.text, + top: range.boundingTop, + left: range.boundingLeft + }; + } + } + + /** + * Poll selection to see whether it's changed. + * + * @param {object} nativeEvent + * @return {?SyntheticEvent} + */ + function constructSelectEvent(nativeEvent, nativeEventTarget) { + // Ensure we have the right element, and that the user is not dragging a + // selection (this matches native `select` event behavior). In HTML5, select + // fires only on input and textarea thus if there's no focused element we + // won't dispatch. + if (mouseDown || activeElement == null || activeElement !== getActiveElement()) { + return null; + } + + // Only fire when selection has actually changed. + var currentSelection = getSelection(activeElement); + if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) { + lastSelection = currentSelection; + + var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget); + + syntheticEvent.type = 'select'; + syntheticEvent.target = activeElement; + + EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent); + + return syntheticEvent; + } + + return null; + } + + /** + * This plugin creates an `onSelect` event that normalizes select events + * across form elements. + * + * Supported elements are: + * - input (see `isTextInputElement`) + * - textarea + * - contentEditable + * + * This differs from native browser implementations in the following ways: + * - Fires on contentEditable fields as well as inputs. + * - Fires for collapsed selection. + * - Fires after user input. + */ + var SelectEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + if (!hasListener) { + return null; + } + + switch (topLevelType) { + // Track the input node that has focus. + case topLevelTypes.topFocus: + if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') { + activeElement = topLevelTarget; + activeElementID = topLevelTargetID; + lastSelection = null; + } + break; + case topLevelTypes.topBlur: + activeElement = null; + activeElementID = null; + lastSelection = null; + break; + + // Don't fire the event while the user is dragging. This matches the + // semantics of the native select event. + case topLevelTypes.topMouseDown: + mouseDown = true; + break; + case topLevelTypes.topContextMenu: + case topLevelTypes.topMouseUp: + mouseDown = false; + return constructSelectEvent(nativeEvent, nativeEventTarget); + + // Chrome and IE fire non-standard event when selection is changed (and + // sometimes when it hasn't). IE's event fires out of order with respect + // to key and input events on deletion, so we discard it. + // + // Firefox doesn't support selectionchange, so check selection status + // after each key entry. The selection changes after keydown and before + // keyup, but we check on keydown as well in the case of holding down a + // key, when multiple keydown events are fired but only one keyup is. + // This is also our approach for IE handling, for the reason above. + case topLevelTypes.topSelectionChange: + if (skipSelectionChangeEvent) { + break; + } + // falls through + case topLevelTypes.topKeyDown: + case topLevelTypes.topKeyUp: + return constructSelectEvent(nativeEvent, nativeEventTarget); + } + + return null; + }, + + didPutListener: function (id, registrationName, listener) { + if (registrationName === ON_SELECT_KEY) { + hasListener = true; + } + } + }; + + module.exports = SelectEventPlugin; + +/***/ }, +/* 130 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ServerReactRootIndex + * @typechecks + */ + + 'use strict'; + + /** + * Size of the reactRoot ID space. We generate random numbers for React root + * IDs and if there's a collision the events and DOM update system will + * get confused. In the future we need a way to generate GUIDs but for + * now this will work on a smaller scale. + */ + var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53); + + var ServerReactRootIndex = { + createReactRootIndex: function () { + return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX); + } + }; + + module.exports = ServerReactRootIndex; + +/***/ }, +/* 131 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SimpleEventPlugin + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventListener = __webpack_require__(118); + var EventPropagators = __webpack_require__(72); + var ReactMount = __webpack_require__(27); + var SyntheticClipboardEvent = __webpack_require__(132); + var SyntheticEvent = __webpack_require__(76); + var SyntheticFocusEvent = __webpack_require__(133); + var SyntheticKeyboardEvent = __webpack_require__(134); + var SyntheticMouseEvent = __webpack_require__(85); + var SyntheticDragEvent = __webpack_require__(137); + var SyntheticTouchEvent = __webpack_require__(138); + var SyntheticUIEvent = __webpack_require__(86); + var SyntheticWheelEvent = __webpack_require__(139); + + var emptyFunction = __webpack_require__(14); + var getEventCharCode = __webpack_require__(135); + var invariant = __webpack_require__(12); + var keyOf = __webpack_require__(78); + + var topLevelTypes = EventConstants.topLevelTypes; + + var eventTypes = { + abort: { + phasedRegistrationNames: { + bubbled: keyOf({ onAbort: true }), + captured: keyOf({ onAbortCapture: true }) + } + }, + blur: { + phasedRegistrationNames: { + bubbled: keyOf({ onBlur: true }), + captured: keyOf({ onBlurCapture: true }) + } + }, + canPlay: { + phasedRegistrationNames: { + bubbled: keyOf({ onCanPlay: true }), + captured: keyOf({ onCanPlayCapture: true }) + } + }, + canPlayThrough: { + phasedRegistrationNames: { + bubbled: keyOf({ onCanPlayThrough: true }), + captured: keyOf({ onCanPlayThroughCapture: true }) + } + }, + click: { + phasedRegistrationNames: { + bubbled: keyOf({ onClick: true }), + captured: keyOf({ onClickCapture: true }) + } + }, + contextMenu: { + phasedRegistrationNames: { + bubbled: keyOf({ onContextMenu: true }), + captured: keyOf({ onContextMenuCapture: true }) + } + }, + copy: { + phasedRegistrationNames: { + bubbled: keyOf({ onCopy: true }), + captured: keyOf({ onCopyCapture: true }) + } + }, + cut: { + phasedRegistrationNames: { + bubbled: keyOf({ onCut: true }), + captured: keyOf({ onCutCapture: true }) + } + }, + doubleClick: { + phasedRegistrationNames: { + bubbled: keyOf({ onDoubleClick: true }), + captured: keyOf({ onDoubleClickCapture: true }) + } + }, + drag: { + phasedRegistrationNames: { + bubbled: keyOf({ onDrag: true }), + captured: keyOf({ onDragCapture: true }) + } + }, + dragEnd: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragEnd: true }), + captured: keyOf({ onDragEndCapture: true }) + } + }, + dragEnter: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragEnter: true }), + captured: keyOf({ onDragEnterCapture: true }) + } + }, + dragExit: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragExit: true }), + captured: keyOf({ onDragExitCapture: true }) + } + }, + dragLeave: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragLeave: true }), + captured: keyOf({ onDragLeaveCapture: true }) + } + }, + dragOver: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragOver: true }), + captured: keyOf({ onDragOverCapture: true }) + } + }, + dragStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragStart: true }), + captured: keyOf({ onDragStartCapture: true }) + } + }, + drop: { + phasedRegistrationNames: { + bubbled: keyOf({ onDrop: true }), + captured: keyOf({ onDropCapture: true }) + } + }, + durationChange: { + phasedRegistrationNames: { + bubbled: keyOf({ onDurationChange: true }), + captured: keyOf({ onDurationChangeCapture: true }) + } + }, + emptied: { + phasedRegistrationNames: { + bubbled: keyOf({ onEmptied: true }), + captured: keyOf({ onEmptiedCapture: true }) + } + }, + encrypted: { + phasedRegistrationNames: { + bubbled: keyOf({ onEncrypted: true }), + captured: keyOf({ onEncryptedCapture: true }) + } + }, + ended: { + phasedRegistrationNames: { + bubbled: keyOf({ onEnded: true }), + captured: keyOf({ onEndedCapture: true }) + } + }, + error: { + phasedRegistrationNames: { + bubbled: keyOf({ onError: true }), + captured: keyOf({ onErrorCapture: true }) + } + }, + focus: { + phasedRegistrationNames: { + bubbled: keyOf({ onFocus: true }), + captured: keyOf({ onFocusCapture: true }) + } + }, + input: { + phasedRegistrationNames: { + bubbled: keyOf({ onInput: true }), + captured: keyOf({ onInputCapture: true }) + } + }, + keyDown: { + phasedRegistrationNames: { + bubbled: keyOf({ onKeyDown: true }), + captured: keyOf({ onKeyDownCapture: true }) + } + }, + keyPress: { + phasedRegistrationNames: { + bubbled: keyOf({ onKeyPress: true }), + captured: keyOf({ onKeyPressCapture: true }) + } + }, + keyUp: { + phasedRegistrationNames: { + bubbled: keyOf({ onKeyUp: true }), + captured: keyOf({ onKeyUpCapture: true }) + } + }, + load: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoad: true }), + captured: keyOf({ onLoadCapture: true }) + } + }, + loadedData: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoadedData: true }), + captured: keyOf({ onLoadedDataCapture: true }) + } + }, + loadedMetadata: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoadedMetadata: true }), + captured: keyOf({ onLoadedMetadataCapture: true }) + } + }, + loadStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoadStart: true }), + captured: keyOf({ onLoadStartCapture: true }) + } + }, + // Note: We do not allow listening to mouseOver events. Instead, use the + // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`. + mouseDown: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseDown: true }), + captured: keyOf({ onMouseDownCapture: true }) + } + }, + mouseMove: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseMove: true }), + captured: keyOf({ onMouseMoveCapture: true }) + } + }, + mouseOut: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseOut: true }), + captured: keyOf({ onMouseOutCapture: true }) + } + }, + mouseOver: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseOver: true }), + captured: keyOf({ onMouseOverCapture: true }) + } + }, + mouseUp: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseUp: true }), + captured: keyOf({ onMouseUpCapture: true }) + } + }, + paste: { + phasedRegistrationNames: { + bubbled: keyOf({ onPaste: true }), + captured: keyOf({ onPasteCapture: true }) + } + }, + pause: { + phasedRegistrationNames: { + bubbled: keyOf({ onPause: true }), + captured: keyOf({ onPauseCapture: true }) + } + }, + play: { + phasedRegistrationNames: { + bubbled: keyOf({ onPlay: true }), + captured: keyOf({ onPlayCapture: true }) + } + }, + playing: { + phasedRegistrationNames: { + bubbled: keyOf({ onPlaying: true }), + captured: keyOf({ onPlayingCapture: true }) + } + }, + progress: { + phasedRegistrationNames: { + bubbled: keyOf({ onProgress: true }), + captured: keyOf({ onProgressCapture: true }) + } + }, + rateChange: { + phasedRegistrationNames: { + bubbled: keyOf({ onRateChange: true }), + captured: keyOf({ onRateChangeCapture: true }) + } + }, + reset: { + phasedRegistrationNames: { + bubbled: keyOf({ onReset: true }), + captured: keyOf({ onResetCapture: true }) + } + }, + scroll: { + phasedRegistrationNames: { + bubbled: keyOf({ onScroll: true }), + captured: keyOf({ onScrollCapture: true }) + } + }, + seeked: { + phasedRegistrationNames: { + bubbled: keyOf({ onSeeked: true }), + captured: keyOf({ onSeekedCapture: true }) + } + }, + seeking: { + phasedRegistrationNames: { + bubbled: keyOf({ onSeeking: true }), + captured: keyOf({ onSeekingCapture: true }) + } + }, + stalled: { + phasedRegistrationNames: { + bubbled: keyOf({ onStalled: true }), + captured: keyOf({ onStalledCapture: true }) + } + }, + submit: { + phasedRegistrationNames: { + bubbled: keyOf({ onSubmit: true }), + captured: keyOf({ onSubmitCapture: true }) + } + }, + suspend: { + phasedRegistrationNames: { + bubbled: keyOf({ onSuspend: true }), + captured: keyOf({ onSuspendCapture: true }) + } + }, + timeUpdate: { + phasedRegistrationNames: { + bubbled: keyOf({ onTimeUpdate: true }), + captured: keyOf({ onTimeUpdateCapture: true }) + } + }, + touchCancel: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchCancel: true }), + captured: keyOf({ onTouchCancelCapture: true }) + } + }, + touchEnd: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchEnd: true }), + captured: keyOf({ onTouchEndCapture: true }) + } + }, + touchMove: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchMove: true }), + captured: keyOf({ onTouchMoveCapture: true }) + } + }, + touchStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchStart: true }), + captured: keyOf({ onTouchStartCapture: true }) + } + }, + volumeChange: { + phasedRegistrationNames: { + bubbled: keyOf({ onVolumeChange: true }), + captured: keyOf({ onVolumeChangeCapture: true }) + } + }, + waiting: { + phasedRegistrationNames: { + bubbled: keyOf({ onWaiting: true }), + captured: keyOf({ onWaitingCapture: true }) + } + }, + wheel: { + phasedRegistrationNames: { + bubbled: keyOf({ onWheel: true }), + captured: keyOf({ onWheelCapture: true }) + } + } + }; + + var topLevelEventsToDispatchConfig = { + topAbort: eventTypes.abort, + topBlur: eventTypes.blur, + topCanPlay: eventTypes.canPlay, + topCanPlayThrough: eventTypes.canPlayThrough, + topClick: eventTypes.click, + topContextMenu: eventTypes.contextMenu, + topCopy: eventTypes.copy, + topCut: eventTypes.cut, + topDoubleClick: eventTypes.doubleClick, + topDrag: eventTypes.drag, + topDragEnd: eventTypes.dragEnd, + topDragEnter: eventTypes.dragEnter, + topDragExit: eventTypes.dragExit, + topDragLeave: eventTypes.dragLeave, + topDragOver: eventTypes.dragOver, + topDragStart: eventTypes.dragStart, + topDrop: eventTypes.drop, + topDurationChange: eventTypes.durationChange, + topEmptied: eventTypes.emptied, + topEncrypted: eventTypes.encrypted, + topEnded: eventTypes.ended, + topError: eventTypes.error, + topFocus: eventTypes.focus, + topInput: eventTypes.input, + topKeyDown: eventTypes.keyDown, + topKeyPress: eventTypes.keyPress, + topKeyUp: eventTypes.keyUp, + topLoad: eventTypes.load, + topLoadedData: eventTypes.loadedData, + topLoadedMetadata: eventTypes.loadedMetadata, + topLoadStart: eventTypes.loadStart, + topMouseDown: eventTypes.mouseDown, + topMouseMove: eventTypes.mouseMove, + topMouseOut: eventTypes.mouseOut, + topMouseOver: eventTypes.mouseOver, + topMouseUp: eventTypes.mouseUp, + topPaste: eventTypes.paste, + topPause: eventTypes.pause, + topPlay: eventTypes.play, + topPlaying: eventTypes.playing, + topProgress: eventTypes.progress, + topRateChange: eventTypes.rateChange, + topReset: eventTypes.reset, + topScroll: eventTypes.scroll, + topSeeked: eventTypes.seeked, + topSeeking: eventTypes.seeking, + topStalled: eventTypes.stalled, + topSubmit: eventTypes.submit, + topSuspend: eventTypes.suspend, + topTimeUpdate: eventTypes.timeUpdate, + topTouchCancel: eventTypes.touchCancel, + topTouchEnd: eventTypes.touchEnd, + topTouchMove: eventTypes.touchMove, + topTouchStart: eventTypes.touchStart, + topVolumeChange: eventTypes.volumeChange, + topWaiting: eventTypes.waiting, + topWheel: eventTypes.wheel + }; + + for (var type in topLevelEventsToDispatchConfig) { + topLevelEventsToDispatchConfig[type].dependencies = [type]; + } + + var ON_CLICK_KEY = keyOf({ onClick: null }); + var onClickListeners = {}; + + var SimpleEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType]; + if (!dispatchConfig) { + return null; + } + var EventConstructor; + switch (topLevelType) { + case topLevelTypes.topAbort: + case topLevelTypes.topCanPlay: + case topLevelTypes.topCanPlayThrough: + case topLevelTypes.topDurationChange: + case topLevelTypes.topEmptied: + case topLevelTypes.topEncrypted: + case topLevelTypes.topEnded: + case topLevelTypes.topError: + case topLevelTypes.topInput: + case topLevelTypes.topLoad: + case topLevelTypes.topLoadedData: + case topLevelTypes.topLoadedMetadata: + case topLevelTypes.topLoadStart: + case topLevelTypes.topPause: + case topLevelTypes.topPlay: + case topLevelTypes.topPlaying: + case topLevelTypes.topProgress: + case topLevelTypes.topRateChange: + case topLevelTypes.topReset: + case topLevelTypes.topSeeked: + case topLevelTypes.topSeeking: + case topLevelTypes.topStalled: + case topLevelTypes.topSubmit: + case topLevelTypes.topSuspend: + case topLevelTypes.topTimeUpdate: + case topLevelTypes.topVolumeChange: + case topLevelTypes.topWaiting: + // HTML Events + // @see http://www.w3.org/TR/html5/index.html#events-0 + EventConstructor = SyntheticEvent; + break; + case topLevelTypes.topKeyPress: + // FireFox creates a keypress event for function keys too. This removes + // the unwanted keypress events. Enter is however both printable and + // non-printable. One would expect Tab to be as well (but it isn't). + if (getEventCharCode(nativeEvent) === 0) { + return null; + } + /* falls through */ + case topLevelTypes.topKeyDown: + case topLevelTypes.topKeyUp: + EventConstructor = SyntheticKeyboardEvent; + break; + case topLevelTypes.topBlur: + case topLevelTypes.topFocus: + EventConstructor = SyntheticFocusEvent; + break; + case topLevelTypes.topClick: + // Firefox creates a click event on right mouse clicks. This removes the + // unwanted click events. + if (nativeEvent.button === 2) { + return null; + } + /* falls through */ + case topLevelTypes.topContextMenu: + case topLevelTypes.topDoubleClick: + case topLevelTypes.topMouseDown: + case topLevelTypes.topMouseMove: + case topLevelTypes.topMouseOut: + case topLevelTypes.topMouseOver: + case topLevelTypes.topMouseUp: + EventConstructor = SyntheticMouseEvent; + break; + case topLevelTypes.topDrag: + case topLevelTypes.topDragEnd: + case topLevelTypes.topDragEnter: + case topLevelTypes.topDragExit: + case topLevelTypes.topDragLeave: + case topLevelTypes.topDragOver: + case topLevelTypes.topDragStart: + case topLevelTypes.topDrop: + EventConstructor = SyntheticDragEvent; + break; + case topLevelTypes.topTouchCancel: + case topLevelTypes.topTouchEnd: + case topLevelTypes.topTouchMove: + case topLevelTypes.topTouchStart: + EventConstructor = SyntheticTouchEvent; + break; + case topLevelTypes.topScroll: + EventConstructor = SyntheticUIEvent; + break; + case topLevelTypes.topWheel: + EventConstructor = SyntheticWheelEvent; + break; + case topLevelTypes.topCopy: + case topLevelTypes.topCut: + case topLevelTypes.topPaste: + EventConstructor = SyntheticClipboardEvent; + break; + } + !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined; + var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget); + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + }, + + didPutListener: function (id, registrationName, listener) { + // Mobile Safari does not fire properly bubble click events on + // non-interactive elements, which means delegated click listeners do not + // fire. The workaround for this bug involves attaching an empty click + // listener on the target node. + if (registrationName === ON_CLICK_KEY) { + var node = ReactMount.getNode(id); + if (!onClickListeners[id]) { + onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction); + } + } + }, + + willDeleteListener: function (id, registrationName) { + if (registrationName === ON_CLICK_KEY) { + onClickListeners[id].remove(); + delete onClickListeners[id]; + } + } + + }; + + module.exports = SimpleEventPlugin; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 132 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticClipboardEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + /** + * @interface Event + * @see http://www.w3.org/TR/clipboard-apis/ + */ + var ClipboardEventInterface = { + clipboardData: function (event) { + return 'clipboardData' in event ? event.clipboardData : window.clipboardData; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface); + + module.exports = SyntheticClipboardEvent; + +/***/ }, +/* 133 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticFocusEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + + /** + * @interface FocusEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var FocusEventInterface = { + relatedTarget: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface); + + module.exports = SyntheticFocusEvent; + +/***/ }, +/* 134 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticKeyboardEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + + var getEventCharCode = __webpack_require__(135); + var getEventKey = __webpack_require__(136); + var getEventModifierState = __webpack_require__(87); + + /** + * @interface KeyboardEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var KeyboardEventInterface = { + key: getEventKey, + location: null, + ctrlKey: null, + shiftKey: null, + altKey: null, + metaKey: null, + repeat: null, + locale: null, + getModifierState: getEventModifierState, + // Legacy Interface + charCode: function (event) { + // `charCode` is the result of a KeyPress event and represents the value of + // the actual printable character. + + // KeyPress is deprecated, but its replacement is not yet final and not + // implemented in any major browser. Only KeyPress has charCode. + if (event.type === 'keypress') { + return getEventCharCode(event); + } + return 0; + }, + keyCode: function (event) { + // `keyCode` is the result of a KeyDown/Up event and represents the value of + // physical keyboard key. + + // The actual meaning of the value depends on the users' keyboard layout + // which cannot be detected. Assuming that it is a US keyboard layout + // provides a surprisingly accurate mapping for US and European users. + // Due to this, it is left to the user to implement at this time. + if (event.type === 'keydown' || event.type === 'keyup') { + return event.keyCode; + } + return 0; + }, + which: function (event) { + // `which` is an alias for either `keyCode` or `charCode` depending on the + // type of the event. + if (event.type === 'keypress') { + return getEventCharCode(event); + } + if (event.type === 'keydown' || event.type === 'keyup') { + return event.keyCode; + } + return 0; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface); + + module.exports = SyntheticKeyboardEvent; + +/***/ }, +/* 135 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventCharCode + * @typechecks static-only + */ + + 'use strict'; + + /** + * `charCode` represents the actual "character code" and is safe to use with + * `String.fromCharCode`. As such, only keys that correspond to printable + * characters produce a valid `charCode`, the only exception to this is Enter. + * The Tab-key is considered non-printable and does not have a `charCode`, + * presumably because it does not produce a tab-character in browsers. + * + * @param {object} nativeEvent Native browser event. + * @return {number} Normalized `charCode` property. + */ + function getEventCharCode(nativeEvent) { + var charCode; + var keyCode = nativeEvent.keyCode; + + if ('charCode' in nativeEvent) { + charCode = nativeEvent.charCode; + + // FF does not set `charCode` for the Enter-key, check against `keyCode`. + if (charCode === 0 && keyCode === 13) { + charCode = 13; + } + } else { + // IE8 does not implement `charCode`, but `keyCode` has the correct value. + charCode = keyCode; + } + + // Some non-printable keys are reported in `charCode`/`keyCode`, discard them. + // Must not discard the (non-)printable Enter-key. + if (charCode >= 32 || charCode === 13) { + return charCode; + } + + return 0; + } + + module.exports = getEventCharCode; + +/***/ }, +/* 136 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventKey + * @typechecks static-only + */ + + 'use strict'; + + var getEventCharCode = __webpack_require__(135); + + /** + * Normalization of deprecated HTML5 `key` values + * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names + */ + var normalizeKey = { + 'Esc': 'Escape', + 'Spacebar': ' ', + 'Left': 'ArrowLeft', + 'Up': 'ArrowUp', + 'Right': 'ArrowRight', + 'Down': 'ArrowDown', + 'Del': 'Delete', + 'Win': 'OS', + 'Menu': 'ContextMenu', + 'Apps': 'ContextMenu', + 'Scroll': 'ScrollLock', + 'MozPrintableKey': 'Unidentified' + }; + + /** + * Translation from legacy `keyCode` to HTML5 `key` + * Only special keys supported, all others depend on keyboard layout or browser + * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names + */ + var translateToKey = { + 8: 'Backspace', + 9: 'Tab', + 12: 'Clear', + 13: 'Enter', + 16: 'Shift', + 17: 'Control', + 18: 'Alt', + 19: 'Pause', + 20: 'CapsLock', + 27: 'Escape', + 32: ' ', + 33: 'PageUp', + 34: 'PageDown', + 35: 'End', + 36: 'Home', + 37: 'ArrowLeft', + 38: 'ArrowUp', + 39: 'ArrowRight', + 40: 'ArrowDown', + 45: 'Insert', + 46: 'Delete', + 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6', + 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12', + 144: 'NumLock', + 145: 'ScrollLock', + 224: 'Meta' + }; + + /** + * @param {object} nativeEvent Native browser event. + * @return {string} Normalized `key` property. + */ + function getEventKey(nativeEvent) { + if (nativeEvent.key) { + // Normalize inconsistent values reported by browsers due to + // implementations of a working draft specification. + + // FireFox implements `key` but returns `MozPrintableKey` for all + // printable characters (normalized to `Unidentified`), ignore it. + var key = normalizeKey[nativeEvent.key] || nativeEvent.key; + if (key !== 'Unidentified') { + return key; + } + } + + // Browser does not implement `key`, polyfill as much of it as we can. + if (nativeEvent.type === 'keypress') { + var charCode = getEventCharCode(nativeEvent); + + // The enter-key is technically both printable and non-printable and can + // thus be captured by `keypress`, no other non-printable key should. + return charCode === 13 ? 'Enter' : String.fromCharCode(charCode); + } + if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') { + // While user keyboard layout determines the actual meaning of each + // `keyCode` value, almost all function keys have a universal value. + return translateToKey[nativeEvent.keyCode] || 'Unidentified'; + } + return ''; + } + + module.exports = getEventKey; + +/***/ }, +/* 137 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticDragEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticMouseEvent = __webpack_require__(85); + + /** + * @interface DragEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var DragEventInterface = { + dataTransfer: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface); + + module.exports = SyntheticDragEvent; + +/***/ }, +/* 138 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticTouchEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + + var getEventModifierState = __webpack_require__(87); + + /** + * @interface TouchEvent + * @see http://www.w3.org/TR/touch-events/ + */ + var TouchEventInterface = { + touches: null, + targetTouches: null, + changedTouches: null, + altKey: null, + metaKey: null, + ctrlKey: null, + shiftKey: null, + getModifierState: getEventModifierState + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface); + + module.exports = SyntheticTouchEvent; + +/***/ }, +/* 139 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticWheelEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticMouseEvent = __webpack_require__(85); + + /** + * @interface WheelEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var WheelEventInterface = { + deltaX: function (event) { + return 'deltaX' in event ? event.deltaX : + // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive). + 'wheelDeltaX' in event ? -event.wheelDeltaX : 0; + }, + deltaY: function (event) { + return 'deltaY' in event ? event.deltaY : + // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive). + 'wheelDeltaY' in event ? -event.wheelDeltaY : + // Fallback to `wheelDelta` for IE<9 and normalize (down is positive). + 'wheelDelta' in event ? -event.wheelDelta : 0; + }, + deltaZ: null, + + // Browsers without "deltaMode" is reporting in raw wheel delta where one + // notch on the scroll is always +/- 120, roughly equivalent to pixels. + // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or + // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size. + deltaMode: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticMouseEvent} + */ + function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface); + + module.exports = SyntheticWheelEvent; + +/***/ }, +/* 140 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SVGDOMPropertyConfig + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + + var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE; + + var NS = { + xlink: 'http://www.w3.org/1999/xlink', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + var SVGDOMPropertyConfig = { + Properties: { + clipPath: MUST_USE_ATTRIBUTE, + cx: MUST_USE_ATTRIBUTE, + cy: MUST_USE_ATTRIBUTE, + d: MUST_USE_ATTRIBUTE, + dx: MUST_USE_ATTRIBUTE, + dy: MUST_USE_ATTRIBUTE, + fill: MUST_USE_ATTRIBUTE, + fillOpacity: MUST_USE_ATTRIBUTE, + fontFamily: MUST_USE_ATTRIBUTE, + fontSize: MUST_USE_ATTRIBUTE, + fx: MUST_USE_ATTRIBUTE, + fy: MUST_USE_ATTRIBUTE, + gradientTransform: MUST_USE_ATTRIBUTE, + gradientUnits: MUST_USE_ATTRIBUTE, + markerEnd: MUST_USE_ATTRIBUTE, + markerMid: MUST_USE_ATTRIBUTE, + markerStart: MUST_USE_ATTRIBUTE, + offset: MUST_USE_ATTRIBUTE, + opacity: MUST_USE_ATTRIBUTE, + patternContentUnits: MUST_USE_ATTRIBUTE, + patternUnits: MUST_USE_ATTRIBUTE, + points: MUST_USE_ATTRIBUTE, + preserveAspectRatio: MUST_USE_ATTRIBUTE, + r: MUST_USE_ATTRIBUTE, + rx: MUST_USE_ATTRIBUTE, + ry: MUST_USE_ATTRIBUTE, + spreadMethod: MUST_USE_ATTRIBUTE, + stopColor: MUST_USE_ATTRIBUTE, + stopOpacity: MUST_USE_ATTRIBUTE, + stroke: MUST_USE_ATTRIBUTE, + strokeDasharray: MUST_USE_ATTRIBUTE, + strokeLinecap: MUST_USE_ATTRIBUTE, + strokeOpacity: MUST_USE_ATTRIBUTE, + strokeWidth: MUST_USE_ATTRIBUTE, + textAnchor: MUST_USE_ATTRIBUTE, + transform: MUST_USE_ATTRIBUTE, + version: MUST_USE_ATTRIBUTE, + viewBox: MUST_USE_ATTRIBUTE, + x1: MUST_USE_ATTRIBUTE, + x2: MUST_USE_ATTRIBUTE, + x: MUST_USE_ATTRIBUTE, + xlinkActuate: MUST_USE_ATTRIBUTE, + xlinkArcrole: MUST_USE_ATTRIBUTE, + xlinkHref: MUST_USE_ATTRIBUTE, + xlinkRole: MUST_USE_ATTRIBUTE, + xlinkShow: MUST_USE_ATTRIBUTE, + xlinkTitle: MUST_USE_ATTRIBUTE, + xlinkType: MUST_USE_ATTRIBUTE, + xmlBase: MUST_USE_ATTRIBUTE, + xmlLang: MUST_USE_ATTRIBUTE, + xmlSpace: MUST_USE_ATTRIBUTE, + y1: MUST_USE_ATTRIBUTE, + y2: MUST_USE_ATTRIBUTE, + y: MUST_USE_ATTRIBUTE + }, + DOMAttributeNamespaces: { + xlinkActuate: NS.xlink, + xlinkArcrole: NS.xlink, + xlinkHref: NS.xlink, + xlinkRole: NS.xlink, + xlinkShow: NS.xlink, + xlinkTitle: NS.xlink, + xlinkType: NS.xlink, + xmlBase: NS.xml, + xmlLang: NS.xml, + xmlSpace: NS.xml + }, + DOMAttributeNames: { + clipPath: 'clip-path', + fillOpacity: 'fill-opacity', + fontFamily: 'font-family', + fontSize: 'font-size', + gradientTransform: 'gradientTransform', + gradientUnits: 'gradientUnits', + markerEnd: 'marker-end', + markerMid: 'marker-mid', + markerStart: 'marker-start', + patternContentUnits: 'patternContentUnits', + patternUnits: 'patternUnits', + preserveAspectRatio: 'preserveAspectRatio', + spreadMethod: 'spreadMethod', + stopColor: 'stop-color', + stopOpacity: 'stop-opacity', + strokeDasharray: 'stroke-dasharray', + strokeLinecap: 'stroke-linecap', + strokeOpacity: 'stroke-opacity', + strokeWidth: 'stroke-width', + textAnchor: 'text-anchor', + viewBox: 'viewBox', + xlinkActuate: 'xlink:actuate', + xlinkArcrole: 'xlink:arcrole', + xlinkHref: 'xlink:href', + xlinkRole: 'xlink:role', + xlinkShow: 'xlink:show', + xlinkTitle: 'xlink:title', + xlinkType: 'xlink:type', + xmlBase: 'xml:base', + xmlLang: 'xml:lang', + xmlSpace: 'xml:space' + } + }; + + module.exports = SVGDOMPropertyConfig; + +/***/ }, +/* 141 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultPerf + * @typechecks static-only + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ReactDefaultPerfAnalysis = __webpack_require__(142); + var ReactMount = __webpack_require__(27); + var ReactPerf = __webpack_require__(17); + + var performanceNow = __webpack_require__(143); + + function roundFloat(val) { + return Math.floor(val * 100) / 100; + } + + function addValue(obj, key, val) { + obj[key] = (obj[key] || 0) + val; + } + + var ReactDefaultPerf = { + _allMeasurements: [], // last item in the list is the current one + _mountStack: [0], + _injected: false, + + start: function () { + if (!ReactDefaultPerf._injected) { + ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure); + } + + ReactDefaultPerf._allMeasurements.length = 0; + ReactPerf.enableMeasure = true; + }, + + stop: function () { + ReactPerf.enableMeasure = false; + }, + + getLastMeasurements: function () { + return ReactDefaultPerf._allMeasurements; + }, + + printExclusive: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements); + console.table(summary.map(function (item) { + return { + 'Component class name': item.componentName, + 'Total inclusive time (ms)': roundFloat(item.inclusive), + 'Exclusive mount time (ms)': roundFloat(item.exclusive), + 'Exclusive render time (ms)': roundFloat(item.render), + 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count), + 'Render time per instance (ms)': roundFloat(item.render / item.count), + 'Instances': item.count + }; + })); + // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct + // number. + }, + + printInclusive: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements); + console.table(summary.map(function (item) { + return { + 'Owner > component': item.componentName, + 'Inclusive time (ms)': roundFloat(item.time), + 'Instances': item.count + }; + })); + console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'); + }, + + getMeasurementsSummaryMap: function (measurements) { + var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true); + return summary.map(function (item) { + return { + 'Owner > component': item.componentName, + 'Wasted time (ms)': item.time, + 'Instances': item.count + }; + }); + }, + + printWasted: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements)); + console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'); + }, + + printDOM: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements); + console.table(summary.map(function (item) { + var result = {}; + result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id; + result.type = item.type; + result.args = JSON.stringify(item.args); + return result; + })); + console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'); + }, + + _recordWrite: function (id, fnName, totalTime, args) { + // TODO: totalTime isn't that useful since it doesn't count paints/reflows + var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes; + writes[id] = writes[id] || []; + writes[id].push({ + type: fnName, + time: totalTime, + args: args + }); + }, + + measure: function (moduleName, fnName, func) { + return function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var totalTime; + var rv; + var start; + + if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') { + // A "measurement" is a set of metrics recorded for each flush. We want + // to group the metrics for a given flush together so we can look at the + // components that rendered and the DOM operations that actually + // happened to determine the amount of "wasted work" performed. + ReactDefaultPerf._allMeasurements.push({ + exclusive: {}, + inclusive: {}, + render: {}, + counts: {}, + writes: {}, + displayNames: {}, + totalTime: 0, + created: {} + }); + start = performanceNow(); + rv = func.apply(this, args); + ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start; + return rv; + } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') { + start = performanceNow(); + rv = func.apply(this, args); + totalTime = performanceNow() - start; + + if (fnName === '_mountImageIntoNode') { + var mountID = ReactMount.getID(args[1]); + ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]); + } else if (fnName === 'dangerouslyProcessChildrenUpdates') { + // special format + args[0].forEach(function (update) { + var writeArgs = {}; + if (update.fromIndex !== null) { + writeArgs.fromIndex = update.fromIndex; + } + if (update.toIndex !== null) { + writeArgs.toIndex = update.toIndex; + } + if (update.textContent !== null) { + writeArgs.textContent = update.textContent; + } + if (update.markupIndex !== null) { + writeArgs.markup = args[1][update.markupIndex]; + } + ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs); + }); + } else { + // basic format + var id = args[0]; + if (typeof id === 'object') { + id = ReactMount.getID(args[0]); + } + ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1)); + } + return rv; + } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()? + fnName === '_renderValidatedComponent')) { + + if (this._currentElement.type === ReactMount.TopLevelWrapper) { + return func.apply(this, args); + } + + var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID; + var isRender = fnName === '_renderValidatedComponent'; + var isMount = fnName === 'mountComponent'; + + var mountStack = ReactDefaultPerf._mountStack; + var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1]; + + if (isRender) { + addValue(entry.counts, rootNodeID, 1); + } else if (isMount) { + entry.created[rootNodeID] = true; + mountStack.push(0); + } + + start = performanceNow(); + rv = func.apply(this, args); + totalTime = performanceNow() - start; + + if (isRender) { + addValue(entry.render, rootNodeID, totalTime); + } else if (isMount) { + var subMountTime = mountStack.pop(); + mountStack[mountStack.length - 1] += totalTime; + addValue(entry.exclusive, rootNodeID, totalTime - subMountTime); + addValue(entry.inclusive, rootNodeID, totalTime); + } else { + addValue(entry.inclusive, rootNodeID, totalTime); + } + + entry.displayNames[rootNodeID] = { + current: this.getName(), + owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>' + }; + + return rv; + } else { + return func.apply(this, args); + } + }; + } + }; + + module.exports = ReactDefaultPerf; + +/***/ }, +/* 142 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultPerfAnalysis + */ + + 'use strict'; + + var assign = __webpack_require__(38); + + // Don't try to save users less than 1.2ms (a number I made up) + var DONT_CARE_THRESHOLD = 1.2; + var DOM_OPERATION_TYPES = { + '_mountImageIntoNode': 'set innerHTML', + INSERT_MARKUP: 'set innerHTML', + MOVE_EXISTING: 'move', + REMOVE_NODE: 'remove', + SET_MARKUP: 'set innerHTML', + TEXT_CONTENT: 'set textContent', + 'setValueForProperty': 'update attribute', + 'setValueForAttribute': 'update attribute', + 'deleteValueForProperty': 'remove attribute', + 'dangerouslyReplaceNodeWithMarkupByID': 'replace' + }; + + function getTotalTime(measurements) { + // TODO: return number of DOM ops? could be misleading. + // TODO: measure dropped frames after reconcile? + // TODO: log total time of each reconcile and the top-level component + // class that triggered it. + var totalTime = 0; + for (var i = 0; i < measurements.length; i++) { + var measurement = measurements[i]; + totalTime += measurement.totalTime; + } + return totalTime; + } + + function getDOMSummary(measurements) { + var items = []; + measurements.forEach(function (measurement) { + Object.keys(measurement.writes).forEach(function (id) { + measurement.writes[id].forEach(function (write) { + items.push({ + id: id, + type: DOM_OPERATION_TYPES[write.type] || write.type, + args: write.args + }); + }); + }); + }); + return items; + } + + function getExclusiveSummary(measurements) { + var candidates = {}; + var displayName; + + for (var i = 0; i < measurements.length; i++) { + var measurement = measurements[i]; + var allIDs = assign({}, measurement.exclusive, measurement.inclusive); + + for (var id in allIDs) { + displayName = measurement.displayNames[id].current; + + candidates[displayName] = candidates[displayName] || { + componentName: displayName, + inclusive: 0, + exclusive: 0, + render: 0, + count: 0 + }; + if (measurement.render[id]) { + candidates[displayName].render += measurement.render[id]; + } + if (measurement.exclusive[id]) { + candidates[displayName].exclusive += measurement.exclusive[id]; + } + if (measurement.inclusive[id]) { + candidates[displayName].inclusive += measurement.inclusive[id]; + } + if (measurement.counts[id]) { + candidates[displayName].count += measurement.counts[id]; + } + } + } + + // Now make a sorted array with the results. + var arr = []; + for (displayName in candidates) { + if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) { + arr.push(candidates[displayName]); + } + } + + arr.sort(function (a, b) { + return b.exclusive - a.exclusive; + }); + + return arr; + } + + function getInclusiveSummary(measurements, onlyClean) { + var candidates = {}; + var inclusiveKey; + + for (var i = 0; i < measurements.length; i++) { + var measurement = measurements[i]; + var allIDs = assign({}, measurement.exclusive, measurement.inclusive); + var cleanComponents; + + if (onlyClean) { + cleanComponents = getUnchangedComponents(measurement); + } + + for (var id in allIDs) { + if (onlyClean && !cleanComponents[id]) { + continue; + } + + var displayName = measurement.displayNames[id]; + + // Inclusive time is not useful for many components without knowing where + // they are instantiated. So we aggregate inclusive time with both the + // owner and current displayName as the key. + inclusiveKey = displayName.owner + ' > ' + displayName.current; + + candidates[inclusiveKey] = candidates[inclusiveKey] || { + componentName: inclusiveKey, + time: 0, + count: 0 + }; + + if (measurement.inclusive[id]) { + candidates[inclusiveKey].time += measurement.inclusive[id]; + } + if (measurement.counts[id]) { + candidates[inclusiveKey].count += measurement.counts[id]; + } + } + } + + // Now make a sorted array with the results. + var arr = []; + for (inclusiveKey in candidates) { + if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) { + arr.push(candidates[inclusiveKey]); + } + } + + arr.sort(function (a, b) { + return b.time - a.time; + }); + + return arr; + } + + function getUnchangedComponents(measurement) { + // For a given reconcile, look at which components did not actually + // render anything to the DOM and return a mapping of their ID to + // the amount of time it took to render the entire subtree. + var cleanComponents = {}; + var dirtyLeafIDs = Object.keys(measurement.writes); + var allIDs = assign({}, measurement.exclusive, measurement.inclusive); + + for (var id in allIDs) { + var isDirty = false; + // For each component that rendered, see if a component that triggered + // a DOM op is in its subtree. + for (var i = 0; i < dirtyLeafIDs.length; i++) { + if (dirtyLeafIDs[i].indexOf(id) === 0) { + isDirty = true; + break; + } + } + // check if component newly created + if (measurement.created[id]) { + isDirty = true; + } + if (!isDirty && measurement.counts[id] > 0) { + cleanComponents[id] = true; + } + } + return cleanComponents; + } + + var ReactDefaultPerfAnalysis = { + getExclusiveSummary: getExclusiveSummary, + getInclusiveSummary: getInclusiveSummary, + getDOMSummary: getDOMSummary, + getTotalTime: getTotalTime + }; + + module.exports = ReactDefaultPerfAnalysis; + +/***/ }, +/* 143 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule performanceNow + * @typechecks + */ + + 'use strict'; + + var performance = __webpack_require__(144); + var curPerformance = performance; + + /** + * Detect if we can use `window.performance.now()` and gracefully fallback to + * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now + * because of Facebook's testing infrastructure. + */ + if (!curPerformance || !curPerformance.now) { + curPerformance = Date; + } + + var performanceNow = curPerformance.now.bind(curPerformance); + + module.exports = performanceNow; + +/***/ }, +/* 144 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule performance + * @typechecks + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var performance; + + if (ExecutionEnvironment.canUseDOM) { + performance = window.performance || window.msPerformance || window.webkitPerformance; + } + + module.exports = performance || {}; + +/***/ }, +/* 145 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactVersion + */ + + 'use strict'; + + module.exports = '0.14.3'; + +/***/ }, +/* 146 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule renderSubtreeIntoContainer + */ + + 'use strict'; + + var ReactMount = __webpack_require__(27); + + module.exports = ReactMount.renderSubtreeIntoContainer; + +/***/ }, +/* 147 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(148); + + +/***/ }, +/* 148 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule React + */ + + 'use strict'; + + var ReactDOM = __webpack_require__(2); + var ReactDOMServer = __webpack_require__(149); + var ReactIsomorphic = __webpack_require__(153); + + var assign = __webpack_require__(38); + var deprecated = __webpack_require__(158); + + // `version` will be added here by ReactIsomorphic. + var React = {}; + + assign(React, ReactIsomorphic); + + assign(React, { + // ReactDOM + findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode), + render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render), + unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode), + + // ReactDOMServer + renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString), + renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup) + }); + + React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM; + React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer; + + module.exports = React; + +/***/ }, +/* 149 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMServer + */ + + 'use strict'; + + var ReactDefaultInjection = __webpack_require__(70); + var ReactServerRendering = __webpack_require__(150); + var ReactVersion = __webpack_require__(145); + + ReactDefaultInjection.inject(); + + var ReactDOMServer = { + renderToString: ReactServerRendering.renderToString, + renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup, + version: ReactVersion + }; + + module.exports = ReactDOMServer; + +/***/ }, +/* 150 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @typechecks static-only + * @providesModule ReactServerRendering + */ + 'use strict'; + + var ReactDefaultBatchingStrategy = __webpack_require__(91); + var ReactElement = __webpack_require__(41); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMarkupChecksum = __webpack_require__(47); + var ReactServerBatchingStrategy = __webpack_require__(151); + var ReactServerRenderingTransaction = __webpack_require__(152); + var ReactUpdates = __webpack_require__(53); + + var emptyObject = __webpack_require__(57); + var instantiateReactComponent = __webpack_require__(61); + var invariant = __webpack_require__(12); + + /** + * @param {ReactElement} element + * @return {string} the HTML markup + */ + function renderToString(element) { + !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined; + + var transaction; + try { + ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy); + + var id = ReactInstanceHandles.createReactRootID(); + transaction = ReactServerRenderingTransaction.getPooled(false); + + return transaction.perform(function () { + var componentInstance = instantiateReactComponent(element, null); + var markup = componentInstance.mountComponent(id, transaction, emptyObject); + return ReactMarkupChecksum.addChecksumToMarkup(markup); + }, null); + } finally { + ReactServerRenderingTransaction.release(transaction); + // Revert to the DOM batching strategy since these two renderers + // currently share these stateful modules. + ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); + } + } + + /** + * @param {ReactElement} element + * @return {string} the HTML markup, without the extra React ID and checksum + * (for generating static pages) + */ + function renderToStaticMarkup(element) { + !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined; + + var transaction; + try { + ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy); + + var id = ReactInstanceHandles.createReactRootID(); + transaction = ReactServerRenderingTransaction.getPooled(true); + + return transaction.perform(function () { + var componentInstance = instantiateReactComponent(element, null); + return componentInstance.mountComponent(id, transaction, emptyObject); + }, null); + } finally { + ReactServerRenderingTransaction.release(transaction); + // Revert to the DOM batching strategy since these two renderers + // currently share these stateful modules. + ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); + } + } + + module.exports = { + renderToString: renderToString, + renderToStaticMarkup: renderToStaticMarkup + }; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 151 */ +/***/ function(module, exports) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactServerBatchingStrategy + * @typechecks + */ + + 'use strict'; + + var ReactServerBatchingStrategy = { + isBatchingUpdates: false, + batchedUpdates: function (callback) { + // Don't do anything here. During the server rendering we don't want to + // schedule any updates. We will simply ignore them. + } + }; + + module.exports = ReactServerBatchingStrategy; + +/***/ }, +/* 152 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactServerRenderingTransaction + * @typechecks + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + var CallbackQueue = __webpack_require__(54); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + + /** + * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks + * during the performing of the transaction. + */ + var ON_DOM_READY_QUEUEING = { + /** + * Initializes the internal `onDOMReady` queue. + */ + initialize: function () { + this.reactMountReady.reset(); + }, + + close: emptyFunction + }; + + /** + * Executed within the scope of the `Transaction` instance. Consider these as + * being member methods, but with an implied ordering while being isolated from + * each other. + */ + var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING]; + + /** + * @class ReactServerRenderingTransaction + * @param {boolean} renderToStaticMarkup + */ + function ReactServerRenderingTransaction(renderToStaticMarkup) { + this.reinitializeTransaction(); + this.renderToStaticMarkup = renderToStaticMarkup; + this.reactMountReady = CallbackQueue.getPooled(null); + this.useCreateElement = false; + } + + var Mixin = { + /** + * @see Transaction + * @abstract + * @final + * @return {array} Empty list of operation wrap procedures. + */ + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + }, + + /** + * @return {object} The queue to collect `onDOMReady` callbacks with. + */ + getReactMountReady: function () { + return this.reactMountReady; + }, + + /** + * `PooledClass` looks for this, and will invoke this before allowing this + * instance to be reused. + */ + destructor: function () { + CallbackQueue.release(this.reactMountReady); + this.reactMountReady = null; + } + }; + + assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin); + + PooledClass.addPoolingTo(ReactServerRenderingTransaction); + + module.exports = ReactServerRenderingTransaction; + +/***/ }, +/* 153 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactIsomorphic + */ + + 'use strict'; + + var ReactChildren = __webpack_require__(109); + var ReactComponent = __webpack_require__(122); + var ReactClass = __webpack_require__(121); + var ReactDOMFactories = __webpack_require__(154); + var ReactElement = __webpack_require__(41); + var ReactElementValidator = __webpack_require__(155); + var ReactPropTypes = __webpack_require__(106); + var ReactVersion = __webpack_require__(145); + + var assign = __webpack_require__(38); + var onlyChild = __webpack_require__(157); + + var createElement = ReactElement.createElement; + var createFactory = ReactElement.createFactory; + var cloneElement = ReactElement.cloneElement; + + if (process.env.NODE_ENV !== 'production') { + createElement = ReactElementValidator.createElement; + createFactory = ReactElementValidator.createFactory; + cloneElement = ReactElementValidator.cloneElement; + } + + var React = { + + // Modern + + Children: { + map: ReactChildren.map, + forEach: ReactChildren.forEach, + count: ReactChildren.count, + toArray: ReactChildren.toArray, + only: onlyChild + }, + + Component: ReactComponent, + + createElement: createElement, + cloneElement: cloneElement, + isValidElement: ReactElement.isValidElement, + + // Classic + + PropTypes: ReactPropTypes, + createClass: ReactClass.createClass, + createFactory: createFactory, + createMixin: function (mixin) { + // Currently a noop. Will be used to validate and trace mixins. + return mixin; + }, + + // This looks DOM specific but these are actually isomorphic helpers + // since they are just generating DOM strings. + DOM: ReactDOMFactories, + + version: ReactVersion, + + // Hook for JSX spread, don't use this for anything else. + __spread: assign + }; + + module.exports = React; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 154 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMFactories + * @typechecks static-only + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactElementValidator = __webpack_require__(155); + + var mapObject = __webpack_require__(156); + + /** + * Create a factory that creates HTML tag elements. + * + * @param {string} tag Tag name (e.g. `div`). + * @private + */ + function createDOMFactory(tag) { + if (process.env.NODE_ENV !== 'production') { + return ReactElementValidator.createFactory(tag); + } + return ReactElement.createFactory(tag); + } + + /** + * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes. + * This is also accessible via `React.DOM`. + * + * @public + */ + var ReactDOMFactories = mapObject({ + a: 'a', + abbr: 'abbr', + address: 'address', + area: 'area', + article: 'article', + aside: 'aside', + audio: 'audio', + b: 'b', + base: 'base', + bdi: 'bdi', + bdo: 'bdo', + big: 'big', + blockquote: 'blockquote', + body: 'body', + br: 'br', + button: 'button', + canvas: 'canvas', + caption: 'caption', + cite: 'cite', + code: 'code', + col: 'col', + colgroup: 'colgroup', + data: 'data', + datalist: 'datalist', + dd: 'dd', + del: 'del', + details: 'details', + dfn: 'dfn', + dialog: 'dialog', + div: 'div', + dl: 'dl', + dt: 'dt', + em: 'em', + embed: 'embed', + fieldset: 'fieldset', + figcaption: 'figcaption', + figure: 'figure', + footer: 'footer', + form: 'form', + h1: 'h1', + h2: 'h2', + h3: 'h3', + h4: 'h4', + h5: 'h5', + h6: 'h6', + head: 'head', + header: 'header', + hgroup: 'hgroup', + hr: 'hr', + html: 'html', + i: 'i', + iframe: 'iframe', + img: 'img', + input: 'input', + ins: 'ins', + kbd: 'kbd', + keygen: 'keygen', + label: 'label', + legend: 'legend', + li: 'li', + link: 'link', + main: 'main', + map: 'map', + mark: 'mark', + menu: 'menu', + menuitem: 'menuitem', + meta: 'meta', + meter: 'meter', + nav: 'nav', + noscript: 'noscript', + object: 'object', + ol: 'ol', + optgroup: 'optgroup', + option: 'option', + output: 'output', + p: 'p', + param: 'param', + picture: 'picture', + pre: 'pre', + progress: 'progress', + q: 'q', + rp: 'rp', + rt: 'rt', + ruby: 'ruby', + s: 's', + samp: 'samp', + script: 'script', + section: 'section', + select: 'select', + small: 'small', + source: 'source', + span: 'span', + strong: 'strong', + style: 'style', + sub: 'sub', + summary: 'summary', + sup: 'sup', + table: 'table', + tbody: 'tbody', + td: 'td', + textarea: 'textarea', + tfoot: 'tfoot', + th: 'th', + thead: 'thead', + time: 'time', + title: 'title', + tr: 'tr', + track: 'track', + u: 'u', + ul: 'ul', + 'var': 'var', + video: 'video', + wbr: 'wbr', + + // SVG + circle: 'circle', + clipPath: 'clipPath', + defs: 'defs', + ellipse: 'ellipse', + g: 'g', + image: 'image', + line: 'line', + linearGradient: 'linearGradient', + mask: 'mask', + path: 'path', + pattern: 'pattern', + polygon: 'polygon', + polyline: 'polyline', + radialGradient: 'radialGradient', + rect: 'rect', + stop: 'stop', + svg: 'svg', + text: 'text', + tspan: 'tspan' + + }, createDOMFactory); + + module.exports = ReactDOMFactories; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 155 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactElementValidator + */ + + /** + * ReactElementValidator provides a wrapper around a element factory + * which validates the props passed to the element. This is intended to be + * used only in DEV and could be replaced by a static type checker for languages + * that support it. + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactPropTypeLocations = __webpack_require__(64); + var ReactPropTypeLocationNames = __webpack_require__(65); + var ReactCurrentOwner = __webpack_require__(4); + + var canDefineProperty = __webpack_require__(42); + var getIteratorFn = __webpack_require__(107); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + function getDeclarationErrorAddendum() { + if (ReactCurrentOwner.current) { + var name = ReactCurrentOwner.current.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + /** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + var ownerHasKeyUseWarning = {}; + + var loggedTypeFailures = {}; + + /** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + function validateExplicitKey(element, parentType) { + if (!element._store || element._store.validated || element.key != null) { + return; + } + element._store.validated = true; + + var addenda = getAddendaForKeyUse('uniqueKey', element, parentType); + if (addenda === null) { + // we already showed the warning + return; + } + process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined; + } + + /** + * Shared warning and monitoring code for the key warnings. + * + * @internal + * @param {string} messageType A key used for de-duping warnings. + * @param {ReactElement} element Component that requires a key. + * @param {*} parentType element's parent's type. + * @returns {?object} A set of addenda to use in the warning message, or null + * if the warning has already been shown before (and shouldn't be shown again). + */ + function getAddendaForKeyUse(messageType, element, parentType) { + var addendum = getDeclarationErrorAddendum(); + if (!addendum) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + if (parentName) { + addendum = ' Check the top-level render call using <' + parentName + '>.'; + } + } + + var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {}); + if (memoizer[addendum]) { + return null; + } + memoizer[addendum] = true; + + var addenda = { + parentOrOwner: addendum, + url: ' See https://fb.me/react-warning-keys for more information.', + childOwner: null + }; + + // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + if (element && element._owner && element._owner !== ReactCurrentOwner.current) { + // Give the component that originally created this child. + addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.'; + } + + return addenda; + } + + /** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + function validateChildKeys(node, parentType) { + if (typeof node !== 'object') { + return; + } + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + if (ReactElement.isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (ReactElement.isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + // Entry iterators provide implicit keys. + if (iteratorFn) { + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + while (!(step = iterator.next()).done) { + if (ReactElement.isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } + + /** + * Assert that the props are valid + * + * @param {string} componentName Name of the component for error messages. + * @param {object} propTypes Map of prop name to a ReactPropType + * @param {object} props + * @param {string} location e.g. "prop", "context", "child context" + * @private + */ + function checkPropTypes(componentName, propTypes, props, location) { + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined; + error = propTypes[propName](props, propName, componentName, location); + } catch (ex) { + error = ex; + } + process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined; + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var addendum = getDeclarationErrorAddendum(); + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined; + } + } + } + } + + /** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + function validatePropTypes(element) { + var componentClass = element.type; + if (typeof componentClass !== 'function') { + return; + } + var name = componentClass.displayName || componentClass.name; + if (componentClass.propTypes) { + checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop); + } + if (typeof componentClass.getDefaultProps === 'function') { + process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined; + } + } + + var ReactElementValidator = { + + createElement: function (type, props, children) { + var validType = typeof type === 'string' || typeof type === 'function'; + // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined; + + var element = ReactElement.createElement.apply(this, arguments); + + // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + if (element == null) { + return element; + } + + // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + if (validType) { + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + validatePropTypes(element); + + return element; + }, + + createFactory: function (type) { + var validatedFactory = ReactElementValidator.createElement.bind(null, type); + // Legacy hook TODO: Warn if this is accessed + validatedFactory.type = type; + + if (process.env.NODE_ENV !== 'production') { + if (canDefineProperty) { + Object.defineProperty(validatedFactory, 'type', { + enumerable: false, + get: function () { + process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined; + Object.defineProperty(this, 'type', { + value: type + }); + return type; + } + }); + } + } + + return validatedFactory; + }, + + cloneElement: function (element, props, children) { + var newElement = ReactElement.cloneElement.apply(this, arguments); + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], newElement.type); + } + validatePropTypes(newElement); + return newElement; + } + + }; + + module.exports = ReactElementValidator; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 156 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule mapObject + */ + + 'use strict'; + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + /** + * Executes the provided `callback` once for each enumerable own property in the + * object and constructs a new object from the results. The `callback` is + * invoked with three arguments: + * + * - the property value + * - the property name + * - the object being traversed + * + * Properties that are added after the call to `mapObject` will not be visited + * by `callback`. If the values of existing properties are changed, the value + * passed to `callback` will be the value at the time `mapObject` visits them. + * Properties that are deleted before being visited are not visited. + * + * @grep function objectMap() + * @grep function objMap() + * + * @param {?object} object + * @param {function} callback + * @param {*} context + * @return {?object} + */ + function mapObject(object, callback, context) { + if (!object) { + return null; + } + var result = {}; + for (var name in object) { + if (hasOwnProperty.call(object, name)) { + result[name] = callback.call(context, object[name], name, object); + } + } + return result; + } + + module.exports = mapObject; + +/***/ }, +/* 157 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule onlyChild + */ + 'use strict'; + + var ReactElement = __webpack_require__(41); + + var invariant = __webpack_require__(12); + + /** + * Returns the first child in a collection of children and verifies that there + * is only one child in the collection. The current implementation of this + * function assumes that a single child gets passed without a wrapper, but the + * purpose of this helper function is to abstract away the particular structure + * of children. + * + * @param {?object} children Child collection structure. + * @return {ReactComponent} The first and only `ReactComponent` contained in the + * structure. + */ + function onlyChild(children) { + !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined; + return children; + } + + module.exports = onlyChild; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 158 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule deprecated + */ + + 'use strict'; + + var assign = __webpack_require__(38); + var warning = __webpack_require__(24); + + /** + * This will log a single deprecation notice per function and forward the call + * on to the new API. + * + * @param {string} fnName The name of the function + * @param {string} newModule The module that fn will exist in + * @param {string} newPackage The module that fn will exist in + * @param {*} ctx The context this forwarded call should run in + * @param {function} fn The function to forward on to + * @return {function} The function that will warn once and then call fn + */ + function deprecated(fnName, newModule, newPackage, ctx, fn) { + var warned = false; + if (process.env.NODE_ENV !== 'production') { + var newFn = function () { + process.env.NODE_ENV !== 'production' ? warning(warned, + // Require examples in this string must be split to prevent React's + // build tools from mistaking them for real requires. + // Otherwise the build tools will attempt to build a '%s' module. + 'React.%s is deprecated. Please use %s.%s from require' + '(\'%s\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined; + warned = true; + return fn.apply(ctx, arguments); + }; + // We need to make sure all properties of the original fn are copied over. + // In particular, this is needed to support PropTypes + return assign(newFn, fn); + } + + return fn; + } + + module.exports = deprecated; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 159 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _jquery = __webpack_require__(161); + + var _jquery2 = _interopRequireDefault(_jquery); + + var _componentsInput = __webpack_require__(162); + + var _componentsInput2 = _interopRequireDefault(_componentsInput); + + var _componentsIcon = __webpack_require__(163); + + var _componentsIcon2 = _interopRequireDefault(_componentsIcon); + + var _componentsInputError = __webpack_require__(164); + + var _componentsInputError2 = _interopRequireDefault(_componentsInputError); + + var _componentsUtils = __webpack_require__(167); + + var LoginComponent = (function (_React$Component) { + _inherits(LoginComponent, _React$Component); + + function LoginComponent(props) { + var _this = this; + + _classCallCheck(this, LoginComponent); + + _get(Object.getPrototypeOf(LoginComponent.prototype), 'constructor', this).call(this, props); + + this.saveAndContinue = function (event) { + event.preventDefault(); + var data = { + username: _this.state.username, + password: _this.state.password, + 'continue': decodeURIComponent((0, _componentsUtils.getQueryVariable)('continue')) + }, + self = _this; + + _jquery2['default'].post('/login/', data).done(function (result) { + var res = JSON.parse(result); + if (res.r) { + self.setState({ + errorVisible: true, + errorMessage: res.message + }); + } else { + window.location = res['continue']; + } + }); + }; + + this.handleUsernameInput = function (event) { + _this.setState({ + username: event.target.value + }); + }; + + this.handlePasswordInput = function (event) { + _this.setState({ + password: event.target.value + }); + }; + + this.state = { + username: null, + password: null, + errorVisible: false, + errorMessage: '登录失败, 请联系管理员' + }; + } + + _createClass(LoginComponent, [{ + key: 'render', + value: function render() { + return _react2['default'].createElement( + 'div', + { className: 'create_account_screen' }, + _react2['default'].createElement( + 'div', + { className: 'create_account_form' }, + _react2['default'].createElement( + 'h1', + null, + '登录CODE' + ), + _react2['default'].createElement( + 'form', + { onSubmit: this.saveAndContinue }, + _react2['default'].createElement(_componentsInput2['default'], { + text: '用户名', + ref: 'username', + type: 'text', + defaultValue: this.state.username, + value: this.state.username, + onChange: this.handleUsernameInput + }), + _react2['default'].createElement(_componentsInput2['default'], { + text: '密码', + type: 'password', + ref: 'text', + defaultValue: this.state.username, + value: this.state.passsword, + onChange: this.handlePasswordInput + }), + _react2['default'].createElement(_componentsInputError2['default'], { + visible: this.state.errorVisible, + errorMessage: this.state.errorMessage + }), + _react2['default'].createElement( + 'button', + { + type: 'submit', + className: 'button button_wide' }, + '登录' + ) + ) + ) + ); + } + }]); + + return LoginComponent; + })(_react2['default'].Component); + + exports.LoginComponent = LoginComponent; + + var Login = (function (_React$Component2) { + _inherits(Login, _React$Component2); + + function Login() { + _classCallCheck(this, Login); + + _get(Object.getPrototypeOf(Login.prototype), 'constructor', this).apply(this, arguments); + } + + _createClass(Login, [{ + key: 'render', + value: function render() { + return _react2['default'].createElement( + 'div', + { className: 'application_wrapper' }, + _react2['default'].createElement( + 'div', + { className: 'application_routeHandler' }, + _react2['default'].createElement(LoginComponent, null) + ) + ); + } + }]); + + return Login; + })(_react2['default'].Component); + + exports['default'] = Login; + +/***/ }, +/* 160 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3 + // http://underscorejs.org + // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + // Underscore may be freely distributed under the MIT license. + + (function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (true) { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return _; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + }.call(this)); + + +/***/ }, +/* 161 */, +/* 162 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _Icon = __webpack_require__(163); + + var _Icon2 = _interopRequireDefault(_Icon); + + var _InputError = __webpack_require__(164); + + var _InputError2 = _interopRequireDefault(_InputError); + + var _PasswordValidator = __webpack_require__(166); + + var _PasswordValidator2 = _interopRequireDefault(_PasswordValidator); + + var _classnamesBind = __webpack_require__(165); + + var _classnamesBind2 = _interopRequireDefault(_classnamesBind); + + var cx = _classnamesBind2['default'].bind({}); + + var Input = (function (_React$Component) { + _inherits(Input, _React$Component); + + function Input(props) { + var _this = this; + + _classCallCheck(this, Input); + + _get(Object.getPrototypeOf(Input.prototype), 'constructor', this).call(this, props); + + this.handleChange = function (event) { + _this.setState({ + value: event.target.value, + empty: _underscore2['default'].isEmpty(event.target.value) + }); + + if (_this.props.validator) { + _this.checkRules(event.target.value); + }; + + if (_this.props.validate) { + _this.validateInput(event.target.value); + } + + if (_this.props.onChange) { + _this.props.onChange(event); + } + }; + + this.validateInput = function (value) { + // trigger custom validation method in the parent component + if (_this.props.validate && _this.props.validate(value)) { + _this.setState({ + valid: true, + errorVisible: false + }); + } else { + _this.setState({ + valid: false, + errorMessage: !_underscore2['default'].isEmpty(value) ? _this.props.errorMessage : _this.props.emptyMessage + }); + } + }; + + this.componentWillReceiveProps = function (newProps) { + // perform update only when new value exists and not empty + if (newProps.value) { + if (!_underscore2['default'].isUndefined(newProps.value) && newProps.value.length > 0) { + if (_this.props.validate) { + _this.validateInput(newProps.value); + } + _this.setState({ + value: newProps.value, + empty: _underscore2['default'].isEmpty(newProps.value) + }); + } + } + }; + + this.handleFocus = function (event) { + _this.setState({ + focus: true, + validatorVisible: true + }); + + if (_this.props.validator) { + _this.setState({ + errorVisible: false + }); + } + }; + + this.handleBlur = function (event) { + _this.setState({ + focus: false, + errorVisible: !_this.state.valid, + validatorVisible: false + }); + }; + + this.checkRules = function (value) { + var validData = { + minChars: !_underscore2['default'].isEmpty(value) ? value.length >= parseInt(_this.state.minCharacters) : false, + capitalLetters: !_underscore2['default'].isEmpty(value) ? _this.countCapitals(value) : false, + numbers: !_underscore2['default'].isEmpty(value) ? _this.countNumbers(value) > 0 : false, + words: !_underscore2['default'].isEmpty(value) ? !_this.checkWords(value) : false + }; + var allValid = validData.minChars && validData.capitalLetters && validData.numbers && validData.words; + + _this.setState({ + isValidatorValid: validData, + allValidatorValid: allValid, + valid: allValid + }); + }; + + this.countCapitals = function (value) { + return value.replace(/[^A-Z]/g, "").length; + }; + + this.countNumbers = function (value) { + return (/\d/.test(value) + ); + }; + + this.checkWords = function (value) { + return _underscore2['default'].some(_this.state.forbiddenWords, function (word) { + var matched = word === value ? true : ""; + return matched; + }); + }; + + this.state = { + valid: this.props.isValid && this.props.isValid() || true, + empty: _underscore2['default'].isEmpty(this.props.value), + focus: false, + value: null, + iconsVisible: !this.props.validator, + errorMessage: this.props.emptyMessage, + validator: this.props.validator, + validatorVisible: false, + type: this.props.type, + minCharacters: this.props.minCharacters, + requireCapitals: this.props.requireCapitals, + requireNumbers: this.props.requireNumbers, + forbiddenWords: this.props.forbiddenWords, + isValidatorValid: { + minChars: false, + capitalLetters: false, + numbers: false, + words: false, + all: false + }, + allValidatorValid: false + }; + } + + _createClass(Input, [{ + key: 'isValid', + value: function isValid() { + if (this.props.validate) { + if (_underscore2['default'].isEmpty(this.state.value) || !this.props.validate(this.state.value)) { + this.setState({ + valid: false, + errorVisible: true + }); + } + } + + return this.state.valid; + } + }, { + key: 'mouseEnterError', + value: function mouseEnterError() { + this.setState({ + errorVisible: true + }); + } + }, { + key: 'hideError', + value: function hideError() { + this.setState({ + errorVisible: false, + validatorVisible: false + }); + } + + // validator function + }, { + key: 'render', + value: function render() { + + var inputGroupClasses = cx({ + 'input_group': true, + 'input_valid': this.state.valid, + 'input_error': !this.state.valid, + 'input_empty': this.state.empty, + 'input_hasValue': !this.state.empty, + 'input_focused': this.state.focus, + 'input_unfocused': !this.state.focus + }); + + var validator; + + if (this.state.validator) { + validator = _react2['default'].createElement(_PasswordValidator2['default'], { + ref: 'passwordValidator', + visible: this.state.validatorVisible, + name: this.props.text, + value: this.state.value, + validData: this.state.isValidatorValid, + valid: this.state.allValidatorValid, + forbiddenWords: this.state.forbiddenWords, + minCharacters: this.props.minCharacters, + requireCapitals: this.props.requireCapitals, + requireNumbers: this.props.requireNumbers + }); + }; + + return _react2['default'].createElement( + 'div', + { className: inputGroupClasses }, + _react2['default'].createElement( + 'label', + { className: 'input_label', htmlFor: this.props.text }, + _react2['default'].createElement( + 'span', + { className: 'label_text' }, + this.props.text + ) + ), + _react2['default'].createElement('input', _extends({}, this.props, { + placeholder: this.props.placeholder, + className: 'input', + id: this.props.text, + defaultValue: this.props.defaultValue, + value: this.state.value, + onChange: this.handleChange, + onFocus: this.handleFocus, + onBlur: this.handleBlur, + autoComplete: 'off' + })), + _react2['default'].createElement(_InputError2['default'], { + visible: this.state.errorVisible, + errorMessage: this.state.errorMessage + }), + _react2['default'].createElement( + 'div', + { className: 'validationIcons' }, + _react2['default'].createElement( + 'i', + { className: 'input_error_icon', onMouseEnter: this.mouseEnterError }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'input_valid_icon' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick' }), + ' ' + ) + ), + validator + ); + } + }]); + + return Input; + })(_react2['default'].Component); + + exports['default'] = Input; + ; + module.exports = exports['default']; + +/***/ }, +/* 163 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var Icon = (function (_React$Component) { + _inherits(Icon, _React$Component); + + function Icon() { + _classCallCheck(this, Icon); + + _get(Object.getPrototypeOf(Icon.prototype), 'constructor', this).apply(this, arguments); + } + + _createClass(Icon, [{ + key: 'render', + value: function render() { + switch (this.props.type) { + + case 'circle_error': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 20 20' }, + _react2['default'].createElement('path', { d: 'M10,0.982c4.973,0,9.018,4.046,9.018,9.018S14.973,19.018,10,19.018S0.982,14.973,0.982,10 S5.027,0.982,10,0.982 M10,0C4.477,0,0,4.477,0,10c0,5.523,4.477,10,10,10s10-4.477,10-10C20,4.477,15.523,0,10,0L10,0z M9,5.703 V5.441h2.5v0.262l-0.66,5.779H9.66L9,5.703z M9.44,12.951h1.621v1.491H9.44V12.951z' }) + ); + + case 'circle_tick': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 23 23' }, + _react2['default'].createElement('path', { d: 'M11.5,23C5.2,23,0,17.8,0,11.5S5.2,0,11.5,0S23,5.2,23,11.5S17.8,23,11.5,23z M11.5,1C5.7,1,1,5.7,1,11.5S5.7,22,11.5,22 S22,17.3,22,11.5S17.3,1,11.5,1z M10.4,15.2l6.7-7c0.2-0.2,0.2-0.5,0-0.7c-0.2-0.2-0.5-0.2-0.7,0L10,14.2L7,11 c-0.2-0.2-0.5-0.2-0.7,0c-0.2,0.2-0.2,0.5,0,0.7l3.4,3.5c0.1,0.1,0.2,0.1,0.3,0.1S10.3,15.3,10.4,15.2z' }) + ); + + case 'circle_tick_filled': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 20 20' }, + _react2['default'].createElement('path', { fill: '#4FB07F', d: 'M9.5,0C14.7,0,19,4.3,19,9.5S14.7,19,9.5,19S0,14.7,0,9.5S4.3,0,9.5,0z' }), + _react2['default'].createElement('path', { fill: '#FFFFFF', d: 'M8.7,12.9c-0.1,0-0.2,0-0.3-0.1l-2.4-2.5c-0.1-0.1-0.1-0.4,0-0.5c0.1-0.2,0.4-0.2,0.5,0L8.7,12l4.6-5 c0.1-0.1,0.4-0.1,0.5,0c0.1,0.2,0.1,0.4,0,0.5L9,12.8C9,12.8,8.9,12.9,8.7,12.9C8.8,12.9,8.8,12.9,8.7,12.9z' }) + ); + + case 'guthub': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 34 34' }, + _react2['default'].createElement('path', { 'fill-rule': 'evenodd', 'clip-rule': 'evenodd', fill: '#191717', d: 'M32.6,16.3c0,7.2-4.7,13.3-11.1,15.5c-0.8,0.2-1.1-0.3-1.1-0.8 c0-0.5,0-2.3,0-4.5c0-1.5-0.5-2.5-1.1-3c3.6-0.4,7.4-1.8,7.4-8c0-1.8-0.6-3.2-1.7-4.4c0.2-0.4,0.7-2.1-0.2-4.3c0,0-1.4-0.4-4.5,1.7 c-1.3-0.4-2.7-0.5-4.1-0.5c-1.4,0-2.8,0.2-4.1,0.5C9.1,6.3,7.7,6.8,7.7,6.8C6.8,9,7.4,10.7,7.6,11.1c-1,1.1-1.7,2.6-1.7,4.4 c0,6.2,3.8,7.6,7.4,8.1c-0.5,0.4-0.9,1.1-1,2.2c-0.9,0.4-3.3,1.1-4.7-1.4c0,0-0.9-1.6-2.5-1.7c0,0-1.6,0-0.1,1c0,0,1.1,0.5,1.8,2.4 c0,0,1,3.2,5.5,2.2c0,1.4,0,2.4,0,2.8c0,0.4-0.3,0.9-1.1,0.8C4.7,29.6,0,23.5,0,16.3C0,7.3,7.3,0,16.3,0C25.3,0,32.6,7.3,32.6,16.3z ' }) + ); + } + } + }]); + + return Icon; + })(_react2['default'].Component); + + exports['default'] = Icon; + module.exports = exports['default']; + +/***/ }, +/* 164 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _classnamesBind = __webpack_require__(165); + + var _classnamesBind2 = _interopRequireDefault(_classnamesBind); + + var cx = _classnamesBind2['default'].bind({}); + + var InputError = (function (_React$Component) { + _inherits(InputError, _React$Component); + + function InputError(props) { + _classCallCheck(this, InputError); + + _get(Object.getPrototypeOf(InputError.prototype), 'constructor', this).call(this, props); + this.state = { + message: 'Input is invalid' + }; + } + + _createClass(InputError, [{ + key: 'render', + value: function render() { + var errorClass = cx({ + 'error_container': true, + 'visible': this.props.visible, + 'invisible': !this.props.visible + }); + + return _react2['default'].createElement( + 'div', + { className: errorClass }, + _react2['default'].createElement( + 'span', + null, + this.props.errorMessage + ) + ); + } + }]); + + return InputError; + })(_react2['default'].Component); + + exports['default'] = InputError; + module.exports = exports['default']; + +/***/ }, +/* 165 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + Copyright (c) 2015 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames + */ + /* global define */ + + (function () { + 'use strict'; + + var hasOwn = {}.hasOwnProperty; + + function classNames () { + var classes = ''; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!arg) continue; + + var argType = typeof arg; + + if (argType === 'string' || argType === 'number') { + classes += ' ' + (this && this[arg] || arg); + } else if (Array.isArray(arg)) { + classes += ' ' + classNames.apply(this, arg); + } else if (argType === 'object') { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes += ' ' + (this && this[key] || key); + } + } + } + } + + return classes.substr(1); + } + + if (typeof module !== 'undefined' && module.exports) { + module.exports = classNames; + } else if (true) { + // register as 'classnames', consistent with npm package name + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { + return classNames; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else { + window.classNames = classNames; + } + }()); + + +/***/ }, +/* 166 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _Icon = __webpack_require__(163); + + var _Icon2 = _interopRequireDefault(_Icon); + + var _classnamesBind = __webpack_require__(165); + + var _classnamesBind2 = _interopRequireDefault(_classnamesBind); + + var cx = _classnamesBind2['default'].bind({}); + + var PasswordValidator = (function (_React$Component) { + _inherits(PasswordValidator, _React$Component); + + function PasswordValidator(props) { + _classCallCheck(this, PasswordValidator); + + _get(Object.getPrototypeOf(PasswordValidator.prototype), 'constructor', this).call(this, props); + this.state = { + value: null, + minCharacters: this.props.minCharacters, + requireCapitals: this.props.requireCapitals, + requireNumbers: this.props.requireNumbers, + forbiddenWords: this.props.forbiddenWords, + name: this.props.name + }; + } + + _createClass(PasswordValidator, [{ + key: 'render', + value: function render() { + var validatorClass = cx({ + 'password_validator': true, + 'visible': this.props.visible, + 'invisible': !this.props.visible + }); + + var forbiddenWords = this.state.forbiddenWords.map(function (word, i) { + return _react2['default'].createElement( + 'span', + { key: i, className: 'bad_word' }, + '"', + word, + '"' + ); + }); + + var validatorTitle; + + if (this.props.valid) { + validatorTitle = _react2['default'].createElement( + 'h4', + { className: 'validator_title valid' }, + this.props.name, + ' IS OK' + ); + } else { + validatorTitle = _react2['default'].createElement( + 'h4', + { className: 'validator_title invalid' }, + this.props.name, + ' RULES' + ); + } + + return _react2['default'].createElement( + 'div', + { className: validatorClass }, + _react2['default'].createElement( + 'div', + { className: 'validator_container' }, + validatorTitle, + _react2['default'].createElement( + 'ul', + { className: 'rules_list' }, + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.minChars }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + this.state.minCharacters, + ' characters minimum' + ) + ), + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.capitalLetters }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + 'Contains at least ', + this.state.requireCapitals, + ' capital letter' + ) + ), + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.numbers }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + 'Contains at least ', + this.state.requireNumbers, + ' number' + ) + ), + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.words }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + 'Can\'t be ', + forbiddenWords + ) + ) + ) + ) + ); + } + }]); + + return PasswordValidator; + })(_react2['default'].Component); + + exports['default'] = PasswordValidator; + module.exports = exports['default']; + +/***/ }, +/* 167 */ +/***/ function(module, exports) { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.getQueryVariable = getQueryVariable; + + function getQueryVariable(variable) { + var query = window.location.search.substring(1); + var vars = query.split("&"); + for (var i = 0; i < vars.length; i++) { + var pair = vars[i].split("="); + if (pair[0] == variable) { + return pair[1]; + } + } + return '/'; + } + +/***/ } +]); +//# sourceMappingURL=login.js.map \ No newline at end of file diff --git a/dist/js/mod/login.js.map b/dist/js/mod/login.js.map new file mode 100644 index 0000000..eb11014 --- /dev/null +++ b/dist/js/mod/login.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./hub/static/jsx/login.jsx","webpack:///./~/react-dom/index.js","webpack:///./~/react/lib/ReactDOM.js","webpack:///(webpack)/~/node-libs-browser/~/process/browser.js","webpack:///./~/react/lib/ReactCurrentOwner.js","webpack:///./~/react/lib/ReactDOMTextComponent.js","webpack:///./~/react/lib/DOMChildrenOperations.js","webpack:///./~/react/lib/Danger.js","webpack:///./~/react/~/fbjs/lib/ExecutionEnvironment.js","webpack:///./~/react/~/fbjs/lib/createNodesFromMarkup.js","webpack:///./~/react/~/fbjs/lib/createArrayFromMixed.js","webpack:///./~/react/~/fbjs/lib/toArray.js","webpack:///./~/react/~/fbjs/lib/invariant.js","webpack:///./~/react/~/fbjs/lib/getMarkupWrap.js","webpack:///./~/react/~/fbjs/lib/emptyFunction.js","webpack:///./~/react/lib/ReactMultiChildUpdateTypes.js","webpack:///./~/react/~/fbjs/lib/keyMirror.js","webpack:///./~/react/lib/ReactPerf.js","webpack:///./~/react/lib/setInnerHTML.js","webpack:///./~/react/lib/setTextContent.js","webpack:///./~/react/lib/escapeTextContentForBrowser.js","webpack:///./~/react/lib/DOMPropertyOperations.js","webpack:///./~/react/lib/DOMProperty.js","webpack:///./~/react/lib/quoteAttributeValueForBrowser.js","webpack:///./~/react/~/fbjs/lib/warning.js","webpack:///./~/react/lib/ReactComponentBrowserEnvironment.js","webpack:///./~/react/lib/ReactDOMIDOperations.js","webpack:///./~/react/lib/ReactMount.js","webpack:///./~/react/lib/ReactBrowserEventEmitter.js","webpack:///./~/react/lib/EventConstants.js","webpack:///./~/react/lib/EventPluginHub.js","webpack:///./~/react/lib/EventPluginRegistry.js","webpack:///./~/react/lib/EventPluginUtils.js","webpack:///./~/react/lib/ReactErrorUtils.js","webpack:///./~/react/lib/accumulateInto.js","webpack:///./~/react/lib/forEachAccumulated.js","webpack:///./~/react/lib/ReactEventEmitterMixin.js","webpack:///./~/react/lib/ViewportMetrics.js","webpack:///./~/react/lib/Object.assign.js","webpack:///./~/react/lib/isEventSupported.js","webpack:///./~/react/lib/ReactDOMFeatureFlags.js","webpack:///./~/react/lib/ReactElement.js","webpack:///./~/react/lib/canDefineProperty.js","webpack:///./~/react/lib/ReactEmptyComponentRegistry.js","webpack:///./~/react/lib/ReactInstanceHandles.js","webpack:///./~/react/lib/ReactRootIndex.js","webpack:///./~/react/lib/ReactInstanceMap.js","webpack:///./~/react/lib/ReactMarkupChecksum.js","webpack:///./~/react/lib/adler32.js","webpack:///./~/react/lib/ReactReconciler.js","webpack:///./~/react/lib/ReactRef.js","webpack:///./~/react/lib/ReactOwner.js","webpack:///./~/react/lib/ReactUpdateQueue.js","webpack:///./~/react/lib/ReactUpdates.js","webpack:///./~/react/lib/CallbackQueue.js","webpack:///./~/react/lib/PooledClass.js","webpack:///./~/react/lib/Transaction.js","webpack:///./~/react/~/fbjs/lib/emptyObject.js","webpack:///./~/react/~/fbjs/lib/containsNode.js","webpack:///./~/react/~/fbjs/lib/isTextNode.js","webpack:///./~/react/~/fbjs/lib/isNode.js","webpack:///./~/react/lib/instantiateReactComponent.js","webpack:///./~/react/lib/ReactCompositeComponent.js","webpack:///./~/react/lib/ReactComponentEnvironment.js","webpack:///./~/react/lib/ReactPropTypeLocations.js","webpack:///./~/react/lib/ReactPropTypeLocationNames.js","webpack:///./~/react/lib/shouldUpdateReactComponent.js","webpack:///./~/react/lib/ReactEmptyComponent.js","webpack:///./~/react/lib/ReactNativeComponent.js","webpack:///./~/react/lib/validateDOMNesting.js","webpack:///./~/react/lib/ReactDefaultInjection.js","webpack:///./~/react/lib/BeforeInputEventPlugin.js","webpack:///./~/react/lib/EventPropagators.js","webpack:///./~/react/lib/FallbackCompositionState.js","webpack:///./~/react/lib/getTextContentAccessor.js","webpack:///./~/react/lib/SyntheticCompositionEvent.js","webpack:///./~/react/lib/SyntheticEvent.js","webpack:///./~/react/lib/SyntheticInputEvent.js","webpack:///./~/react/~/fbjs/lib/keyOf.js","webpack:///./~/react/lib/ChangeEventPlugin.js","webpack:///./~/react/lib/getEventTarget.js","webpack:///./~/react/lib/isTextInputElement.js","webpack:///./~/react/lib/ClientReactRootIndex.js","webpack:///./~/react/lib/DefaultEventPluginOrder.js","webpack:///./~/react/lib/EnterLeaveEventPlugin.js","webpack:///./~/react/lib/SyntheticMouseEvent.js","webpack:///./~/react/lib/SyntheticUIEvent.js","webpack:///./~/react/lib/getEventModifierState.js","webpack:///./~/react/lib/HTMLDOMPropertyConfig.js","webpack:///./~/react/lib/ReactBrowserComponentMixin.js","webpack:///./~/react/lib/findDOMNode.js","webpack:///./~/react/lib/ReactDefaultBatchingStrategy.js","webpack:///./~/react/lib/ReactDOMComponent.js","webpack:///./~/react/lib/AutoFocusUtils.js","webpack:///./~/react/~/fbjs/lib/focusNode.js","webpack:///./~/react/lib/CSSPropertyOperations.js","webpack:///./~/react/lib/CSSProperty.js","webpack:///./~/react/~/fbjs/lib/camelizeStyleName.js","webpack:///./~/react/~/fbjs/lib/camelize.js","webpack:///./~/react/lib/dangerousStyleValue.js","webpack:///./~/react/~/fbjs/lib/hyphenateStyleName.js","webpack:///./~/react/~/fbjs/lib/hyphenate.js","webpack:///./~/react/~/fbjs/lib/memoizeStringOnly.js","webpack:///./~/react/lib/ReactDOMButton.js","webpack:///./~/react/lib/ReactDOMInput.js","webpack:///./~/react/lib/LinkedValueUtils.js","webpack:///./~/react/lib/ReactPropTypes.js","webpack:///./~/react/lib/getIteratorFn.js","webpack:///./~/react/lib/ReactDOMOption.js","webpack:///./~/react/lib/ReactChildren.js","webpack:///./~/react/lib/traverseAllChildren.js","webpack:///./~/react/lib/ReactDOMSelect.js","webpack:///./~/react/lib/ReactDOMTextarea.js","webpack:///./~/react/lib/ReactMultiChild.js","webpack:///./~/react/lib/ReactChildReconciler.js","webpack:///./~/react/lib/flattenChildren.js","webpack:///./~/react/~/fbjs/lib/shallowEqual.js","webpack:///./~/react/lib/ReactEventListener.js","webpack:///./~/react/~/fbjs/lib/EventListener.js","webpack:///./~/react/~/fbjs/lib/getUnboundedScrollPosition.js","webpack:///./~/react/lib/ReactInjection.js","webpack:///./~/react/lib/ReactClass.js","webpack:///./~/react/lib/ReactComponent.js","webpack:///./~/react/lib/ReactNoopUpdateQueue.js","webpack:///./~/react/lib/ReactReconcileTransaction.js","webpack:///./~/react/lib/ReactInputSelection.js","webpack:///./~/react/lib/ReactDOMSelection.js","webpack:///./~/react/lib/getNodeForCharacterOffset.js","webpack:///./~/react/~/fbjs/lib/getActiveElement.js","webpack:///./~/react/lib/SelectEventPlugin.js","webpack:///./~/react/lib/ServerReactRootIndex.js","webpack:///./~/react/lib/SimpleEventPlugin.js","webpack:///./~/react/lib/SyntheticClipboardEvent.js","webpack:///./~/react/lib/SyntheticFocusEvent.js","webpack:///./~/react/lib/SyntheticKeyboardEvent.js","webpack:///./~/react/lib/getEventCharCode.js","webpack:///./~/react/lib/getEventKey.js","webpack:///./~/react/lib/SyntheticDragEvent.js","webpack:///./~/react/lib/SyntheticTouchEvent.js","webpack:///./~/react/lib/SyntheticWheelEvent.js","webpack:///./~/react/lib/SVGDOMPropertyConfig.js","webpack:///./~/react/lib/ReactDefaultPerf.js","webpack:///./~/react/lib/ReactDefaultPerfAnalysis.js","webpack:///./~/react/~/fbjs/lib/performanceNow.js","webpack:///./~/react/~/fbjs/lib/performance.js","webpack:///./~/react/lib/ReactVersion.js","webpack:///./~/react/lib/renderSubtreeIntoContainer.js","webpack:///./~/react/react.js","webpack:///./~/react/lib/React.js","webpack:///./~/react/lib/ReactDOMServer.js","webpack:///./~/react/lib/ReactServerRendering.js","webpack:///./~/react/lib/ReactServerBatchingStrategy.js","webpack:///./~/react/lib/ReactServerRenderingTransaction.js","webpack:///./~/react/lib/ReactIsomorphic.js","webpack:///./~/react/lib/ReactDOMFactories.js","webpack:///./~/react/lib/ReactElementValidator.js","webpack:///./~/react/~/fbjs/lib/mapObject.js","webpack:///./~/react/lib/onlyChild.js","webpack:///./~/react/lib/deprecated.js","webpack:///./hub/static/jsx/signin.jsx","webpack:///./~/underscore/underscore.js","webpack:///./hub/static/jsx/components/Input.jsx","webpack:///./hub/static/jsx/components/Icon.jsx","webpack:///./hub/static/jsx/components/InputError.jsx","webpack:///./~/classnames/bind.js","webpack:///./hub/static/jsx/components/PasswordValidator.jsx","webpack:///./hub/static/jsx/components/Utils.jsx"],"names":[],"mappings":";;;;;;;;qCAAqB,CAAW;;;;kCACd,GAAO;;;;mCACP,GAAU;;;;AAE5B,uBAAS,MAAM,CAAC,2DAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,C;;;;;;ACJ1D;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+HAA8H;;AAE9H;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;;AC3FA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;;AAEA,oC;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,UAAU;AACvB,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA,EAAC;;AAED,wC;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B,cAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,sBAAqB,4BAA4B;AACjD;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B,eAAc,kBAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,wBAAwB;AAC7C;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA,yB;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,UAAU;AACrB,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA,uC;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,yBAAyB;AACpC,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB,aAAa;AAC/B;AACA;AACA;AACA;;AAEA,0B;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA,2BAA0B;AAC1B;AACA;AACA;;AAEA,4B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED,6C;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA6B,sBAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,eAAc;AACd;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa;AACb,aAAY;AACZ,aAAY;AACZ,eAAc;AACd,gBAAe;AACf;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,8C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C,+BAA8B;AAC9B;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA,aAAY;AACZ;AACA,sEAAqE;;AAErE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,oDAAoD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,8B;;;;;;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,gD;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uFAAsF,aAAa;AACnG;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,0B;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mD;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,cAAc;AAC3B,cAAa,cAAc;AAC3B;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED,uC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC;AACA,aAAY,GAAG;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,8CAA8C;AACzD,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,WAAW;AACtB,YAAW,0BAA0B;AACrC,YAAW,QAAQ;AACnB;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,WAAW;AACtB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,WAAW;AACtB;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ,kCAAkC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,SAAS;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,WAAW;AACxB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,QAAQ;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA,qLAAoL;;AAEpL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oLAAmL;;AAEnL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,YAAY;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,WAAW;AACzB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf,eAAc;AACd;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,eAAc,OAAO;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED,6B;;;;;;;ACj1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED,2C;;;;;;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,oCAAmC,gCAAgC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA,iC;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,gBAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;;AAEA,IAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;;AAEA,yGAAwG;AACxG;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,UAAU;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;AACA;AACA,mCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,mC;;;;;;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA,aAAY,WAAW;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iC;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,qC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB,8BAA8B;AACvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yB;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,YAAW,cAAc;AACzB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6BAA4B,QAAQ,oBAAoB,EAAE;AAC1D;AACA,IAAG;AACH;AACA;AACA;;AAEA,oC;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,0B;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;;AChQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,eAAe;AAC1B,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA,gC;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,4BAA4B;AACvC;AACA,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA,eAAc,0BAA0B;AACxC;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB;AACA,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,2DAA0D;AAC1D;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,sDAAqD;AACrD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,8B;;;;;;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+B;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,6B;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,UAAU;AACrB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4C;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA,IAAG;;AAEH;AACA;AACA,uEAAsE;AACtE;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gJAA+I;AAC/I;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA6B;AAC7B,kCAAiC,kBAAkB;AACnD;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA,0C;;;;;;;ACrrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,yC;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,6C;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA,IAAG;AACH,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,sC;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,UAAU;AACrB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA;AACA,wCAAuC;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,G;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oCAAmC;AACnC;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,2BAA2B;AACjD,wBAAuB,kCAAkC;AACzD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,4BAA4B;AAClD,wBAAuB,mCAAmC;AAC1D,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACpZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,eAAe;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,2C;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA6B;AAC7B;;AAEA;AACA;;AAEA;;AAEA,iC;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,6BAA6B,UAAU,0BAA0B,UAAU,uBAAuB,UAAU,8BAA8B,UAAU,0BAA0B,UAAU,0BAA0B,UAAU,+BAA+B;;AAEjS,0C;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8BAA6B,qBAAqB;AAClD;AACA,IAAG;AACH;AACA,8BAA6B,qBAAqB;AAClD;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,wC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wC;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,0BAA0B;AACrC,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+C;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAqB;;AAErB,uBAAsB,iBAAiB;AACvC,oBAAmB,cAAc;AACjC,mBAAkB,eAAe;;AAEjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAsH;AACtH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0HAAyH;AACzH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,yBAAyB;AACxC;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qNAAoN,YAAY;AAChO;AACA;AACA;AACA;AACA;AACA,qOAAoO,+BAA+B;AACnQ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA,qDAAoD;AACpD;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,uCAAsC,KAAK;AAC3C;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAwD;AACxD,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,oC;;;;;;;ACj8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,4B;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA4C;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,0BAA0B;AAC1D,qBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAqE;AACrE;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8B;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,oC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,2B;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,qC;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gC;;;;;;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,4BAA2B;AAC3B,OAAM;AACN;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,2BAA0B;AAC1B,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,oBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,2BAA0B;AAC1B,IAAG;;AAEH;AACA,+BAA8B,2CAA2C;;AAEzE;AACA,iBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,GAAG;AACd,YAAW,QAAQ;AACnB,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB;AACvB;;AAEA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2LAA2L,yCAAyC;AACpO;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sC;;;;;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,YAAW,kBAAkB;AAC7B,YAAW,QAAQ;AACnB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,sBAAsB;AACrC;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAoB;AACpB;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,iBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kC;;;;;;;AC/eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB,YAAW,gBAAgB;AAC3B,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+B;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,qC;;;;;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,gC;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAwB,eAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,8CAA6C;AAC7C,IAAG;AACH;AACA;AACA;AACA;AACA,yCAAwC;AACxC,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,sCAAqC;AACrC,IAAG;AACH;AACA;AACA,IAAG;AACH,2BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA,6HAA4H;AAC5H;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+OAA8O;;AAE9O;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA,+NAA8N;AAC9N;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAwF,aAAa;AACrG;AACA;;AAEA,uDAAsD;AACtD;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AClwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,wIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA,0DAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,UAAU;AACxB;AACA;AACA;AACA,cAAa,UAAU;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,4C;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,0BAAyB;AACzB,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,sC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB;AACA;;AAEA;AACA,cAAa,uBAAuB;AACpC,cAAa,OAAO;AACpB;AACA;AACA;;AAEA,oC;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4C;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,mC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,cAAc;AACpC,wBAAuB,qBAAqB;AAC5C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,uBAAuB;AAC7C,wBAAuB,8BAA8B;AACrD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA0B,gBAAgB;AAC1C;;AAEA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,0C;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,yC;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,qC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA,sEAAqE,aAAa;AAClF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB,wBAAuB;AACvB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,2BAA0B;AAC1B;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,yBAAyB;AAC1C;AACA,2BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,yBAAyB;AAC1C;AACA,2BAA0B;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,2C;;;;;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,oC;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,2B;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,wD;;;;;;ACfA;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA,wB;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,aAAa;AACxB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,aAAa;AACxB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,G;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,MAAM;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kD;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wB;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED,oC;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gGAA+F;AAC/F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA6I;AAC7I;AACA,QAAO;AACP;AACA;AACA,uIAAsI;AACtI;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6B;;;;;;;;;;;;;;;;;;;;;;;kCC/CkB,GAAO;;;;uCACX,GAAY;;;;mCACZ,GAAQ;;;;4CACJ,GAAoB;;;;2CACrB,GAAmB;;;;iDACb,GAAyB;;;;4CACjB,GAAoB;;KAEtC,cAAc;eAAd,cAAc;;AACZ,cADF,cAAc,CACX,KAAK,EAAE;;;+BADV,cAAc;;AAEnB,oCAFK,cAAc,6CAEb,KAAK,EAAE;;cASjB,eAAe,GAAG,UAAC,KAAK,EAAM;AAC1B,kBAAK,CAAC,cAAc,EAAE,CAAC;AACvB,iBAAI,IAAI,GAAG;AACP,yBAAQ,EAAE,MAAK,KAAK,CAAC,QAAQ;AAC7B,yBAAQ,EAAE,MAAK,KAAK,CAAC,QAAQ;AAC7B,6BAAU,kBAAkB,CAAC,uCAAiB,UAAU,CAAC,CAAC;cAC7D;iBAAE,IAAI,QAAO,CAAC;;AAEf,iCAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAS,MAAM,EAAE;AAC1C,qBAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7B,qBAAI,GAAG,CAAC,CAAC,EAAE;AACP,yBAAI,CAAC,QAAQ,CAAC;AACV,qCAAY,EAAE,IAAI;AAClB,qCAAY,EAAE,GAAG,CAAC,OAAO;sBAC5B,CAAC,CAAC;kBACN,MAAM;AACH,2BAAM,CAAC,QAAQ,GAAG,GAAG,YAAS,CAAC;kBAClC;cACJ,CAAC,CAAC;UACN;;cAED,mBAAmB,GAAG,UAAC,KAAK,EAAM;AAC9B,mBAAK,QAAQ,CAAC;AACV,yBAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;cAC/B,CAAC,CAAC;UACN;;cAED,mBAAmB,GAAG,UAAC,KAAK,EAAM;AAC9B,mBAAK,QAAQ,CAAC;AACV,yBAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;cAC/B,CAAC,CAAC;UACN;;AAvCG,aAAI,CAAC,KAAK,GAAG;AACT,qBAAQ,EAAE,IAAI;AACd,qBAAQ,EAAE,IAAI;AACd,yBAAY,EAAE,KAAK;AACnB,yBAAY,EAAE,cAAc;UAC/B,CAAC;MACL;;kBATQ,cAAc;;gBA4CjB,kBAAG;AACL,oBACQ;;mBAAK,SAAS,EAAC,uBAAuB;iBAClC;;uBAAK,SAAS,EAAC,qBAAqB;qBAChC;;;;sBAAe;qBACvB;;2BAAM,QAAQ,EAAE,IAAI,CAAC,eAAgB;yBAEjC;AACI,iCAAI,EAAC,KAAK;AACV,gCAAG,EAAC,UAAU;AACd,iCAAI,EAAC,MAAM;AACX,yCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;AAClC,kCAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;AAC3B,qCAAQ,EAAE,IAAI,CAAC,mBAAoB;2BACrC;yBAEF;AACI,iCAAI,EAAC,IAAI;AACT,iCAAI,EAAC,UAAU;AACf,gCAAG,EAAC,MAAM;AACV,yCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;AAClC,kCAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU;AAC5B,qCAAQ,EAAE,IAAI,CAAC,mBAAoB;2BACrC;yBAEF;AACI,oCAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;AACjC,yCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;2BACxC;yBAEF;;;AACI,qCAAI,EAAC,QAAQ;AACb,0CAAS,EAAC,oBAAoB;;0BAEzB;sBACR;kBACL;cACJ,CACF;UACL;;;YAnFQ,cAAc;IAAS,mBAAM,SAAS;;;;KAsF9B,KAAK;eAAL,KAAK;;cAAL,KAAK;+BAAL,KAAK;;oCAAL,KAAK;;;kBAAL,KAAK;;gBAChB,kBAAG;AACL,oBACQ;;mBAAK,SAAS,EAAC,qBAAqB;iBAChC;;uBAAK,SAAS,EAAC,0BAA0B;qBACrC,iCAAC,cAAc,OAAE;kBACf;cACJ,CACZ;UACL;;;YATgB,KAAK;IAAS,mBAAM,SAAS;;sBAA7B,KAAK,C;;;;;;AC9F1B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,YAAY;AAClD;AACA;AACA,MAAK;AACL;AACA,wCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,2CAA0C;AAC1C,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6DAA4D,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA,sBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8CAA6C,YAAY;AACzD;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAqB,cAAc;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAqB,eAAe;AACpC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,6CAA4C,mBAAmB;AAC/D;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;AACf,eAAc;AACd,eAAc;AACd,iBAAgB;AAChB,iBAAgB;AAChB,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP,sBAAqB;AACrB;;AAEA;AACA;AACA,MAAK;AACL,kBAAiB;;AAEjB;AACA,mDAAkD,EAAE,iBAAiB;;AAErE;AACA,yBAAwB,8BAA8B;AACtD,4BAA2B;;AAE3B;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mDAAkD,iBAAiB;;AAEnE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;kCC3gDiB,GAAO;;;;uCACX,GAAY;;;;iCACT,GAAQ;;;;uCACF,GAAc;;;;8CACP,GAAqB;;;;2CAC5B,GAAiB;;;;AAExC,KAAI,EAAE,GAAG,4BAAW,IAAI,CAAC,EAAE,CAAC,CAAC;;KAER,KAAK;eAAL,KAAK;;AACX,cADM,KAAK,CACV,KAAK,EAAE;;;+BADF,KAAK;;AAElB,oCAFa,KAAK,6CAEZ,KAAK,EAAE;;cA0BjB,YAAY,GAAG,UAAC,KAAK,EAAK;AACtB,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AACzB,sBAAK,EAAE,wBAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;cACvC,CAAC,CAAC;;AAEH,iBAAI,MAAK,KAAK,CAAC,SAAS,EAAE;AACtB,uBAAK,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;cACtC,CAAC;;AAEF,iBAAI,MAAK,KAAK,CAAC,QAAQ,EAAE;AACrB,uBAAK,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;cAC1C;;AAED,iBAAI,MAAK,KAAK,CAAC,QAAQ,EAAE;AACrB,uBAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;cAC9B;UACJ;;cAED,aAAa,GAAI,UAAC,KAAK,EAAM;;AAEzB,iBAAI,MAAK,KAAK,CAAC,QAAQ,IAAI,MAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAC;AAClD,uBAAK,QAAQ,CAAC;AACV,0BAAK,EAAE,IAAI;AACX,iCAAY,EAAE,KAAK;kBACtB,CAAC,CAAC;cACN,MAAM;AACH,uBAAK,QAAQ,CAAC;AACV,0BAAK,EAAE,KAAK;AACZ,iCAAY,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAK,KAAK,CAAC,YAAY,GAAG,MAAK,KAAK,CAAC,YAAY;kBACtF,CAAC,CAAC;cACN;UAEJ;;cAED,yBAAyB,GAAI,UAAC,QAAQ,EAAM;;AAExC,iBAAI,QAAQ,CAAC,KAAK,EAAE;AAChB,qBAAG,CAAC,wBAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,yBAAI,MAAK,KAAK,CAAC,QAAQ,EAAE;AACrB,+BAAK,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;sBACtC;AACD,2BAAK,QAAQ,CAAC;AACV,8BAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,8BAAK,EAAE,wBAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;sBACnC,CAAC,CAAC;kBACN;cACJ;UACJ;;cAeD,WAAW,GAAG,UAAC,KAAK,EAAK;AACrB,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,IAAI;AACX,iCAAgB,EAAE,IAAI;cACzB,CAAC,CAAC;;AAEH,iBAAI,MAAK,KAAK,CAAC,SAAS,EAAE;AACtB,uBAAK,QAAQ,CAAC;AACV,iCAAY,EAAE,KAAK;kBACtB,CAAC,CAAC;cACN;UACJ;;cAED,UAAU,GAAG,UAAC,KAAK,EAAK;AACpB,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,KAAK;AACZ,6BAAY,EAAE,CAAC,MAAK,KAAK,CAAC,KAAK;AAC/B,iCAAgB,EAAE,KAAK;cAC1B,CAAC,CAAC;UACN;;cAgBD,UAAU,GAAI,UAAC,KAAK,EAAM;AACtB,iBAAI,SAAS,GAAG;AACZ,yBAAQ,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAK,KAAK,CAAC,aAAa,CAAC,GAAE,KAAK;AACvF,+BAAc,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAK,aAAa,CAAC,KAAK,CAAC,GAAE,KAAK;AACpE,wBAAO,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AACjE,sBAAK,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;cAC7D,CAAC;AACF,iBAAI,QAAQ,GAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,KAAM,CAAC;;AAExG,mBAAK,QAAQ,CAAC;AACV,iCAAgB,EAAE,SAAS;AAC3B,kCAAiB,EAAE,QAAQ;AAC3B,sBAAK,EAAE,QAAQ;cAClB,CAAC,CAAC;UACN;;cAED,aAAa,GAAI,UAAC,KAAK,EAAM;AACzB,oBAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;UAC9C;;cAED,YAAY,GAAI,UAAC,KAAK,EAAM;AACxB,oBAAO,KAAI,CAAC,IAAI,CAAC,KAAK,CAAC;eAAC;UAC3B;;cAED,UAAU,GAAI,UAAC,KAAK,EAAM;AACtB,oBAAQ,wBAAE,IAAI,CAAC,MAAK,KAAK,CAAC,cAAc,EAAE,UAAU,IAAI,EAAE;AACtD,qBAAI,OAAO,GAAI,IAAI,KAAK,KAAK,GAAI,IAAI,GAAG,EAAE,CAAC;AAC3C,wBAAO,OAAO;cACjB,CAAC,CAAC;UACN;;AAxJG,aAAI,CAAC,KAAK,GAAG;AACT,kBAAK,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAK,IAAI;AAC3D,kBAAK,EAAE,wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAClC,kBAAK,EAAE,KAAK;AACZ,kBAAK,EAAE,IAAI;AACX,yBAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS;AACnC,yBAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,sBAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;AAC/B,6BAAgB,EAAE,KAAK;AACvB,iBAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACrB,0BAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AACvC,4BAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;AAC3C,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,6BAAgB,EAAE;AACd,yBAAQ,EAAE,KAAK;AACf,+BAAc,EAAE,KAAK;AACrB,wBAAO,EAAE,KAAK;AACd,sBAAK,EAAE,KAAK;AACZ,oBAAG,EAAE,KAAK;cACb;AACD,8BAAiB,EAAE,KAAK;UAC3B,CAAC;MACL;;kBA1BgB,KAAK;;gBA8Ef,mBAAG;AACN,iBAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,qBAAI,wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACvE,yBAAI,CAAC,QAAQ,CAAC;AACV,8BAAK,EAAE,KAAK;AACZ,qCAAY,EAAE,IAAI;sBACrB,CAAC,CAAC;kBACN;cACJ;;AAED,oBAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;UAC3B;;;gBAuBc,2BAAG;AACd,iBAAI,CAAC,QAAQ,CAAC;AACV,6BAAY,EAAE,IAAI;cACrB,CAAC,CAAC;UACN;;;gBAEQ,qBAAG;AACR,iBAAI,CAAC,QAAQ,CAAC;AACV,6BAAY,EAAE,KAAK;AACnB,iCAAgB,EAAE,KAAK;cAC1B,CAAC,CAAC;UACN;;;;;gBAkCK,kBAAG;;AAEL,iBAAI,iBAAiB,GAAG,EAAE,CAAC;AACvB,8BAAa,EAAM,IAAI;AACvB,8BAAa,EAAM,IAAI,CAAC,KAAK,CAAC,KAAK;AACnC,8BAAa,EAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AACpC,8BAAa,EAAM,IAAI,CAAC,KAAK,CAAC,KAAK;AACnC,iCAAgB,EAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AACpC,gCAAe,EAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AACnC,kCAAiB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;cACvC,CAAC,CAAC;;AAEH,iBAAI,SAAS,CAAC;;AAEd,iBAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACtB,0BAAS,GACL;AACJ,wBAAG,EAAC,mBAAmB;AACvB,4BAAO,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB;AACrC,yBAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;AACtB,0BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,8BAAS,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB;AACvC,0BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAkB;AACpC,mCAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe;AAC1C,kCAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc;AACxC,oCAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAgB;AAC5C,mCAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe;mBACpC;cACT,CAAC;;AAEF,oBACQ;;mBAAK,SAAS,EAAE,iBAAkB;iBAElC;;uBAAO,SAAS,EAAC,aAAa,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;qBACxD;;2BAAM,SAAS,EAAC,YAAY;yBAAE,IAAI,CAAC,KAAK,CAAC,IAAI;sBAAQ;kBAC7C;iBAER,uDACA,IAAI,CAAC,KAAK;AACd,gCAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAY;AACpC,8BAAS,EAAC,OAAO;AACjB,uBAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;AACpB,iCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;AACtC,0BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,6BAAQ,EAAE,IAAI,CAAC,YAAa;AAC5B,4BAAO,EAAE,IAAI,CAAC,WAAY;AAC1B,2BAAM,EAAE,IAAI,CAAC,UAAW;AACxB,iCAAY,EAAC,KAAK;oBACZ;iBAEF;AACJ,4BAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;AACjC,iCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;mBAChC;iBAEF;;uBAAK,SAAS,EAAC,iBAAiB;qBAChC;;2BAAG,SAAS,EAAC,kBAAkB,EAAC,YAAY,EAAE,IAAI,CAAC,eAAgB;;yBAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;sBAAK;qBACrG;;2BAAG,SAAS,EAAC,kBAAkB;;yBAAE,sDAAM,IAAI,EAAC,aAAa,GAAE;;sBAAK;kBAC1D;iBAET,SAAS;cAEJ,CACR;UACL;;;YA7NgB,KAAK;IAAS,mBAAM,SAAS;;sBAA7B,KAAK;AA8NzB,EAAC;;;;;;;;;;;;;;;;;;;;;;;kCCvOgB,GAAO;;;;KAEJ,IAAI;aAAJ,IAAI;;YAAJ,IAAI;2BAAJ,IAAI;;gCAAJ,IAAI;;;gBAAJ,IAAI;;YAEjB,kBAAG;AACP,eAAO,IAAI,CAAC,KAAK,CAAC,IAAI;;AAEpB,cAAK,cAAc;AACjB,kBACE;;eAAK,OAAO,EAAC,WAAW;aACxB,2CAAM,CAAC,EAAC,uSAE2E,GAAE;YAC/E,CACP;;AAEH,cAAK,aAAa;AAChB,kBACE;;eAAK,OAAO,EAAC,WAAW;aACxB,2CAAM,CAAC,EAAC,qUAE8F,GAAE;YAClG,CACP;;AAEH,cAAK,oBAAoB;AACvB,kBACE;;eAAK,OAAO,EAAC,WAAW;aACtB,2CAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,sEAAsE,GAAE;aAC/F,2CAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,4MACoF,GAAE;YACzG,CACP;;AAEH,cAAK,QAAQ;AACX,kBACE;;eAAK,OAAO,EAAC,WAAW;aACxB,2CAAM,aAAU,SAAS,EAAC,aAAU,SAAS,EAAC,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,qjBAK5D,GAAE;YACC,CACP;AAAA,QACJ;MACF;;;UA5CkB,IAAI;IAAS,mBAAM,SAAS;;sBAA5B,IAAI;;;;;;;;;;;;;;;;;;;;;;;kCCFP,GAAO;;;;uCACX,GAAY;;;;2CACH,GAAiB;;;;AAExC,KAAI,EAAE,GAAG,4BAAW,IAAI,CAAC,EAAE,CAAC,CAAC;;KAER,UAAU;eAAV,UAAU;;AAChB,cADM,UAAU,CACf,KAAK,EAAE;+BADF,UAAU;;AAEvB,oCAFa,UAAU,6CAEjB,KAAK,EAAE;AACb,aAAI,CAAC,KAAK,GAAG;AACT,oBAAO,EAAE,kBAAkB;UAC9B,CAAC;MACL;;kBANgB,UAAU;;gBAQrB,kBAAG;AACL,iBAAI,UAAU,GAAG,EAAE,CAAC;AAChB,kCAAiB,EAAI,IAAI;AACzB,0BAAS,EAAY,IAAI,CAAC,KAAK,CAAC,OAAO;AACvC,4BAAW,EAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;cAC3C,CAAC,CAAC;;AAEH,oBACQ;;mBAAK,SAAS,EAAE,UAAW;iBACvB;;;qBAAO,IAAI,CAAC,KAAK,CAAC,YAAY;kBAAQ;cACpC,CACb;UACJ;;;YApBgB,UAAU;IAAS,mBAAM,SAAS;;sBAAlC,UAAU;;;;;;;ACN/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAgB;;AAEhB;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,EAAC;;;;;;;;;;;;;;;;;;;;;;;kCC/CiB,GAAO;;;;uCACX,GAAY;;;;iCACT,GAAQ;;;;2CACF,GAAiB;;;;AAExC,KAAI,EAAE,GAAG,4BAAW,IAAI,CAAC,EAAE,CAAC,CAAC;;KAER,iBAAiB;eAAjB,iBAAiB;;AACvB,cADM,iBAAiB,CACtB,KAAK,EAAE;+BADF,iBAAiB;;AAE9B,oCAFa,iBAAiB,6CAExB,KAAK,EAAE;AACb,aAAI,CAAC,KAAK,GAAG;AACT,kBAAK,EAAE,IAAI;AACX,0BAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AACvC,4BAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;AAC3C,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,iBAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;UACxB;MACJ;;kBAXgB,iBAAiB;;gBAa5B,kBAAG;AACL,iBAAI,cAAc,GAAG,EAAE,CAAC;AACpB,qCAAoB,EAAI,IAAI;AAC5B,0BAAS,EAAe,IAAI,CAAC,KAAK,CAAC,OAAO;AAC1C,4BAAW,EAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;cAC9C,CAAC,CAAC;;AAEH,iBAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,UAAS,IAAI,EAAE,CAAC,EAAE;AACjE,wBACQ;;uBAAM,GAAG,EAAE,CAAE,EAAC,SAAS,EAAC,UAAU;;qBAChC,IAAI;;kBACH,CACV;cACJ,CAAC,CAAC;;AAEH,iBAAI,cAAc,CAAC;;AAEnB,iBAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,+BAAc,GACV;;uBAAI,SAAS,EAAC,uBAAuB;qBACpC,IAAI,CAAC,KAAK,CAAC,IAAI;;kBACf;cACR,MAAM;AACH,+BAAc,GACV;;uBAAI,SAAS,EAAC,yBAAyB;qBACtC,IAAI,CAAC,KAAK,CAAC,IAAI;;kBACf;cACR;;AAED,oBACQ;;mBAAK,SAAS,EAAE,cAAe;iBAC3B;;uBAAK,SAAS,EAAC,qBAAqB;qBACnC,cAAc;qBACf;;2BAAI,SAAS,EAAC,YAAY;yBACtB;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAC,CAAE;6BACxD;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;iCAAE,IAAI,CAAC,KAAK,CAAC,aAAa;;8BAA2B;0BACpF;yBAEL;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,EAAC,CAAE;6BAC9D;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;;iCAAoB,IAAI,CAAC,KAAK,CAAC,eAAe;;8BAAuB;0BACpG;yBAEL;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAC,CAAE;6BACvD;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;;iCAAoB,IAAI,CAAC,KAAK,CAAC,cAAc;;8BAAe;0BAC3F;yBAEL;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAC,CAAE;6BACrD;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;;iCAAW,cAAc;8BAAQ;0BAChE;sBACJ;kBACH;cACJ,CACL;UACJ;;;YA1EgB,iBAAiB;IAAS,mBAAM,SAAS;;sBAAzC,iBAAiB;;;;;;;;;;;;;;ACP/B,UAAS,gBAAgB,CAAC,QAAQ,EACzC;AACI,SAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChD,SAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,UAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;AAC5B,aAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAC;AAAC,oBAAO,IAAI,CAAC,CAAC,CAAC,CAAC;UAAC;MAC3C;AACD,YAAO,GAAG,CAAC","file":"login.js","sourcesContent":["import ReactDOM from 'react-dom';\nimport React from 'react';\nimport Login from './signin';\n\nReactDOM.render(<Login/>, document.getElementById('main'));\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/login.jsx\n **/","'use strict';\n\nmodule.exports = require('react/lib/ReactDOM');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-dom/index.js\n ** module id = 1\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdates = require('./ReactUpdates');\nvar ReactVersion = require('./ReactVersion');\n\nvar findDOMNode = require('./findDOMNode');\nvar renderSubtreeIntoContainer = require('./renderSubtreeIntoContainer');\nvar warning = require('fbjs/lib/warning');\n\nReactDefaultInjection.inject();\n\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\n\nvar React = {\n findDOMNode: findDOMNode,\n render: render,\n unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n version: ReactVersion,\n\n /* eslint-disable camelcase */\n unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n CurrentOwner: ReactCurrentOwner,\n InstanceHandles: ReactInstanceHandles,\n Mount: ReactMount,\n Reconciler: ReactReconciler,\n TextComponent: ReactDOMTextComponent\n });\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n // First check if devtools is not installed\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');\n }\n }\n\n // If we're in IE8, check to see if we are in compatibility mode and provide\n // information on preventing compatibility mode\n var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : undefined;\n\n var expectedFeatures = [\n // shims\n Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,\n\n // shams\n Object.create, Object.freeze];\n\n for (var i = 0; i < expectedFeatures.length; i++) {\n if (!expectedFeatures[i]) {\n console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');\n break;\n }\n }\n }\n}\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOM.js\n ** module id = 2\n ** module chunks = 0 1\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/process/browser.js\n ** module id = 3\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCurrentOwner.js\n ** module id = 4\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactMount = require('./ReactMount');\n\nvar assign = require('./Object.assign');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setTextContent = require('./setTextContent');\nvar validateDOMNesting = require('./validateDOMNesting');\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n * - When mounting text into the DOM, adjacent text nodes are merged.\n * - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings in elements so that they can undergo\n * the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (props) {\n // This constructor and its argument is currently used by mocks.\n};\n\nassign(ReactDOMTextComponent.prototype, {\n\n /**\n * @param {ReactText} text\n * @internal\n */\n construct: function (text) {\n // TODO: This is really a ReactText (ReactNode), not a ReactElement\n this._currentElement = text;\n this._stringText = '' + text;\n\n // Properties\n this._rootNodeID = null;\n this._mountIndex = 0;\n },\n\n /**\n * Creates the markup for this text node. This node is not intended to have\n * any features besides containing text content.\n *\n * @param {string} rootID DOM ID of the root node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {string} Markup for this text node.\n * @internal\n */\n mountComponent: function (rootID, transaction, context) {\n if (process.env.NODE_ENV !== 'production') {\n if (context[validateDOMNesting.ancestorInfoContextKey]) {\n validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);\n }\n }\n\n this._rootNodeID = rootID;\n if (transaction.useCreateElement) {\n var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n var el = ownerDocument.createElement('span');\n DOMPropertyOperations.setAttributeForID(el, rootID);\n // Populate node cache\n ReactMount.getID(el);\n setTextContent(el, this._stringText);\n return el;\n } else {\n var escapedText = escapeTextContentForBrowser(this._stringText);\n\n if (transaction.renderToStaticMarkup) {\n // Normally we'd wrap this in a `span` for the reasons stated above, but\n // since this is a situation where React won't take over (static pages),\n // we can simply return the text as it is.\n return escapedText;\n }\n\n return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';\n }\n },\n\n /**\n * Updates this component by updating the text content.\n *\n * @param {ReactText} nextText The next text content\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n receiveComponent: function (nextText, transaction) {\n if (nextText !== this._currentElement) {\n this._currentElement = nextText;\n var nextStringText = '' + nextText;\n if (nextStringText !== this._stringText) {\n // TODO: Save this as pending props and use performUpdateIfNecessary\n // and/or updateComponent to do the actual update for consistency with\n // other component types?\n this._stringText = nextStringText;\n var node = ReactMount.getNode(this._rootNodeID);\n DOMChildrenOperations.updateTextContent(node, nextStringText);\n }\n }\n },\n\n unmountComponent: function () {\n ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n }\n\n});\n\nmodule.exports = ReactDOMTextComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextComponent.js\n ** module id = 5\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar Danger = require('./Danger');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\nvar ReactPerf = require('./ReactPerf');\n\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nfunction insertChildAt(parentNode, childNode, index) {\n // By exploiting arrays returning `undefined` for an undefined index, we can\n // rely exclusively on `insertBefore(node, null)` instead of also using\n // `appendChild(node)`. However, using `undefined` is not allowed by all\n // browsers so we must replace it with `null`.\n\n // fix render order error in safari\n // IE8 will throw error when index out of list size.\n var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);\n\n parentNode.insertBefore(childNode, beforeChild);\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\n\n updateTextContent: setTextContent,\n\n /**\n * Updates a component's children by processing a series of updates. The\n * update configurations are each expected to have a `parentNode` property.\n *\n * @param {array<object>} updates List of update configurations.\n * @param {array<string>} markupList List of markup strings.\n * @internal\n */\n processUpdates: function (updates, markupList) {\n var update;\n // Mapping from parent IDs to initial child orderings.\n var initialChildren = null;\n // List of children that will be moved or removed.\n var updatedChildren = null;\n\n for (var i = 0; i < updates.length; i++) {\n update = updates[i];\n if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\n var updatedIndex = update.fromIndex;\n var updatedChild = update.parentNode.childNodes[updatedIndex];\n var parentID = update.parentID;\n\n !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;\n\n initialChildren = initialChildren || {};\n initialChildren[parentID] = initialChildren[parentID] || [];\n initialChildren[parentID][updatedIndex] = updatedChild;\n\n updatedChildren = updatedChildren || [];\n updatedChildren.push(updatedChild);\n }\n }\n\n var renderedMarkup;\n // markupList is either a list of markup or just a list of elements\n if (markupList.length && typeof markupList[0] === 'string') {\n renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\n } else {\n renderedMarkup = markupList;\n }\n\n // Remove updated children first so that `toIndex` is consistent.\n if (updatedChildren) {\n for (var j = 0; j < updatedChildren.length; j++) {\n updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\n }\n }\n\n for (var k = 0; k < updates.length; k++) {\n update = updates[k];\n switch (update.type) {\n case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);\n break;\n case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);\n break;\n case ReactMultiChildUpdateTypes.SET_MARKUP:\n setInnerHTML(update.parentNode, update.content);\n break;\n case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n setTextContent(update.parentNode, update.content);\n break;\n case ReactMultiChildUpdateTypes.REMOVE_NODE:\n // Already removed by the for-loop above.\n break;\n }\n }\n }\n\n};\n\nReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {\n updateTextContent: 'updateTextContent'\n});\n\nmodule.exports = DOMChildrenOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMChildrenOperations.js\n ** module id = 6\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar createNodesFromMarkup = require('fbjs/lib/createNodesFromMarkup');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getMarkupWrap = require('fbjs/lib/getMarkupWrap');\nvar invariant = require('fbjs/lib/invariant');\n\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\/>]+)/;\nvar RESULT_INDEX_ATTR = 'data-danger-index';\n\n/**\n * Extracts the `nodeName` from a string of markup.\n *\n * NOTE: Extracting the `nodeName` does not require a regular expression match\n * because we make assumptions about React-generated markup (i.e. there are no\n * spaces surrounding the opening tag and there is at least one attribute).\n *\n * @param {string} markup String of markup.\n * @return {string} Node name of the supplied markup.\n * @see http://jsperf.com/extract-nodename\n */\nfunction getNodeName(markup) {\n return markup.substring(1, markup.indexOf(' '));\n}\n\nvar Danger = {\n\n /**\n * Renders markup into an array of nodes. The markup is expected to render\n * into a list of root nodes. Also, the length of `resultList` and\n * `markupList` should be the same.\n *\n * @param {array<string>} markupList List of markup strings to render.\n * @return {array<DOMElement>} List of rendered nodes.\n * @internal\n */\n dangerouslyRenderMarkup: function (markupList) {\n !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;\n var nodeName;\n var markupByNodeName = {};\n // Group markup by `nodeName` if a wrap is necessary, else by '*'.\n for (var i = 0; i < markupList.length; i++) {\n !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;\n nodeName = getNodeName(markupList[i]);\n nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\n markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\n markupByNodeName[nodeName][i] = markupList[i];\n }\n var resultList = [];\n var resultListAssignmentCount = 0;\n for (nodeName in markupByNodeName) {\n if (!markupByNodeName.hasOwnProperty(nodeName)) {\n continue;\n }\n var markupListByNodeName = markupByNodeName[nodeName];\n\n // This for-in loop skips the holes of the sparse array. The order of\n // iteration should follow the order of assignment, which happens to match\n // numerical index order, but we don't rely on that.\n var resultIndex;\n for (resultIndex in markupListByNodeName) {\n if (markupListByNodeName.hasOwnProperty(resultIndex)) {\n var markup = markupListByNodeName[resultIndex];\n\n // Push the requested markup with an additional RESULT_INDEX_ATTR\n // attribute. If the markup does not start with a < character, it\n // will be discarded below (with an appropriate console.error).\n markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,\n // This index will be parsed back out below.\n '$1 ' + RESULT_INDEX_ATTR + '=\"' + resultIndex + '\" ');\n }\n }\n\n // Render each group of markup with similar wrapping `nodeName`.\n var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.\n );\n\n for (var j = 0; j < renderNodes.length; ++j) {\n var renderNode = renderNodes[j];\n if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\n\n resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\n renderNode.removeAttribute(RESULT_INDEX_ATTR);\n\n !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined;\n\n resultList[resultIndex] = renderNode;\n\n // This should match resultList.length and markupList.length when\n // we're done.\n resultListAssignmentCount += 1;\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Danger: Discarding unexpected node:', renderNode);\n }\n }\n }\n\n // Although resultList was populated out of order, it should now be a dense\n // array.\n !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined;\n\n !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined;\n\n return resultList;\n },\n\n /**\n * Replaces a node with a string of markup at its current position within its\n * parent. The markup must render into a single root node.\n *\n * @param {DOMElement} oldChild Child node to replace.\n * @param {string} markup Markup to render in place of the child node.\n * @internal\n */\n dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined;\n !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined;\n\n var newChild;\n if (typeof markup === 'string') {\n newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n } else {\n newChild = markup;\n }\n oldChild.parentNode.replaceChild(newChild, oldChild);\n }\n\n};\n\nmodule.exports = Danger;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Danger.js\n ** module id = 7\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 8\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createNodesFromMarkup\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n var nodeNameMatch = markup.match(nodeNamePattern);\n return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n var node = dummyNode;\n !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined;\n var nodeName = getNodeName(markup);\n\n var wrap = nodeName && getMarkupWrap(nodeName);\n if (wrap) {\n node.innerHTML = wrap[1] + markup + wrap[2];\n\n var wrapDepth = wrap[0];\n while (wrapDepth--) {\n node = node.lastChild;\n }\n } else {\n node.innerHTML = markup;\n }\n\n var scripts = node.getElementsByTagName('script');\n if (scripts.length) {\n !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined;\n createArrayFromMixed(scripts).forEach(handleScript);\n }\n\n var nodes = createArrayFromMixed(node.childNodes);\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/createNodesFromMarkup.js\n ** module id = 9\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createArrayFromMixed\n * @typechecks\n */\n\n'use strict';\n\nvar toArray = require('./toArray');\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n * A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n * Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n return(\n // not null/false\n !!obj && (\n // arrays are objects, NodeLists are functions in Safari\n typeof obj == 'object' || typeof obj == 'function') &&\n // quacks like an array\n 'length' in obj &&\n // not window\n !('setInterval' in obj) &&\n // no DOM node should be considered an array-like\n // a 'select' element has 'length' and 'item' properties on IE8\n typeof obj.nodeType != 'number' && (\n // a real array\n Array.isArray(obj) ||\n // arguments\n 'callee' in obj ||\n // HTMLCollection/NodeList\n 'item' in obj)\n );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n * var createArrayFromMixed = require('createArrayFromMixed');\n *\n * function takesOneOrMoreThings(things) {\n * things = createArrayFromMixed(things);\n * ...\n * }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n if (!hasArrayNature(obj)) {\n return [obj];\n } else if (Array.isArray(obj)) {\n return obj.slice();\n } else {\n return toArray(obj);\n }\n}\n\nmodule.exports = createArrayFromMixed;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/createArrayFromMixed.js\n ** module id = 10\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule toArray\n * @typechecks\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n var length = obj.length;\n\n // Some browse builtin objects can report typeof 'function' (e.g. NodeList in\n // old versions of Safari).\n !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined;\n\n !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined;\n\n !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined;\n\n // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n // without method will throw during the slice call and skip straight to the\n // fallback.\n if (obj.hasOwnProperty) {\n try {\n return Array.prototype.slice.call(obj);\n } catch (e) {\n // IE < 9 does not support Array#slice on collections objects\n }\n }\n\n // Fall back to copying key by key. This assumes all keys have a value,\n // so will not preserve sparsely populated inputs.\n var ret = Array(length);\n for (var ii = 0; ii < length; ii++) {\n ret[ii] = obj[ii];\n }\n return ret;\n}\n\nmodule.exports = toArray;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/toArray.js\n ** module id = 11\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function (condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/invariant.js\n ** module id = 12\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getMarkupWrap\n */\n\n/*eslint-disable fb-www/unsafe-html */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n '*': [1, '?<div>', '</div>'],\n\n 'area': [1, '<map>', '</map>'],\n 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n 'legend': [1, '<fieldset>', '</fieldset>'],\n 'param': [1, '<object>', '</object>'],\n 'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n 'optgroup': selectWrap,\n 'option': selectWrap,\n\n 'caption': tableWrap,\n 'colgroup': tableWrap,\n 'tbody': tableWrap,\n 'tfoot': tableWrap,\n 'thead': tableWrap,\n\n 'td': trWrap,\n 'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n markupWrap[nodeName] = svgWrap;\n shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;\n if (!markupWrap.hasOwnProperty(nodeName)) {\n nodeName = '*';\n }\n if (!shouldWrap.hasOwnProperty(nodeName)) {\n if (nodeName === '*') {\n dummyNode.innerHTML = '<link />';\n } else {\n dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n }\n shouldWrap[nodeName] = !dummyNode.firstChild;\n }\n return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getMarkupWrap.js\n ** module id = 13\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyFunction\n */\n\n\"use strict\";\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nfunction emptyFunction() {}\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyFunction.js\n ** module id = 14\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n INSERT_MARKUP: null,\n MOVE_EXISTING: null,\n REMOVE_NODE: null,\n SET_MARKUP: null,\n TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\n ** module id = 15\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyMirror\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function (obj) {\n var ret = {};\n var key;\n !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyMirror.js\n ** module id = 16\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPerf\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * ReactPerf is a general AOP system designed to measure performance. This\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\n */\nvar ReactPerf = {\n /**\n * Boolean to enable/disable measurement. Set to false by default to prevent\n * accidental logging and perf loss.\n */\n enableMeasure: false,\n\n /**\n * Holds onto the measure function in use. By default, don't measure\n * anything, but we'll override this if we inject a measure function.\n */\n storedMeasure: _noMeasure,\n\n /**\n * @param {object} object\n * @param {string} objectName\n * @param {object<string>} methodNames\n */\n measureMethods: function (object, objectName, methodNames) {\n if (process.env.NODE_ENV !== 'production') {\n for (var key in methodNames) {\n if (!methodNames.hasOwnProperty(key)) {\n continue;\n }\n object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);\n }\n }\n },\n\n /**\n * Use this to wrap methods you want to measure. Zero overhead in production.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\n measure: function (objName, fnName, func) {\n if (process.env.NODE_ENV !== 'production') {\n var measuredFunc = null;\n var wrapper = function () {\n if (ReactPerf.enableMeasure) {\n if (!measuredFunc) {\n measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\n }\n return measuredFunc.apply(this, arguments);\n }\n return func.apply(this, arguments);\n };\n wrapper.displayName = objName + '_' + fnName;\n return wrapper;\n }\n return func;\n },\n\n injection: {\n /**\n * @param {function} measure\n */\n injectMeasure: function (measure) {\n ReactPerf.storedMeasure = measure;\n }\n }\n};\n\n/**\n * Simply passes through the measured function, without measuring it.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\nfunction _noMeasure(objName, fnName, func) {\n return func;\n}\n\nmodule.exports = ReactPerf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPerf.js\n ** module id = 17\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n/* globals MSApp */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = function (node, html) {\n node.innerHTML = html;\n};\n\n// Win8 apps: Allow all html to be inserted\nif (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n setInnerHTML = function (node, html) {\n MSApp.execUnsafeLocalFunction(function () {\n node.innerHTML = html;\n });\n };\n}\n\nif (ExecutionEnvironment.canUseDOM) {\n // IE8: When updating a just created node with innerHTML only leading\n // whitespace is removed. When updating an existing node with innerHTML\n // whitespace in root TextNodes is also collapsed.\n // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n // Feature detection; only IE8 is known to behave improperly like this.\n var testElement = document.createElement('div');\n testElement.innerHTML = ' ';\n if (testElement.innerHTML === '') {\n setInnerHTML = function (node, html) {\n // Magic theory: IE8 supposedly differentiates between added and updated\n // nodes when processing innerHTML, innerHTML on updated nodes suffers\n // from worse whitespace behavior. Re-adding a node like this triggers\n // the initial and more favorable whitespace behavior.\n // TODO: What to do on a detached node?\n if (node.parentNode) {\n node.parentNode.replaceChild(node, node);\n }\n\n // We also implement a workaround for non-visible tags disappearing into\n // thin air on IE8, this only happens if there is no visible text\n // in-front of the non-visible tags. Piggyback on the whitespace fix\n // and simply check if any non-visible tags appear in the source.\n if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n // Recover leading whitespace by temporarily prepending any character.\n // \\uFEFF has the potential advantage of being zero-width/invisible.\n // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n // the actual Unicode character (by Babel, for example).\n // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n // deleteData leaves an empty `TextNode` which offsets the index of all\n // children. Definitely want to avoid this.\n var textNode = node.firstChild;\n if (textNode.data.length === 1) {\n node.removeChild(textNode);\n } else {\n textNode.deleteData(0, 1);\n }\n } else {\n node.innerHTML = html;\n }\n };\n }\n}\n\nmodule.exports = setInnerHTML;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setInnerHTML.js\n ** module id = 18\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n if (!('textContent' in document.documentElement)) {\n setTextContent = function (node, text) {\n setInnerHTML(node, escapeTextContentForBrowser(text));\n };\n }\n}\n\nmodule.exports = setTextContent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setTextContent.js\n ** module id = 19\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\nvar ESCAPE_LOOKUP = {\n '&': '&',\n '>': '>',\n '<': '<',\n '\"': '"',\n '\\'': '''\n};\n\nvar ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escaper(match) {\n return ESCAPE_LOOKUP[match];\n}\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n return ('' + text).replace(ESCAPE_REGEX, escaper);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/escapeTextContentForBrowser.js\n ** module id = 20\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactPerf = require('./ReactPerf');\n\nvar quoteAttributeValueForBrowser = require('./quoteAttributeValueForBrowser');\nvar warning = require('fbjs/lib/warning');\n\n// Simplified subset\nvar VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\\w\\.\\-]*$/;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n return true;\n }\n if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;\n return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var reactProps = {\n children: true,\n dangerouslySetInnerHTML: true,\n key: true,\n ref: true\n };\n var warnedProperties = {};\n\n var warnUnknownProperty = function (name) {\n if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n return;\n }\n\n warnedProperties[name] = true;\n var lowerCasedName = name.toLowerCase();\n\n // data-* attributes should be lowercase; suggest the lowercase version\n var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\n // For now, only warn when we have a suggested correction. This prevents\n // logging too much when using transferPropsTo.\n process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;\n };\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n /**\n * Creates markup for the ID property.\n *\n * @param {string} id Unescaped ID.\n * @return {string} Markup string.\n */\n createMarkupForID: function (id) {\n return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n },\n\n setAttributeForID: function (node, id) {\n node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n },\n\n /**\n * Creates markup for a property.\n *\n * @param {string} name\n * @param {*} value\n * @return {?string} Markup string, or null if the property was invalid.\n */\n createMarkupForProperty: function (name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n if (shouldIgnoreValue(propertyInfo, value)) {\n return '';\n }\n var attributeName = propertyInfo.attributeName;\n if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n return attributeName + '=\"\"';\n }\n return attributeName + '=' + quoteAttributeValueForBrowser(value);\n } else if (DOMProperty.isCustomAttribute(name)) {\n if (value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n } else if (process.env.NODE_ENV !== 'production') {\n warnUnknownProperty(name);\n }\n return null;\n },\n\n /**\n * Creates markup for a custom property.\n *\n * @param {string} name\n * @param {*} value\n * @return {string} Markup string, or empty string if the property was invalid.\n */\n createMarkupForCustomAttribute: function (name, value) {\n if (!isAttributeNameSafe(name) || value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n },\n\n /**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n setValueForProperty: function (node, name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, value);\n } else if (shouldIgnoreValue(propertyInfo, value)) {\n this.deleteValueForProperty(node, name);\n } else if (propertyInfo.mustUseAttribute) {\n var attributeName = propertyInfo.attributeName;\n var namespace = propertyInfo.attributeNamespace;\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n if (namespace) {\n node.setAttributeNS(namespace, attributeName, '' + value);\n } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n node.setAttribute(attributeName, '');\n } else {\n node.setAttribute(attributeName, '' + value);\n }\n } else {\n var propName = propertyInfo.propertyName;\n // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\n // property type before comparing; only `value` does and is string.\n if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propName] = value;\n }\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n DOMPropertyOperations.setValueForAttribute(node, name, value);\n } else if (process.env.NODE_ENV !== 'production') {\n warnUnknownProperty(name);\n }\n },\n\n setValueForAttribute: function (node, name, value) {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (value == null) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, '' + value);\n }\n },\n\n /**\n * Deletes the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\n deleteValueForProperty: function (node, name) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, undefined);\n } else if (propertyInfo.mustUseAttribute) {\n node.removeAttribute(propertyInfo.attributeName);\n } else {\n var propName = propertyInfo.propertyName;\n var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);\n if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {\n node[propName] = defaultValue;\n }\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n node.removeAttribute(name);\n } else if (process.env.NODE_ENV !== 'production') {\n warnUnknownProperty(name);\n }\n }\n\n};\n\nReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {\n setValueForProperty: 'setValueForProperty',\n setValueForAttribute: 'setValueForAttribute',\n deleteValueForProperty: 'deleteValueForProperty'\n});\n\nmodule.exports = DOMPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMPropertyOperations.js\n ** module id = 21\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n /**\n * Mapping from normalized, camelcased property names to a configuration that\n * specifies how the associated DOM property should be accessed or rendered.\n */\n MUST_USE_ATTRIBUTE: 0x1,\n MUST_USE_PROPERTY: 0x2,\n HAS_SIDE_EFFECTS: 0x4,\n HAS_BOOLEAN_VALUE: 0x8,\n HAS_NUMERIC_VALUE: 0x10,\n HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\n HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\n\n /**\n * Inject some specialized knowledge about the DOM. This takes a config object\n * with the following properties:\n *\n * isCustomAttribute: function that given an attribute name will return true\n * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n * attributes where it's impossible to enumerate all of the possible\n * attribute names,\n *\n * Properties: object mapping DOM property name to one of the\n * DOMPropertyInjection constants or null. If your attribute isn't in here,\n * it won't get written to the DOM.\n *\n * DOMAttributeNames: object mapping React attribute name to the DOM\n * attribute name. Attribute names not specified use the **lowercase**\n * normalized name.\n *\n * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n * attribute namespace URL. (Attribute names not specified use no namespace.)\n *\n * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n * Property names not specified use the normalized name.\n *\n * DOMMutationMethods: Properties that require special mutation methods. If\n * `value` is undefined, the mutation method should unset the property.\n *\n * @param {object} domPropertyConfig the config as described above.\n */\n injectDOMPropertyConfig: function (domPropertyConfig) {\n var Injection = DOMPropertyInjection;\n var Properties = domPropertyConfig.Properties || {};\n var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n if (domPropertyConfig.isCustomAttribute) {\n DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n }\n\n for (var propName in Properties) {\n !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property ' + '\\'%s\\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;\n\n var lowerCased = propName.toLowerCase();\n var propConfig = Properties[propName];\n\n var propertyInfo = {\n attributeName: lowerCased,\n attributeNamespace: null,\n propertyName: propName,\n mutationMethod: null,\n\n mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),\n mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),\n hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n };\n\n !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;\n !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;\n !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;\n\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[lowerCased] = propName;\n }\n\n if (DOMAttributeNames.hasOwnProperty(propName)) {\n var attributeName = DOMAttributeNames[propName];\n propertyInfo.attributeName = attributeName;\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[attributeName] = propName;\n }\n }\n\n if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n }\n\n if (DOMPropertyNames.hasOwnProperty(propName)) {\n propertyInfo.propertyName = DOMPropertyNames[propName];\n }\n\n if (DOMMutationMethods.hasOwnProperty(propName)) {\n propertyInfo.mutationMethod = DOMMutationMethods[propName];\n }\n\n DOMProperty.properties[propName] = propertyInfo;\n }\n }\n};\nvar defaultValueCache = {};\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n * > DOMProperty.isValid['id']\n * true\n * > DOMProperty.isValid['foobar']\n * undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n ID_ATTRIBUTE_NAME: 'data-reactid',\n\n /**\n * Map from property \"standard name\" to an object with info about how to set\n * the property in the DOM. Each object contains:\n *\n * attributeName:\n * Used when rendering markup or with `*Attribute()`.\n * attributeNamespace\n * propertyName:\n * Used on DOM node instances. (This includes properties that mutate due to\n * external factors.)\n * mutationMethod:\n * If non-null, used instead of the property or `setAttribute()` after\n * initial render.\n * mustUseAttribute:\n * Whether the property must be accessed and mutated using `*Attribute()`.\n * (This includes anything that fails `<propName> in <element>`.)\n * mustUseProperty:\n * Whether the property must be accessed and mutated as an object property.\n * hasSideEffects:\n * Whether or not setting a value causes side effects such as triggering\n * resources to be loaded or text selection changes. If true, we read from\n * the DOM before updating to ensure that the value is only set if it has\n * changed.\n * hasBooleanValue:\n * Whether the property should be removed when set to a falsey value.\n * hasNumericValue:\n * Whether the property must be numeric or parse as a numeric and should be\n * removed when set to a falsey value.\n * hasPositiveNumericValue:\n * Whether the property must be positive numeric or parse as a positive\n * numeric and should be removed when set to a falsey value.\n * hasOverloadedBooleanValue:\n * Whether the property can be used as a flag as well as with a value.\n * Removed when strictly equal to false; present without a value when\n * strictly equal to true; present with a value otherwise.\n */\n properties: {},\n\n /**\n * Mapping from lowercase property names to the properly cased version, used\n * to warn in the case of missing properties. Available only in __DEV__.\n * @type {Object}\n */\n getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,\n\n /**\n * All of the isCustomAttribute() functions that have been injected.\n */\n _isCustomAttributeFunctions: [],\n\n /**\n * Checks whether a property name is a custom attribute.\n * @method\n */\n isCustomAttribute: function (attributeName) {\n for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n if (isCustomAttributeFn(attributeName)) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Returns the default property value for a DOM property (i.e., not an\n * attribute). Most default values are '' or false, but not all. Worse yet,\n * some (in particular, `type`) vary depending on the type of element.\n *\n * TODO: Is it better to grab all the possible properties when creating an\n * element to avoid having to create the same element twice?\n */\n getDefaultValueForProperty: function (nodeName, prop) {\n var nodeDefaults = defaultValueCache[nodeName];\n var testElement;\n if (!nodeDefaults) {\n defaultValueCache[nodeName] = nodeDefaults = {};\n }\n if (!(prop in nodeDefaults)) {\n testElement = document.createElement(nodeName);\n nodeDefaults[prop] = testElement[prop];\n }\n return nodeDefaults[prop];\n },\n\n injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMProperty.js\n ** module id = 22\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule quoteAttributeValueForBrowser\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/quoteAttributeValueForBrowser.js\n ** module id = 23\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule warning\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function (condition, format) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n };\n}\n\nmodule.exports = warning;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/warning.js\n ** module id = 24\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar ReactMount = require('./ReactMount');\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,\n\n /**\n * If a particular environment requires that some resources be cleaned up,\n * specify this in the injected Mixin. In the DOM, we would likely want to\n * purge any cached node ID lookups.\n *\n * @private\n */\n unmountIDFromEnvironment: function (rootNodeID) {\n ReactMount.purgeID(rootNodeID);\n }\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\n ** module id = 25\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMIDOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Errors for properties that should not be updated with `updatePropertyByID()`.\n *\n * @type {object}\n * @private\n */\nvar INVALID_PROPERTY_ERRORS = {\n dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\n style: '`style` must be set using `updateStylesByID()`.'\n};\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n /**\n * Updates a DOM node with new property values. This should only be used to\n * update DOM properties in `DOMProperty`.\n *\n * @param {string} id ID of the node to update.\n * @param {string} name A valid property name, see `DOMProperty`.\n * @param {*} value New value of the property.\n * @internal\n */\n updatePropertyByID: function (id, name, value) {\n var node = ReactMount.getNode(id);\n !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;\n\n // If we're updating to null or undefined, we should remove the property\n // from the DOM node instead of inadvertantly setting to a string. This\n // brings us in line with the same behavior we have on initial render.\n if (value != null) {\n DOMPropertyOperations.setValueForProperty(node, name, value);\n } else {\n DOMPropertyOperations.deleteValueForProperty(node, name);\n }\n },\n\n /**\n * Replaces a DOM node that exists in the document with markup.\n *\n * @param {string} id ID of child to be replaced.\n * @param {string} markup Dangerous markup to inject in place of child.\n * @internal\n * @see {Danger.dangerouslyReplaceNodeWithMarkup}\n */\n dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {\n var node = ReactMount.getNode(id);\n DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\n },\n\n /**\n * Updates a component's children by processing a series of updates.\n *\n * @param {array<object>} updates List of update configurations.\n * @param {array<string>} markup List of markup strings.\n * @internal\n */\n dangerouslyProcessChildrenUpdates: function (updates, markup) {\n for (var i = 0; i < updates.length; i++) {\n updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\n }\n DOMChildrenOperations.processUpdates(updates, markup);\n }\n};\n\nReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {\n dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',\n dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'\n});\n\nmodule.exports = ReactDOMIDOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMIDOperations.js\n ** module id = 26\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactElement = require('./ReactElement');\nvar ReactEmptyComponentRegistry = require('./ReactEmptyComponentRegistry');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar containsNode = require('fbjs/lib/containsNode');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\nvar setInnerHTML = require('./setInnerHTML');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar nodeCache = {};\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);\n\n/** Mapping from reactRootID to React component instance. */\nvar instancesByReactRootID = {};\n\n/** Mapping from reactRootID to `container` nodes. */\nvar containersByReactRootID = {};\n\nif (process.env.NODE_ENV !== 'production') {\n /** __DEV__-only mapping from reactRootID to root elements. */\n var rootElementsByReactRootID = {};\n}\n\n// Used to store breadth-first search state in findComponentRoot.\nvar findComponentRootReusableArray = [];\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n var minLen = Math.min(string1.length, string2.length);\n for (var i = 0; i < minLen; i++) {\n if (string1.charAt(i) !== string2.charAt(i)) {\n return i;\n }\n }\n return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOC_NODE_TYPE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\n/**\n * @param {DOMElement} container DOM element that may contain a React component.\n * @return {?string} A \"reactRoot\" ID, if a React component is rendered.\n */\nfunction getReactRootID(container) {\n var rootElement = getReactRootElementInContainer(container);\n return rootElement && ReactMount.getID(rootElement);\n}\n\n/**\n * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\n * element can return its control whose name or ID equals ATTR_NAME. All\n * DOM nodes support `getAttributeNode` but this can also get called on\n * other objects so just return '' if we're given something other than a\n * DOM node (such as window).\n *\n * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\n * @return {string} ID of the supplied `domNode`.\n */\nfunction getID(node) {\n var id = internalGetID(node);\n if (id) {\n if (nodeCache.hasOwnProperty(id)) {\n var cached = nodeCache[id];\n if (cached !== node) {\n !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;\n\n nodeCache[id] = node;\n }\n } else {\n nodeCache[id] = node;\n }\n }\n\n return id;\n}\n\nfunction internalGetID(node) {\n // If node is something like a window, document, or text node, none of\n // which support attributes or a .getAttribute method, gracefully return\n // the empty string, as if the attribute were missing.\n return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Sets the React-specific ID of the given node.\n *\n * @param {DOMElement} node The DOM node whose ID will be set.\n * @param {string} id The value of the ID attribute.\n */\nfunction setID(node, id) {\n var oldID = internalGetID(node);\n if (oldID !== id) {\n delete nodeCache[oldID];\n }\n node.setAttribute(ATTR_NAME, id);\n nodeCache[id] = node;\n}\n\n/**\n * Finds the node with the supplied React-generated DOM ID.\n *\n * @param {string} id A React-generated DOM ID.\n * @return {DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNode(id) {\n if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n nodeCache[id] = ReactMount.findReactNodeByID(id);\n }\n return nodeCache[id];\n}\n\n/**\n * Finds the node with the supplied public React instance.\n *\n * @param {*} instance A public React instance.\n * @return {?DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNodeFromInstance(instance) {\n var id = ReactInstanceMap.get(instance)._rootNodeID;\n if (ReactEmptyComponentRegistry.isNullComponentID(id)) {\n return null;\n }\n if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n nodeCache[id] = ReactMount.findReactNodeByID(id);\n }\n return nodeCache[id];\n}\n\n/**\n * A node is \"valid\" if it is contained by a currently mounted container.\n *\n * This means that the node does not have to be contained by a document in\n * order to be considered valid.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @param {string} id The expected ID of the node.\n * @return {boolean} Whether the node is contained by a mounted container.\n */\nfunction isValid(node, id) {\n if (node) {\n !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;\n\n var container = ReactMount.findReactContainerForID(id);\n if (container && containsNode(container, node)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Causes the cache to forget about one React-specific ID.\n *\n * @param {string} id The ID to forget.\n */\nfunction purgeID(id) {\n delete nodeCache[id];\n}\n\nvar deepestNodeSoFar = null;\nfunction findDeepestCachedAncestorImpl(ancestorID) {\n var ancestor = nodeCache[ancestorID];\n if (ancestor && isValid(ancestor, ancestorID)) {\n deepestNodeSoFar = ancestor;\n } else {\n // This node isn't populated in the cache, so presumably none of its\n // descendants are. Break out of the loop.\n return false;\n }\n}\n\n/**\n * Return the deepest cached node whose ID is a prefix of `targetID`.\n */\nfunction findDeepestCachedAncestor(targetID) {\n deepestNodeSoFar = null;\n ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);\n\n var foundNode = deepestNodeSoFar;\n deepestNodeSoFar = null;\n return foundNode;\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {\n if (ReactDOMFeatureFlags.useCreateElement) {\n context = assign({}, context);\n if (container.nodeType === DOC_NODE_TYPE) {\n context[ownerDocumentContextKey] = container;\n } else {\n context[ownerDocumentContextKey] = container.ownerDocument;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (context === emptyObject) {\n context = {};\n }\n var tag = container.nodeName.toLowerCase();\n context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);\n }\n var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);\n componentInstance._renderedComponent._topLevelWrapper = componentInstance;\n ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {\n var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* forceHTML */shouldReuseMarkup);\n transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);\n ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container) {\n ReactReconciler.unmountComponent(instance);\n\n if (container.nodeType === DOC_NODE_TYPE) {\n container = container.documentElement;\n }\n\n // http://jsperf.com/emptying-a-node\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(node) {\n var reactRootID = getReactRootID(node);\n return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;\n}\n\n/**\n * Returns the first (deepest) ancestor of a node which is rendered by this copy\n * of React.\n */\nfunction findFirstReactDOMImpl(node) {\n // This node might be from another React instance, so we make sure not to\n // examine the node cache here\n for (; node && node.parentNode !== node; node = node.parentNode) {\n if (node.nodeType !== 1) {\n // Not a DOMElement, therefore not a React component\n continue;\n }\n var nodeID = internalGetID(node);\n if (!nodeID) {\n continue;\n }\n var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n\n // If containersByReactRootID contains the container we find by crawling up\n // the tree, we know that this instance of React rendered the node.\n // nb. isValid's strategy (with containsNode) does not work because render\n // trees may be nested and we don't want a false positive in that case.\n var current = node;\n var lastID;\n do {\n lastID = internalGetID(current);\n current = current.parentNode;\n if (current == null) {\n // The passed-in node has been detached from the container it was\n // originally rendered into.\n return null;\n }\n } while (lastID !== reactRootID);\n\n if (current === containersByReactRootID[reactRootID]) {\n return node;\n }\n }\n return null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar TopLevelWrapper = function () {};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (process.env.NODE_ENV !== 'production') {\n TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n // this.props is actually a ReactElement\n return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n * ReactMount.render(\n * component,\n * document.getElementById('container')\n * );\n *\n * <div id=\"container\"> <-- Supplied `container`.\n * <div data-reactid=\".3\"> <-- Rendered reactRoot of React\n * // ... component.\n * </div>\n * </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n TopLevelWrapper: TopLevelWrapper,\n\n /** Exposed for debugging purposes **/\n _instancesByReactRootID: instancesByReactRootID,\n\n /**\n * This is a hook provided to support rendering React components while\n * ensuring that the apparent scroll position of its `container` does not\n * change.\n *\n * @param {DOMElement} container The `container` being rendered into.\n * @param {function} renderCallback This must be called once to do the render.\n */\n scrollMonitor: function (container, renderCallback) {\n renderCallback();\n },\n\n /**\n * Take a component that's already mounted into the DOM and replace its props\n * @param {ReactComponent} prevComponent component instance already in the DOM\n * @param {ReactElement} nextElement component instance to render\n * @param {DOMElement} container container to render into\n * @param {?function} callback function triggered on completion\n */\n _updateRootComponent: function (prevComponent, nextElement, container, callback) {\n ReactMount.scrollMonitor(container, function () {\n ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n }\n });\n\n if (process.env.NODE_ENV !== 'production') {\n // Record the root element in case it later gets transplanted.\n rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);\n }\n\n return prevComponent;\n },\n\n /**\n * Register a component into the instance map and starts scroll value\n * monitoring\n * @param {ReactComponent} nextComponent component instance to render\n * @param {DOMElement} container container to render into\n * @return {string} reactRoot ID prefix\n */\n _registerComponent: function (nextComponent, container) {\n !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n\n var reactRootID = ReactMount.registerContainer(container);\n instancesByReactRootID[reactRootID] = nextComponent;\n return reactRootID;\n },\n\n /**\n * Render a new component into the DOM.\n * @param {ReactElement} nextElement element to render\n * @param {DOMElement} container container to render into\n * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n * @return {ReactComponent} nextComponent\n */\n _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case.\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n var componentInstance = instantiateReactComponent(nextElement, null);\n var reactRootID = ReactMount._registerComponent(componentInstance, container);\n\n // The initial render is synchronous but any updates that happen during\n // rendering, in componentWillMount or componentDidMount, will be batched\n // according to the current batching strategy.\n\n ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);\n\n if (process.env.NODE_ENV !== 'production') {\n // Record the root element in case it later gets transplanted.\n rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);\n }\n\n return componentInstance;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;\n return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n },\n\n _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :\n // Check if it quacks like an element\n nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;\n\n process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;\n\n var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n var prevComponent = instancesByReactRootID[getReactRootID(container)];\n\n if (prevComponent) {\n var prevWrappedElement = prevComponent._currentElement;\n var prevElement = prevWrappedElement.props;\n if (shouldUpdateReactComponent(prevElement, nextElement)) {\n var publicInst = prevComponent._renderedComponent.getPublicInstance();\n var updatedCallback = callback && function () {\n callback.call(publicInst);\n };\n ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);\n return publicInst;\n } else {\n ReactMount.unmountComponentAtNode(container);\n }\n }\n\n var reactRootElement = getReactRootElementInContainer(container);\n var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;\n\n if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n var rootElementSibling = reactRootElement;\n while (rootElementSibling) {\n if (internalGetID(rootElementSibling)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;\n break;\n }\n rootElementSibling = rootElementSibling.nextSibling;\n }\n }\n }\n\n var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();\n if (callback) {\n callback.call(component);\n }\n return component;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n render: function (nextElement, container, callback) {\n return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n },\n\n /**\n * Registers a container node into which React components will be rendered.\n * This also creates the \"reactRoot\" ID that will be assigned to the element\n * rendered within.\n *\n * @param {DOMElement} container DOM element to register as a container.\n * @return {string} The \"reactRoot\" ID of elements rendered within.\n */\n registerContainer: function (container) {\n var reactRootID = getReactRootID(container);\n if (reactRootID) {\n // If one exists, make sure it is a valid \"reactRoot\" ID.\n reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\n }\n if (!reactRootID) {\n // No valid \"reactRoot\" ID found, create one.\n reactRootID = ReactInstanceHandles.createReactRootID();\n }\n containersByReactRootID[reactRootID] = container;\n return reactRootID;\n },\n\n /**\n * Unmounts and destroys the React component rendered in the `container`.\n *\n * @param {DOMElement} container DOM element containing a React component.\n * @return {boolean} True if a component was found in and unmounted from\n * `container`\n */\n unmountComponentAtNode: function (container) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (Strictly speaking, unmounting won't cause a\n // render but we still don't expect to be in a render call here.)\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n var reactRootID = getReactRootID(container);\n var component = instancesByReactRootID[reactRootID];\n if (!component) {\n // Check if the node being unmounted was rendered by React, but isn't a\n // root node.\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n // Check if the container itself is a React root node.\n var containerID = internalGetID(container);\n var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;\n }\n\n return false;\n }\n ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);\n delete instancesByReactRootID[reactRootID];\n delete containersByReactRootID[reactRootID];\n if (process.env.NODE_ENV !== 'production') {\n delete rootElementsByReactRootID[reactRootID];\n }\n return true;\n },\n\n /**\n * Finds the container DOM element that contains React component to which the\n * supplied DOM `id` belongs.\n *\n * @param {string} id The ID of an element rendered by a React component.\n * @return {?DOMElement} DOM element that contains the `id`.\n */\n findReactContainerForID: function (id) {\n var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\n var container = containersByReactRootID[reactRootID];\n\n if (process.env.NODE_ENV !== 'production') {\n var rootElement = rootElementsByReactRootID[reactRootID];\n if (rootElement && rootElement.parentNode !== container) {\n process.env.NODE_ENV !== 'production' ? warning(\n // Call internalGetID here because getID calls isValid which calls\n // findReactContainerForID (this function).\n internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;\n var containerChild = container.firstChild;\n if (containerChild && reactRootID === internalGetID(containerChild)) {\n // If the container has a new child with the same ID as the old\n // root element, then rootElementsByReactRootID[reactRootID] is\n // just stale and needs to be updated. The case that deserves a\n // warning is when the container is empty.\n rootElementsByReactRootID[reactRootID] = containerChild;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;\n }\n }\n }\n\n return container;\n },\n\n /**\n * Finds an element rendered by React with the supplied ID.\n *\n * @param {string} id ID of a DOM node in the React component.\n * @return {DOMElement} Root DOM node of the React component.\n */\n findReactNodeByID: function (id) {\n var reactRoot = ReactMount.findReactContainerForID(id);\n return ReactMount.findComponentRoot(reactRoot, id);\n },\n\n /**\n * Traverses up the ancestors of the supplied node to find a node that is a\n * DOM representation of a React component rendered by this copy of React.\n *\n * @param {*} node\n * @return {?DOMEventTarget}\n * @internal\n */\n getFirstReactDOM: function (node) {\n return findFirstReactDOMImpl(node);\n },\n\n /**\n * Finds a node with the supplied `targetID` inside of the supplied\n * `ancestorNode`. Exploits the ID naming scheme to perform the search\n * quickly.\n *\n * @param {DOMEventTarget} ancestorNode Search from this root.\n * @pararm {string} targetID ID of the DOM representation of the component.\n * @return {DOMEventTarget} DOM node with the supplied `targetID`.\n * @internal\n */\n findComponentRoot: function (ancestorNode, targetID) {\n var firstChildren = findComponentRootReusableArray;\n var childIndex = 0;\n\n var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\n\n if (process.env.NODE_ENV !== 'production') {\n // This will throw on the next line; give an early warning\n process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\\'t find the root component node for data-reactid value ' + '`%s`. If you\\'re seeing this message, it probably means that ' + 'you\\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;\n }\n\n firstChildren[0] = deepestAncestor.firstChild;\n firstChildren.length = 1;\n\n while (childIndex < firstChildren.length) {\n var child = firstChildren[childIndex++];\n var targetChild;\n\n while (child) {\n var childID = ReactMount.getID(child);\n if (childID) {\n // Even if we find the node we're looking for, we finish looping\n // through its siblings to ensure they're cached so that we don't have\n // to revisit this node again. Otherwise, we make n^2 calls to getID\n // when visiting the many children of a single node in order.\n\n if (targetID === childID) {\n targetChild = child;\n } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\n // If we find a child whose ID is an ancestor of the given ID,\n // then we can be sure that we only want to search the subtree\n // rooted at this child, so we can throw out the rest of the\n // search state.\n firstChildren.length = childIndex = 0;\n firstChildren.push(child.firstChild);\n }\n } else {\n // If this child had no ID, then there's a chance that it was\n // injected automatically by the browser, as when a `<table>`\n // element sprouts an extra `<tbody>` child as a side effect of\n // `.innerHTML` parsing. Optimistically continue down this\n // branch, but not before examining the other siblings.\n firstChildren.push(child.firstChild);\n }\n\n child = child.nextSibling;\n }\n\n if (targetChild) {\n // Emptying firstChildren/findComponentRootReusableArray is\n // not necessary for correctness, but it helps the GC reclaim\n // any nodes that were left at the end of the search.\n firstChildren.length = 0;\n\n return targetChild;\n }\n }\n\n firstChildren.length = 0;\n\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;\n },\n\n _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {\n !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;\n\n if (shouldReuseMarkup) {\n var rootElement = getReactRootElementInContainer(container);\n if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n return;\n } else {\n var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n var rootMarkup = rootElement.outerHTML;\n rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n var normalizedMarkup = markup;\n if (process.env.NODE_ENV !== 'production') {\n // because rootMarkup is retrieved from the DOM, various normalizations\n // will have occurred which will not be present in `markup`. Here,\n // insert markup into a <div> or <iframe> depending on the container\n // type to perform the same normalizations before comparing.\n var normalizer;\n if (container.nodeType === ELEMENT_NODE_TYPE) {\n normalizer = document.createElement('div');\n normalizer.innerHTML = markup;\n normalizedMarkup = normalizer.innerHTML;\n } else {\n normalizer = document.createElement('iframe');\n document.body.appendChild(normalizer);\n normalizer.contentDocument.write(markup);\n normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n document.body.removeChild(normalizer);\n }\n }\n\n var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\\n%s', difference) : invariant(false) : undefined;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : undefined;\n }\n }\n }\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but ' + 'you didn\\'t use server rendering. We can\\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n\n if (transaction.useCreateElement) {\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n container.appendChild(markup);\n } else {\n setInnerHTML(container, markup);\n }\n },\n\n ownerDocumentContextKey: ownerDocumentContextKey,\n\n /**\n * React ID utilities.\n */\n\n getReactRootID: getReactRootID,\n\n getID: getID,\n\n setID: setID,\n\n getNode: getNode,\n\n getNodeFromInstance: getNodeFromInstance,\n\n isValid: isValid,\n\n purgeID: purgeID\n};\n\nReactPerf.measureMethods(ReactMount, 'ReactMount', {\n _renderNewRootComponent: '_renderNewRootComponent',\n _mountImageIntoNode: '_mountImageIntoNode'\n});\n\nmodule.exports = ReactMount;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMount.js\n ** module id = 27\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactEventEmitterMixin = require('./ReactEventEmitterMixin');\nvar ReactPerf = require('./ReactPerf');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar assign = require('./Object.assign');\nvar isEventSupported = require('./isEventSupported');\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactEventListener, which is injected and can therefore support pluggable\n * event sources. This is the only work that occurs in the main thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginHub` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|EventPluginHub| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n topAbort: 'abort',\n topBlur: 'blur',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topChange: 'change',\n topClick: 'click',\n topCompositionEnd: 'compositionend',\n topCompositionStart: 'compositionstart',\n topCompositionUpdate: 'compositionupdate',\n topContextMenu: 'contextmenu',\n topCopy: 'copy',\n topCut: 'cut',\n topDoubleClick: 'dblclick',\n topDrag: 'drag',\n topDragEnd: 'dragend',\n topDragEnter: 'dragenter',\n topDragExit: 'dragexit',\n topDragLeave: 'dragleave',\n topDragOver: 'dragover',\n topDragStart: 'dragstart',\n topDrop: 'drop',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topFocus: 'focus',\n topInput: 'input',\n topKeyDown: 'keydown',\n topKeyPress: 'keypress',\n topKeyUp: 'keyup',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topMouseDown: 'mousedown',\n topMouseMove: 'mousemove',\n topMouseOut: 'mouseout',\n topMouseOver: 'mouseover',\n topMouseUp: 'mouseup',\n topPaste: 'paste',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topScroll: 'scroll',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topSelectionChange: 'selectionchange',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTextInput: 'textInput',\n topTimeUpdate: 'timeupdate',\n topTouchCancel: 'touchcancel',\n topTouchEnd: 'touchend',\n topTouchMove: 'touchmove',\n topTouchStart: 'touchstart',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting',\n topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n // directly.\n if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n mountAt[topListenersIDKey] = reactTopListenersCounter++;\n alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n }\n return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {\n\n /**\n * Injectable event backend\n */\n ReactEventListener: null,\n\n injection: {\n /**\n * @param {object} ReactEventListener\n */\n injectReactEventListener: function (ReactEventListener) {\n ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n }\n },\n\n /**\n * Sets whether or not any created callbacks should be enabled.\n *\n * @param {boolean} enabled True if callbacks should be enabled.\n */\n setEnabled: function (enabled) {\n if (ReactBrowserEventEmitter.ReactEventListener) {\n ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n }\n },\n\n /**\n * @return {boolean} True if callbacks are enabled.\n */\n isEnabled: function () {\n return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n },\n\n /**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} contentDocumentHandle Document which owns the container\n */\n listenTo: function (registrationName, contentDocumentHandle) {\n var mountAt = contentDocumentHandle;\n var isListening = getListeningForDocument(mountAt);\n var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n var topLevelTypes = EventConstants.topLevelTypes;\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n if (dependency === topLevelTypes.topWheel) {\n if (isEventSupported('wheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n } else if (isEventSupported('mousewheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n } else {\n // Firefox needs to capture a different mouse scroll event.\n // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n }\n } else if (dependency === topLevelTypes.topScroll) {\n\n if (isEventSupported('scroll', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n } else {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n }\n } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n if (isEventSupported('focus', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n } else if (isEventSupported('focusin')) {\n // IE has `focusin` and `focusout` events which bubble.\n // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n }\n\n // to make sure blur and focus event listeners are only attached once\n isListening[topLevelTypes.topBlur] = true;\n isListening[topLevelTypes.topFocus] = true;\n } else if (topEventMapping.hasOwnProperty(dependency)) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n }\n\n isListening[dependency] = true;\n }\n }\n },\n\n trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n },\n\n trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n },\n\n /**\n * Listens to window scroll and resize events. We cache scroll values so that\n * application code can access them without triggering reflows.\n *\n * NOTE: Scroll events do not bubble.\n *\n * @see http://www.quirksmode.org/dom/events/scroll.html\n */\n ensureScrollValueMonitoring: function () {\n if (!isMonitoringScrollValue) {\n var refresh = ViewportMetrics.refreshScrollValues;\n ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n isMonitoringScrollValue = true;\n }\n },\n\n eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,\n\n registrationNameModules: EventPluginHub.registrationNameModules,\n\n putListener: EventPluginHub.putListener,\n\n getListener: EventPluginHub.getListener,\n\n deleteListener: EventPluginHub.deleteListener,\n\n deleteAllListeners: EventPluginHub.deleteAllListeners\n\n});\n\nReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {\n putListener: 'putListener',\n deleteListener: 'deleteListener'\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserEventEmitter.js\n ** module id = 28\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n topAbort: null,\n topBlur: null,\n topCanPlay: null,\n topCanPlayThrough: null,\n topChange: null,\n topClick: null,\n topCompositionEnd: null,\n topCompositionStart: null,\n topCompositionUpdate: null,\n topContextMenu: null,\n topCopy: null,\n topCut: null,\n topDoubleClick: null,\n topDrag: null,\n topDragEnd: null,\n topDragEnter: null,\n topDragExit: null,\n topDragLeave: null,\n topDragOver: null,\n topDragStart: null,\n topDrop: null,\n topDurationChange: null,\n topEmptied: null,\n topEncrypted: null,\n topEnded: null,\n topError: null,\n topFocus: null,\n topInput: null,\n topKeyDown: null,\n topKeyPress: null,\n topKeyUp: null,\n topLoad: null,\n topLoadedData: null,\n topLoadedMetadata: null,\n topLoadStart: null,\n topMouseDown: null,\n topMouseMove: null,\n topMouseOut: null,\n topMouseOver: null,\n topMouseUp: null,\n topPaste: null,\n topPause: null,\n topPlay: null,\n topPlaying: null,\n topProgress: null,\n topRateChange: null,\n topReset: null,\n topScroll: null,\n topSeeked: null,\n topSeeking: null,\n topSelectionChange: null,\n topStalled: null,\n topSubmit: null,\n topSuspend: null,\n topTextInput: null,\n topTimeUpdate: null,\n topTouchCancel: null,\n topTouchEnd: null,\n topTouchMove: null,\n topTouchStart: null,\n topVolumeChange: null,\n topWaiting: null,\n topWheel: null\n});\n\nvar EventConstants = {\n topLevelTypes: topLevelTypes,\n PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventConstants.js\n ** module id = 29\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n if (event) {\n EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e, false);\n};\n\n/**\n * - `InstanceHandle`: [required] Module that performs logical traversals of DOM\n * hierarchy given ids of the logical DOM elements involved.\n */\nvar InstanceHandle = null;\n\nfunction validateInstanceHandle() {\n var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;\n process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined;\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n /**\n * Methods for injecting dependencies.\n */\n injection: {\n\n /**\n * @param {object} InjectedMount\n * @public\n */\n injectMount: EventPluginUtils.injection.injectMount,\n\n /**\n * @param {object} InjectedInstanceHandle\n * @public\n */\n injectInstanceHandle: function (InjectedInstanceHandle) {\n InstanceHandle = InjectedInstanceHandle;\n if (process.env.NODE_ENV !== 'production') {\n validateInstanceHandle();\n }\n },\n\n getInstanceHandle: function () {\n if (process.env.NODE_ENV !== 'production') {\n validateInstanceHandle();\n }\n return InstanceHandle;\n },\n\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n },\n\n eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,\n\n registrationNameModules: EventPluginRegistry.registrationNameModules,\n\n /**\n * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\n *\n * @param {string} id ID of the DOM element.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {?function} listener The callback to store.\n */\n putListener: function (id, registrationName, listener) {\n !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined;\n\n var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n bankForRegistrationName[id] = listener;\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.didPutListener) {\n PluginModule.didPutListener(id, registrationName, listener);\n }\n },\n\n /**\n * @param {string} id ID of the DOM element.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n getListener: function (id, registrationName) {\n var bankForRegistrationName = listenerBank[registrationName];\n return bankForRegistrationName && bankForRegistrationName[id];\n },\n\n /**\n * Deletes a listener from the registration bank.\n *\n * @param {string} id ID of the DOM element.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n */\n deleteListener: function (id, registrationName) {\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(id, registrationName);\n }\n\n var bankForRegistrationName = listenerBank[registrationName];\n // TODO: This should never be null -- when is it?\n if (bankForRegistrationName) {\n delete bankForRegistrationName[id];\n }\n },\n\n /**\n * Deletes all listeners for the DOM element with the supplied ID.\n *\n * @param {string} id ID of the DOM element.\n */\n deleteAllListeners: function (id) {\n for (var registrationName in listenerBank) {\n if (!listenerBank[registrationName][id]) {\n continue;\n }\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(id, registrationName);\n }\n\n delete listenerBank[registrationName][id];\n }\n },\n\n /**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var events;\n var plugins = EventPluginRegistry.plugins;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n },\n\n /**\n * Enqueues a synthetic event that should be dispatched when\n * `processEventQueue` is invoked.\n *\n * @param {*} events An accumulation of synthetic events.\n * @internal\n */\n enqueueEvents: function (events) {\n if (events) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n },\n\n /**\n * Dispatches all synthetic events on the event queue.\n *\n * @internal\n */\n processEventQueue: function (simulated) {\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n if (simulated) {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n } else {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n }\n !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined;\n // This would be a good time to rethrow if any of the event handlers threw.\n ReactErrorUtils.rethrowCaughtError();\n },\n\n /**\n * These are needed for tests only. Do not use!\n */\n __purge: function () {\n listenerBank = {};\n },\n\n __getListenerBank: function () {\n return listenerBank;\n }\n\n};\n\nmodule.exports = EventPluginHub;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginHub.js\n ** module id = 30\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!EventPluginOrder) {\n // Wait until an `EventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var PluginModule = namesToPlugins[pluginName];\n var pluginIndex = EventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined;\n if (EventPluginRegistry.plugins[pluginIndex]) {\n continue;\n }\n !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined;\n EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n var publishedEvents = PluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined;\n EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined;\n EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n /**\n * Ordered list of injected plugins.\n */\n plugins: [],\n\n /**\n * Mapping from event name to dispatch config\n */\n eventNameDispatchConfigs: {},\n\n /**\n * Mapping from registration name to plugin module\n */\n registrationNameModules: {},\n\n /**\n * Mapping from registration name to event name\n */\n registrationNameDependencies: {},\n\n /**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n injectEventPluginOrder: function (InjectedEventPluginOrder) {\n !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined;\n // Clone the ordering so it cannot be dynamically mutated.\n EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n recomputePluginOrdering();\n },\n\n /**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n injectEventPluginsByName: function (injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var PluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined;\n namesToPlugins[pluginName] = PluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n },\n\n /**\n * Looks up the plugin for the supplied event.\n *\n * @param {object} event A synthetic event.\n * @return {?object} The plugin that created the supplied event.\n * @internal\n */\n getPluginModuleForEvent: function (event) {\n var dispatchConfig = event.dispatchConfig;\n if (dispatchConfig.registrationName) {\n return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n }\n for (var phase in dispatchConfig.phasedRegistrationNames) {\n if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n continue;\n }\n var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n if (PluginModule) {\n return PluginModule;\n }\n }\n return null;\n },\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _resetEventPlugins: function () {\n EventPluginOrder = null;\n for (var pluginName in namesToPlugins) {\n if (namesToPlugins.hasOwnProperty(pluginName)) {\n delete namesToPlugins[pluginName];\n }\n }\n EventPluginRegistry.plugins.length = 0;\n\n var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n for (var eventName in eventNameDispatchConfigs) {\n if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n delete eventNameDispatchConfigs[eventName];\n }\n }\n\n var registrationNameModules = EventPluginRegistry.registrationNameModules;\n for (var registrationName in registrationNameModules) {\n if (registrationNameModules.hasOwnProperty(registrationName)) {\n delete registrationNameModules[registrationName];\n }\n }\n }\n\n};\n\nmodule.exports = EventPluginRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginRegistry.js\n ** module id = 31\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `Mount`: [required] Module that can convert between React dom IDs and\n * actual node references.\n */\nvar injection = {\n Mount: null,\n injectMount: function (InjectedMount) {\n injection.Mount = InjectedMount;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined;\n }\n }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchIDs = event._dispatchIDs;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var idsIsArr = Array.isArray(dispatchIDs);\n var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined;\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {string} domID DOM id to pass to the callback.\n */\nfunction executeDispatch(event, simulated, listener, domID) {\n var type = event.type || 'unknown-event';\n event.currentTarget = injection.Mount.getNode(domID);\n if (simulated) {\n ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID);\n } else {\n ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID);\n }\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchIDs = event._dispatchIDs;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and IDs are two parallel arrays that are always in sync.\n executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, simulated, dispatchListeners, dispatchIDs);\n }\n event._dispatchListeners = null;\n event._dispatchIDs = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchIDs = event._dispatchIDs;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and IDs are two parallel arrays that are always in sync.\n if (dispatchListeners[i](event, dispatchIDs[i])) {\n return dispatchIDs[i];\n }\n }\n } else if (dispatchListeners) {\n if (dispatchListeners(event, dispatchIDs)) {\n return dispatchIDs;\n }\n }\n return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n event._dispatchIDs = null;\n event._dispatchListeners = null;\n return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n var dispatchListener = event._dispatchListeners;\n var dispatchID = event._dispatchIDs;\n !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined;\n var res = dispatchListener ? dispatchListener(event, dispatchID) : null;\n event._dispatchListeners = null;\n event._dispatchIDs = null;\n return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n isEndish: isEndish,\n isMoveish: isMoveish,\n isStartish: isStartish,\n\n executeDirectDispatch: executeDirectDispatch,\n executeDispatchesInOrder: executeDispatchesInOrder,\n executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n hasDispatches: hasDispatches,\n\n getNode: function (id) {\n return injection.Mount.getNode(id);\n },\n getID: function (node) {\n return injection.Mount.getID(node);\n },\n\n injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginUtils.js\n ** module id = 32\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n * @typechecks\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n try {\n return func(a, b);\n } catch (x) {\n if (caughtError === null) {\n caughtError = x;\n }\n return undefined;\n }\n}\n\nvar ReactErrorUtils = {\n invokeGuardedCallback: invokeGuardedCallback,\n\n /**\n * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n * handler are sure to be rethrown by rethrowCaughtError.\n */\n invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n /**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n rethrowCaughtError: function () {\n if (caughtError) {\n var error = caughtError;\n caughtError = null;\n throw error;\n }\n }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n /**\n * To help development we can get better devtools integration by simulating a\n * real browser event.\n */\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n var boundFunc = func.bind(null, a, b);\n var evtType = 'react-' + name;\n fakeNode.addEventListener(evtType, boundFunc, false);\n var evt = document.createEvent('Event');\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n fakeNode.removeEventListener(evtType, boundFunc, false);\n };\n }\n}\n\nmodule.exports = ReactErrorUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactErrorUtils.js\n ** module id = 33\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n *\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined;\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n var currentIsArray = Array.isArray(current);\n var nextIsArray = Array.isArray(next);\n\n if (currentIsArray && nextIsArray) {\n current.push.apply(current, next);\n return current;\n }\n\n if (currentIsArray) {\n current.push(next);\n return current;\n }\n\n if (nextIsArray) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\nmodule.exports = accumulateInto;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/accumulateInto.js\n ** module id = 34\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\nvar forEachAccumulated = function (arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n};\n\nmodule.exports = forEachAccumulated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/forEachAccumulated.js\n ** module id = 35\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventEmitterMixin\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\n\nfunction runEventQueueInBatch(events) {\n EventPluginHub.enqueueEvents(events);\n EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n /**\n * Streams a fired top-level event to `EventPluginHub` where plugins have the\n * opportunity to create `ReactEvent`s to be dispatched.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native environment event.\n */\n handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n runEventQueueInBatch(events);\n }\n};\n\nmodule.exports = ReactEventEmitterMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventEmitterMixin.js\n ** module id = 36\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n currentScrollLeft: 0,\n\n currentScrollTop: 0,\n\n refreshScrollValues: function (scrollPosition) {\n ViewportMetrics.currentScrollLeft = scrollPosition.x;\n ViewportMetrics.currentScrollTop = scrollPosition.y;\n }\n\n};\n\nmodule.exports = ViewportMetrics;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ViewportMetrics.js\n ** module id = 37\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Object.assign\n */\n\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\n\n'use strict';\n\nfunction assign(target, sources) {\n if (target == null) {\n throw new TypeError('Object.assign target cannot be null or undefined');\n }\n\n var to = Object(target);\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\n var nextSource = arguments[nextIndex];\n if (nextSource == null) {\n continue;\n }\n\n var from = Object(nextSource);\n\n // We don't currently support accessors nor proxies. Therefore this\n // copy cannot throw. If we ever supported this then we must handle\n // exceptions and side-effects. We don't support symbols so they won't\n // be transferred.\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n }\n\n return to;\n}\n\nmodule.exports = assign;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Object.assign.js\n ** module id = 38\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature = document.implementation && document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = (eventName in document);\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isEventSupported.js\n ** module id = 39\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFeatureFlags\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n useCreateElement: false\n};\n\nmodule.exports = ReactDOMFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFeatureFlags.js\n ** module id = 40\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar assign = require('./Object.assign');\nvar canDefineProperty = require('./canDefineProperty');\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\n/**\n * Base constructor for all React elements. This is only used to make this\n * work with a dynamic instanceof check. Nothing should live on this prototype.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allow us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n if (process.env.NODE_ENV !== 'production') {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n if (canDefineProperty) {\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n } else {\n element._store.validated = false;\n element._self = self;\n element._source = source;\n }\n Object.freeze(element.props);\n Object.freeze(element);\n }\n\n return element;\n};\n\nReactElement.createElement = function (type, config, children) {\n var propName;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n ref = config.ref === undefined ? null : config.ref;\n key = config.key === undefined ? null : '' + config.key;\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (typeof props[propName] === 'undefined') {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\nReactElement.createFactory = function (type) {\n var factory = ReactElement.createElement.bind(null, type);\n // Expose the type on the factory and the prototype so that it can be\n // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n // This should not be named `constructor` since this may not be the function\n // that created the element, and it may not even be a constructor.\n // Legacy hook TODO: Warn if this is accessed\n factory.type = type;\n return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n};\n\nReactElement.cloneAndReplaceProps = function (oldElement, newProps) {\n var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);\n\n if (process.env.NODE_ENV !== 'production') {\n // If the key on the original is valid, then the clone is valid\n newElement._store.validated = oldElement._store.validated;\n }\n\n return newElement;\n};\n\nReactElement.cloneElement = function (element, config, children) {\n var propName;\n\n // Original props are copied\n var props = assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (config.ref !== undefined) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (config.key !== undefined) {\n key = '' + config.key;\n }\n // Remaining properties override existing props\n for (propName in config) {\n if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nmodule.exports = ReactElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElement.js\n ** module id = 41\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n try {\n Object.defineProperty({}, 'x', { get: function () {} });\n canDefineProperty = true;\n } catch (x) {\n // IE will fail on defineProperty\n }\n}\n\nmodule.exports = canDefineProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/canDefineProperty.js\n ** module id = 42\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponentRegistry\n */\n\n'use strict';\n\n// This registry keeps track of the React IDs of the components that rendered to\n// `null` (in reality a placeholder such as `noscript`)\nvar nullComponentIDsRegistry = {};\n\n/**\n * @param {string} id Component's `_rootNodeID`.\n * @return {boolean} True if the component is rendered to null.\n */\nfunction isNullComponentID(id) {\n return !!nullComponentIDsRegistry[id];\n}\n\n/**\n * Mark the component as having rendered to null.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction registerNullComponentID(id) {\n nullComponentIDsRegistry[id] = true;\n}\n\n/**\n * Unmark the component as having rendered to null: it renders to something now.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction deregisterNullComponentID(id) {\n delete nullComponentIDsRegistry[id];\n}\n\nvar ReactEmptyComponentRegistry = {\n isNullComponentID: isNullComponentID,\n registerNullComponentID: registerNullComponentID,\n deregisterNullComponentID: deregisterNullComponentID\n};\n\nmodule.exports = ReactEmptyComponentRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponentRegistry.js\n ** module id = 43\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceHandles\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactRootIndex = require('./ReactRootIndex');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar SEPARATOR = '.';\nvar SEPARATOR_LENGTH = SEPARATOR.length;\n\n/**\n * Maximum depth of traversals before we consider the possibility of a bad ID.\n */\nvar MAX_TREE_DEPTH = 10000;\n\n/**\n * Creates a DOM ID prefix to use when mounting React components.\n *\n * @param {number} index A unique integer\n * @return {string} React root ID.\n * @internal\n */\nfunction getReactRootIDString(index) {\n return SEPARATOR + index.toString(36);\n}\n\n/**\n * Checks if a character in the supplied ID is a separator or the end.\n *\n * @param {string} id A React DOM ID.\n * @param {number} index Index of the character to check.\n * @return {boolean} True if the character is a separator or end of the ID.\n * @private\n */\nfunction isBoundary(id, index) {\n return id.charAt(index) === SEPARATOR || index === id.length;\n}\n\n/**\n * Checks if the supplied string is a valid React DOM ID.\n *\n * @param {string} id A React DOM ID, maybe.\n * @return {boolean} True if the string is a valid React DOM ID.\n * @private\n */\nfunction isValidID(id) {\n return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;\n}\n\n/**\n * Checks if the first ID is an ancestor of or equal to the second ID.\n *\n * @param {string} ancestorID\n * @param {string} descendantID\n * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.\n * @internal\n */\nfunction isAncestorIDOf(ancestorID, descendantID) {\n return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);\n}\n\n/**\n * Gets the parent ID of the supplied React DOM ID, `id`.\n *\n * @param {string} id ID of a component.\n * @return {string} ID of the parent, or an empty string.\n * @private\n */\nfunction getParentID(id) {\n return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';\n}\n\n/**\n * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the\n * supplied `destinationID`. If they are equal, the ID is returned.\n *\n * @param {string} ancestorID ID of an ancestor node of `destinationID`.\n * @param {string} destinationID ID of the destination node.\n * @return {string} Next ID on the path from `ancestorID` to `destinationID`.\n * @private\n */\nfunction getNextDescendantID(ancestorID, destinationID) {\n !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined;\n !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined;\n if (ancestorID === destinationID) {\n return ancestorID;\n }\n // Skip over the ancestor and the immediate separator. Traverse until we hit\n // another separator or we reach the end of `destinationID`.\n var start = ancestorID.length + SEPARATOR_LENGTH;\n var i;\n for (i = start; i < destinationID.length; i++) {\n if (isBoundary(destinationID, i)) {\n break;\n }\n }\n return destinationID.substr(0, i);\n}\n\n/**\n * Gets the nearest common ancestor ID of two IDs.\n *\n * Using this ID scheme, the nearest common ancestor ID is the longest common\n * prefix of the two IDs that immediately preceded a \"marker\" in both strings.\n *\n * @param {string} oneID\n * @param {string} twoID\n * @return {string} Nearest common ancestor ID, or the empty string if none.\n * @private\n */\nfunction getFirstCommonAncestorID(oneID, twoID) {\n var minLength = Math.min(oneID.length, twoID.length);\n if (minLength === 0) {\n return '';\n }\n var lastCommonMarkerIndex = 0;\n // Use `<=` to traverse until the \"EOL\" of the shorter string.\n for (var i = 0; i <= minLength; i++) {\n if (isBoundary(oneID, i) && isBoundary(twoID, i)) {\n lastCommonMarkerIndex = i;\n } else if (oneID.charAt(i) !== twoID.charAt(i)) {\n break;\n }\n }\n var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);\n !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined;\n return longestCommonID;\n}\n\n/**\n * Traverses the parent path between two IDs (either up or down). The IDs must\n * not be the same, and there must exist a parent path between them. If the\n * callback returns `false`, traversal is stopped.\n *\n * @param {?string} start ID at which to start traversal.\n * @param {?string} stop ID at which to end traversal.\n * @param {function} cb Callback to invoke each ID with.\n * @param {*} arg Argument to invoke the callback with.\n * @param {?boolean} skipFirst Whether or not to skip the first node.\n * @param {?boolean} skipLast Whether or not to skip the last node.\n * @private\n */\nfunction traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {\n start = start || '';\n stop = stop || '';\n !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined;\n var traverseUp = isAncestorIDOf(stop, start);\n !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined;\n // Traverse from `start` to `stop` one depth at a time.\n var depth = 0;\n var traverse = traverseUp ? getParentID : getNextDescendantID;\n for (var id = start;; /* until break */id = traverse(id, stop)) {\n var ret;\n if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {\n ret = cb(id, traverseUp, arg);\n }\n if (ret === false || id === stop) {\n // Only break //after// visiting `stop`.\n break;\n }\n !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined;\n }\n}\n\n/**\n * Manages the IDs assigned to DOM representations of React components. This\n * uses a specific scheme in order to traverse the DOM efficiently (e.g. in\n * order to simulate events).\n *\n * @internal\n */\nvar ReactInstanceHandles = {\n\n /**\n * Constructs a React root ID\n * @return {string} A React root ID.\n */\n createReactRootID: function () {\n return getReactRootIDString(ReactRootIndex.createReactRootIndex());\n },\n\n /**\n * Constructs a React ID by joining a root ID with a name.\n *\n * @param {string} rootID Root ID of a parent component.\n * @param {string} name A component's name (as flattened children).\n * @return {string} A React ID.\n * @internal\n */\n createReactID: function (rootID, name) {\n return rootID + name;\n },\n\n /**\n * Gets the DOM ID of the React component that is the root of the tree that\n * contains the React component with the supplied DOM ID.\n *\n * @param {string} id DOM ID of a React component.\n * @return {?string} DOM ID of the React component that is the root.\n * @internal\n */\n getReactRootIDFromNodeID: function (id) {\n if (id && id.charAt(0) === SEPARATOR && id.length > 1) {\n var index = id.indexOf(SEPARATOR, 1);\n return index > -1 ? id.substr(0, index) : id;\n }\n return null;\n },\n\n /**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * NOTE: Does not invoke the callback on the nearest common ancestor because\n * nothing \"entered\" or \"left\" that element.\n *\n * @param {string} leaveID ID being left.\n * @param {string} enterID ID being entered.\n * @param {function} cb Callback to invoke on each entered/left ID.\n * @param {*} upArg Argument to invoke the callback with on left IDs.\n * @param {*} downArg Argument to invoke the callback with on entered IDs.\n * @internal\n */\n traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) {\n var ancestorID = getFirstCommonAncestorID(leaveID, enterID);\n if (ancestorID !== leaveID) {\n traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);\n }\n if (ancestorID !== enterID) {\n traverseParentPath(ancestorID, enterID, cb, downArg, true, false);\n }\n },\n\n /**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n *\n * NOTE: This traversal happens on IDs without touching the DOM.\n *\n * @param {string} targetID ID of the target node.\n * @param {function} cb Callback to invoke.\n * @param {*} arg Argument to invoke the callback with.\n * @internal\n */\n traverseTwoPhase: function (targetID, cb, arg) {\n if (targetID) {\n traverseParentPath('', targetID, cb, arg, true, false);\n traverseParentPath(targetID, '', cb, arg, false, true);\n }\n },\n\n /**\n * Same as `traverseTwoPhase` but skips the `targetID`.\n */\n traverseTwoPhaseSkipTarget: function (targetID, cb, arg) {\n if (targetID) {\n traverseParentPath('', targetID, cb, arg, true, true);\n traverseParentPath(targetID, '', cb, arg, true, true);\n }\n },\n\n /**\n * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For\n * example, passing `.0.$row-0.1` would result in `cb` getting called\n * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.\n *\n * NOTE: This traversal happens on IDs without touching the DOM.\n *\n * @param {string} targetID ID of the target node.\n * @param {function} cb Callback to invoke.\n * @param {*} arg Argument to invoke the callback with.\n * @internal\n */\n traverseAncestors: function (targetID, cb, arg) {\n traverseParentPath('', targetID, cb, arg, true, false);\n },\n\n getFirstCommonAncestorID: getFirstCommonAncestorID,\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _getNextDescendantID: getNextDescendantID,\n\n isAncestorIDOf: isAncestorIDOf,\n\n SEPARATOR: SEPARATOR\n\n};\n\nmodule.exports = ReactInstanceHandles;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceHandles.js\n ** module id = 44\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar ReactRootIndexInjection = {\n /**\n * @param {function} _createReactRootIndex\n */\n injectCreateReactRootIndex: function (_createReactRootIndex) {\n ReactRootIndex.createReactRootIndex = _createReactRootIndex;\n }\n};\n\nvar ReactRootIndex = {\n createReactRootIndex: null,\n injection: ReactRootIndexInjection\n};\n\nmodule.exports = ReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRootIndex.js\n ** module id = 45\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\nvar ReactInstanceMap = {\n\n /**\n * This API should be called `delete` but we'd have to make sure to always\n * transform these to strings for IE support. When this transform is fully\n * supported we can rename it.\n */\n remove: function (key) {\n key._reactInternalInstance = undefined;\n },\n\n get: function (key) {\n return key._reactInternalInstance;\n },\n\n has: function (key) {\n return key._reactInternalInstance !== undefined;\n },\n\n set: function (key, value) {\n key._reactInternalInstance = value;\n }\n\n};\n\nmodule.exports = ReactInstanceMap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceMap.js\n ** module id = 46\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMarkupChecksum\n */\n\n'use strict';\n\nvar adler32 = require('./adler32');\n\nvar TAG_END = /\\/?>/;\n\nvar ReactMarkupChecksum = {\n CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n /**\n * @param {string} markup Markup string\n * @return {string} Markup string with checksum attribute attached\n */\n addChecksumToMarkup: function (markup) {\n var checksum = adler32(markup);\n\n // Add checksum (handle both parent tags and self-closing tags)\n return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n },\n\n /**\n * @param {string} markup to use\n * @param {DOMElement} element root React element\n * @returns {boolean} whether or not the markup is the same\n */\n canReuseMarkup: function (markup, element) {\n var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n var markupChecksum = adler32(markup);\n return markupChecksum === existingChecksum;\n }\n};\n\nmodule.exports = ReactMarkupChecksum;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMarkupChecksum.js\n ** module id = 47\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule adler32\n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n var a = 1;\n var b = 0;\n var i = 0;\n var l = data.length;\n var m = l & ~0x3;\n while (i < m) {\n for (; i < Math.min(i + 4096, m); i += 4) {\n b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n }\n a %= MOD;\n b %= MOD;\n }\n for (; i < l; i++) {\n b += a += data.charCodeAt(i);\n }\n a %= MOD;\n b %= MOD;\n return a | b << 16;\n}\n\nmodule.exports = adler32;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/adler32.js\n ** module id = 48\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {ReactComponent} internalInstance\n * @param {string} rootID DOM ID of the root node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (internalInstance, rootID, transaction, context) {\n var markup = internalInstance.mountComponent(rootID, transaction, context);\n if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n return markup;\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function (internalInstance) {\n ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n internalInstance.unmountComponent();\n },\n\n /**\n * Update a component using a new element.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @internal\n */\n receiveComponent: function (internalInstance, nextElement, transaction, context) {\n var prevElement = internalInstance._currentElement;\n\n if (nextElement === prevElement && context === internalInstance._context) {\n // Since elements are immutable after the owner is rendered,\n // we can do a cheap identity compare here to determine if this is a\n // superfluous reconcile. It's possible for state to be mutable but such\n // change should trigger an update of the owner which would recreate\n // the element. We explicitly check for the existence of an owner since\n // it's possible for an element created outside a composite to be\n // deeply mutated and reused.\n\n // TODO: Bailing out early is just a perf optimization right?\n // TODO: Removing the return statement should affect correctness?\n return;\n }\n\n var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n if (refsChanged) {\n ReactRef.detachRefs(internalInstance, prevElement);\n }\n\n internalInstance.receiveComponent(nextElement, transaction, context);\n\n if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n },\n\n /**\n * Flush any dirty changes in a component.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (internalInstance, transaction) {\n internalInstance.performUpdateIfNecessary(transaction);\n }\n\n};\n\nmodule.exports = ReactReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconciler.js\n ** module id = 49\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = require('./ReactOwner');\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(component.getPublicInstance());\n } else {\n // Legacy ref\n ReactOwner.addComponentAsRefTo(component, ref, owner);\n }\n}\n\nfunction detachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(null);\n } else {\n // Legacy ref\n ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n }\n}\n\nReactRef.attachRefs = function (instance, element) {\n if (element === null || element === false) {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n attachRef(ref, instance, element._owner);\n }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n // If either the owner or a `ref` has changed, make sure the newest owner\n // has stored a reference to `this`, and the previous owner (if different)\n // has forgotten the reference to `this`. We use the element instead\n // of the public this.props because the post processing cannot determine\n // a ref. The ref conceptually lives on the element.\n\n // TODO: Should this even be possible? The owner cannot change because\n // it's forbidden by shouldUpdateReactComponent. The ref can change\n // if you swap the keys of but not the refs. Reconsider where this check\n // is made. It probably belongs where the key checking and\n // instantiateReactComponent is done.\n\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n\n return(\n // This has a few false positives w/r/t empty components.\n prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref\n );\n};\n\nReactRef.detachRefs = function (instance, element) {\n if (element === null || element === false) {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n detachRef(ref, instance, element._owner);\n }\n};\n\nmodule.exports = ReactRef;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRef.js\n ** module id = 50\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return (\n * <div onClick={this.handleClick}>\n * <CustomComponent ref=\"custom\" />\n * </div>\n * );\n * },\n * handleClick: function() {\n * this.refs.custom.handleClick();\n * },\n * componentDidMount: function() {\n * this.refs.custom.initialize();\n * }\n * });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n /**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid owner.\n * @final\n */\n isValidOwner: function (object) {\n return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n },\n\n /**\n * Adds a component by ref to an owner component.\n *\n * @param {ReactComponent} component Component to reference.\n * @param {string} ref Name by which to refer to the component.\n * @param {ReactOwner} owner Component on which to record the ref.\n * @final\n * @internal\n */\n addComponentAsRefTo: function (component, ref, owner) {\n !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n owner.attachRef(ref, component);\n },\n\n /**\n * Removes a component by ref from an owner component.\n *\n * @param {ReactComponent} component Component to dereference.\n * @param {string} ref Name of the ref to remove.\n * @param {ReactOwner} owner Component on which the ref is recorded.\n * @final\n * @internal\n */\n removeComponentAsRefFrom: function (component, ref, owner) {\n !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n // Check that `component` is still the current ref because we do not want to\n // detach the ref if another component stole it.\n if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {\n owner.detachRef(ref);\n }\n }\n\n};\n\nmodule.exports = ReactOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactOwner.js\n ** module id = 51\n ** module chunks = 0 1\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction enqueueUpdate(internalInstance) {\n ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (!internalInstance) {\n if (process.env.NODE_ENV !== 'production') {\n // Only warn when we have a callerName. Otherwise we should be silent.\n // We're probably calling from enqueueCallback. We don't want to warn\n // there because we already warned for the corresponding lifecycle method.\n process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined;\n }\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined;\n }\n\n return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n owner._warnedAboutRefsInRender = true;\n }\n }\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (internalInstance) {\n // During componentWillMount and render this will still be null but after\n // that will always render to something. At least for now. So we can use\n // this hack.\n return !!internalInstance._renderedComponent;\n } else {\n return false;\n }\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {\n !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n // Previously we would throw an error if we didn't have an internal\n // instance. Since we want to make it a no-op instead, we mirror the same\n // behavior we have in other enqueue* methods.\n // We also need to ignore callbacks in componentWillMount. See\n // enqueueUpdates.\n if (!internalInstance) {\n return null;\n }\n\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n // TODO: The callback here is ignored when setState is called from\n // componentWillMount. Either fix it or disallow doing so completely in\n // favor of getInitialState. Alternatively, we can disallow\n // componentWillMount during server-side rendering.\n enqueueUpdate(internalInstance);\n },\n\n enqueueCallbackInternal: function (internalInstance, callback) {\n !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingForceUpdate = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingStateQueue = [completeState];\n internalInstance._pendingReplaceState = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n if (!internalInstance) {\n return;\n }\n\n var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n queue.push(partialState);\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Sets a subset of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialProps Subset of the next props.\n * @internal\n */\n enqueueSetProps: function (publicInstance, partialProps) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');\n if (!internalInstance) {\n return;\n }\n ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps);\n },\n\n enqueueSetPropsInternal: function (internalInstance, partialProps) {\n var topLevelWrapper = internalInstance._topLevelWrapper;\n !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n // Merge with the pending element if it exists, otherwise with existing\n // element props.\n var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n var element = wrapElement.props;\n var props = assign({}, element.props, partialProps);\n topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n enqueueUpdate(topLevelWrapper);\n },\n\n /**\n * Replaces all of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} props New props.\n * @internal\n */\n enqueueReplaceProps: function (publicInstance, props) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');\n if (!internalInstance) {\n return;\n }\n ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props);\n },\n\n enqueueReplacePropsInternal: function (internalInstance, props) {\n var topLevelWrapper = internalInstance._topLevelWrapper;\n !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n // Merge with the pending element if it exists, otherwise with existing\n // element props.\n var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n var element = wrapElement.props;\n topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n enqueueUpdate(topLevelWrapper);\n },\n\n enqueueElementInternal: function (internalInstance, newElement) {\n internalInstance._pendingElement = newElement;\n enqueueUpdate(internalInstance);\n }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdateQueue.js\n ** module id = 52\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined;\n}\n\nvar NESTED_UPDATES = {\n initialize: function () {\n this.dirtyComponentsLength = dirtyComponents.length;\n },\n close: function () {\n if (this.dirtyComponentsLength !== dirtyComponents.length) {\n // Additional updates were enqueued by componentDidUpdate handlers or\n // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n // these new updates so that if A's componentDidUpdate calls setState on\n // B, B will update before the callback A's updater provided when calling\n // setState.\n dirtyComponents.splice(0, this.dirtyComponentsLength);\n flushBatchedUpdates();\n } else {\n dirtyComponents.length = 0;\n }\n }\n};\n\nvar UPDATE_QUEUEING = {\n initialize: function () {\n this.callbackQueue.reset();\n },\n close: function () {\n this.callbackQueue.notifyAll();\n }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n this.reinitializeTransaction();\n this.dirtyComponentsLength = null;\n this.callbackQueue = CallbackQueue.getPooled();\n this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);\n}\n\nassign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n destructor: function () {\n this.dirtyComponentsLength = null;\n CallbackQueue.release(this.callbackQueue);\n this.callbackQueue = null;\n ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n this.reconcileTransaction = null;\n },\n\n perform: function (method, scope, a) {\n // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n // with this transaction's wrappers around it.\n return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n ensureInjected();\n batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n var len = transaction.dirtyComponentsLength;\n !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined;\n\n // Since reconciling a component higher in the owner hierarchy usually (not\n // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n // them before their children by sorting the array.\n dirtyComponents.sort(mountOrderComparator);\n\n for (var i = 0; i < len; i++) {\n // If a component is unmounted before pending changes apply, it will still\n // be here, but we assume that it has cleared its _pendingCallbacks and\n // that performUpdateIfNecessary is a noop.\n var component = dirtyComponents[i];\n\n // If performUpdateIfNecessary happens to enqueue any new updates, we\n // shouldn't execute the callbacks until the next render happens, so\n // stash the callbacks first\n var callbacks = component._pendingCallbacks;\n component._pendingCallbacks = null;\n\n ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);\n\n if (callbacks) {\n for (var j = 0; j < callbacks.length; j++) {\n transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n }\n }\n }\n}\n\nvar flushBatchedUpdates = function () {\n // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n // array and perform any updates enqueued by mount-ready handlers (i.e.,\n // componentDidUpdate) but we need to check here too in order to catch\n // updates enqueued by setState callbacks and asap calls.\n while (dirtyComponents.length || asapEnqueued) {\n if (dirtyComponents.length) {\n var transaction = ReactUpdatesFlushTransaction.getPooled();\n transaction.perform(runBatchedUpdates, null, transaction);\n ReactUpdatesFlushTransaction.release(transaction);\n }\n\n if (asapEnqueued) {\n asapEnqueued = false;\n var queue = asapCallbackQueue;\n asapCallbackQueue = CallbackQueue.getPooled();\n queue.notifyAll();\n CallbackQueue.release(queue);\n }\n }\n};\nflushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n ensureInjected();\n\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (This is called by each top-level update\n // function, like setProps, setState, forceUpdate, etc.; creation and\n // destruction of top-level components is guarded in ReactMount.)\n\n if (!batchingStrategy.isBatchingUpdates) {\n batchingStrategy.batchedUpdates(enqueueUpdate, component);\n return;\n }\n\n dirtyComponents.push(component);\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined;\n asapCallbackQueue.enqueue(callback, context);\n asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n injectReconcileTransaction: function (ReconcileTransaction) {\n !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined;\n ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n },\n\n injectBatchingStrategy: function (_batchingStrategy) {\n !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined;\n !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined;\n !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined;\n batchingStrategy = _batchingStrategy;\n }\n};\n\nvar ReactUpdates = {\n /**\n * React references `ReactReconcileTransaction` using this property in order\n * to allow dependency injection.\n *\n * @internal\n */\n ReactReconcileTransaction: null,\n\n batchedUpdates: batchedUpdates,\n enqueueUpdate: enqueueUpdate,\n flushBatchedUpdates: flushBatchedUpdates,\n injection: ReactUpdatesInjection,\n asap: asap\n};\n\nmodule.exports = ReactUpdates;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdates.js\n ** module id = 53\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n this._callbacks = null;\n this._contexts = null;\n}\n\nassign(CallbackQueue.prototype, {\n\n /**\n * Enqueues a callback to be invoked when `notifyAll` is invoked.\n *\n * @param {function} callback Invoked when `notifyAll` is invoked.\n * @param {?object} context Context to call `callback` with.\n * @internal\n */\n enqueue: function (callback, context) {\n this._callbacks = this._callbacks || [];\n this._contexts = this._contexts || [];\n this._callbacks.push(callback);\n this._contexts.push(context);\n },\n\n /**\n * Invokes all enqueued callbacks and clears the queue. This is invoked after\n * the DOM representation of a component has been created or updated.\n *\n * @internal\n */\n notifyAll: function () {\n var callbacks = this._callbacks;\n var contexts = this._contexts;\n if (callbacks) {\n !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined;\n this._callbacks = null;\n this._contexts = null;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].call(contexts[i]);\n }\n callbacks.length = 0;\n contexts.length = 0;\n }\n },\n\n /**\n * Resets the internal queue.\n *\n * @internal\n */\n reset: function () {\n this._callbacks = null;\n this._contexts = null;\n },\n\n /**\n * `PooledClass` looks for this.\n */\n destructor: function () {\n this.reset();\n }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CallbackQueue.js\n ** module id = 54\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, copyFieldsFrom);\n return instance;\n } else {\n return new Klass(copyFieldsFrom);\n }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3);\n return instance;\n } else {\n return new Klass(a1, a2, a3);\n }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4);\n }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4, a5);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4, a5);\n }\n};\n\nvar standardReleaser = function (instance) {\n var Klass = this;\n !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances (optional).\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\n\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n oneArgumentPooler: oneArgumentPooler,\n twoArgumentPooler: twoArgumentPooler,\n threeArgumentPooler: threeArgumentPooler,\n fourArgumentPooler: fourArgumentPooler,\n fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/PooledClass.js\n ** module id = 55\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n * <pre>\n * wrappers (injected at creation time)\n * + +\n * | |\n * +-----------------|--------|--------------+\n * | v | |\n * | +---------------+ | |\n * | +--| wrapper1 |---|----+ |\n * | | +---------------+ v | |\n * | | +-------------+ | |\n * | | +----| wrapper2 |--------+ |\n * | | | +-------------+ | | |\n * | | | | | |\n * | v v v v | wrapper\n * | +---+ +---+ +---------+ +---+ +---+ | invariants\n * perform(anyMethod) | | | | | | | | | | | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n * | | | | | | | | | | | |\n * | | | | | | | | | | | |\n * | | | | | | | | | | | |\n * | +---+ +---+ +---------+ +---+ +---+ |\n * | initialize close |\n * +-----------------------------------------+\n * </pre>\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n * Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n * while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n * reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n * content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n * to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n * when the wrapped process is completed, or has failed.\n *\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n /**\n * Sets up this instance so that it is prepared for collecting metrics. Does\n * so such that this setup method may be used on an instance that is already\n * initialized, in a way that does not consume additional memory upon reuse.\n * That can be useful if you decide to make your subclass of this mixin a\n * \"PooledClass\".\n */\n reinitializeTransaction: function () {\n this.transactionWrappers = this.getTransactionWrappers();\n if (this.wrapperInitData) {\n this.wrapperInitData.length = 0;\n } else {\n this.wrapperInitData = [];\n }\n this._isInTransaction = false;\n },\n\n _isInTransaction: false,\n\n /**\n * @abstract\n * @return {Array<TransactionWrapper>} Array of transaction wrappers.\n */\n getTransactionWrappers: null,\n\n isInTransaction: function () {\n return !!this._isInTransaction;\n },\n\n /**\n * Executes the function within a safety window. Use this for the top level\n * methods that result in large amounts of computation/mutations that would\n * need to be safety checked. The optional arguments helps prevent the need\n * to bind in many cases.\n *\n * @param {function} method Member of scope to call.\n * @param {Object} scope Scope to invoke from.\n * @param {Object?=} a Argument to pass to the method.\n * @param {Object?=} b Argument to pass to the method.\n * @param {Object?=} c Argument to pass to the method.\n * @param {Object?=} d Argument to pass to the method.\n * @param {Object?=} e Argument to pass to the method.\n * @param {Object?=} f Argument to pass to the method.\n *\n * @return {*} Return value from `method`.\n */\n perform: function (method, scope, a, b, c, d, e, f) {\n !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;\n var errorThrown;\n var ret;\n try {\n this._isInTransaction = true;\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // one of these calls threw.\n errorThrown = true;\n this.initializeAll(0);\n ret = method.call(scope, a, b, c, d, e, f);\n errorThrown = false;\n } finally {\n try {\n if (errorThrown) {\n // If `method` throws, prefer to show that stack trace over any thrown\n // by invoking `closeAll`.\n try {\n this.closeAll(0);\n } catch (err) {}\n } else {\n // Since `method` didn't throw, we don't want to silence the exception\n // here.\n this.closeAll(0);\n }\n } finally {\n this._isInTransaction = false;\n }\n }\n return ret;\n },\n\n initializeAll: function (startIndex) {\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n try {\n // Catching errors makes debugging more difficult, so we start with the\n // OBSERVED_ERROR state before overwriting it with the real return value\n // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n // block, it means wrapper.initialize threw.\n this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n } finally {\n if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n // The initializer for wrapper i threw an error; initialize the\n // remaining wrappers but silence any exceptions from them to ensure\n // that the first error is the one to bubble up.\n try {\n this.initializeAll(i + 1);\n } catch (err) {}\n }\n }\n }\n },\n\n /**\n * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n * them the respective return values of `this.transactionWrappers.init[i]`\n * (`close`rs that correspond to initializers that failed will not be\n * invoked).\n */\n closeAll: function (startIndex) {\n !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n var initData = this.wrapperInitData[i];\n var errorThrown;\n try {\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // wrapper.close threw.\n errorThrown = true;\n if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n wrapper.close.call(this, initData);\n }\n errorThrown = false;\n } finally {\n if (errorThrown) {\n // The closer for wrapper i threw an error; close the remaining\n // wrappers but silence any exceptions from them to ensure that the\n // first error is the one to bubble up.\n try {\n this.closeAll(i + 1);\n } catch (e) {}\n }\n }\n }\n this.wrapperInitData.length = 0;\n }\n};\n\nvar Transaction = {\n\n Mixin: Mixin,\n\n /**\n * Token to look for to determine if an error occurred.\n */\n OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Transaction.js\n ** module id = 56\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyObject\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyObject.js\n ** module id = 57\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule containsNode\n * @typechecks\n */\n\n'use strict';\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n *\n * @param {?DOMNode} outerNode Outer DOM node.\n * @param {?DOMNode} innerNode Inner DOM node.\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\n */\nfunction containsNode(_x, _x2) {\n var _again = true;\n\n _function: while (_again) {\n var outerNode = _x,\n innerNode = _x2;\n _again = false;\n\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n _x = outerNode;\n _x2 = innerNode.parentNode;\n _again = true;\n continue _function;\n } else if (outerNode.contains) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n }\n}\n\nmodule.exports = containsNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/containsNode.js\n ** module id = 58\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextNode\n * @typechecks\n */\n\n'use strict';\n\nvar isNode = require('./isNode');\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/isTextNode.js\n ** module id = 59\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isNode\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\n'use strict';\n\nfunction isNode(object) {\n return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/isNode.js\n ** module id = 60\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCompositeComponent = require('./ReactCompositeComponent');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactNativeComponent = require('./ReactNativeComponent');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function () {};\nassign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node) {\n var instance;\n\n if (node === null || node === false) {\n instance = new ReactEmptyComponent(instantiateReactComponent);\n } else if (typeof node === 'object') {\n var element = node;\n !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;\n\n // Special case string values\n if (typeof element.type === 'string') {\n instance = ReactNativeComponent.createInternalComponent(element);\n } else if (isInternalComponentType(element.type)) {\n // This is temporarily available for custom components that are not string\n // representations. I.e. ART. Once those are updated to use the string\n // representation, we can drop this code path.\n instance = new element.type(element);\n } else {\n instance = new ReactCompositeComponentWrapper();\n }\n } else if (typeof node === 'string' || typeof node === 'number') {\n instance = ReactNativeComponent.createInstanceForText(node);\n } else {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined;\n }\n\n // Sets up the instance. This can probably just move into the constructor now.\n instance.construct(node);\n\n // These two fields are used by the DOM and ART diffing algorithms\n // respectively. Instead of using expandos on components, we should be\n // storing the state needed by the diffing algorithms elsewhere.\n instance._mountIndex = 0;\n instance._mountImage = null;\n\n if (process.env.NODE_ENV !== 'production') {\n instance._isOwnerNecessary = false;\n instance._warnedAboutRefsInRender = false;\n }\n\n // Internal instances should fully constructed at this point, so they should\n // not get any new fields added to them at this point.\n if (process.env.NODE_ENV !== 'production') {\n if (Object.preventExtensions) {\n Object.preventExtensions(instance);\n }\n }\n\n return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/instantiateReactComponent.js\n ** module id = 61\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCompositeComponent\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactPerf = require('./ReactPerf');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum(component) {\n var owner = component._currentElement._owner || null;\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n var Component = ReactInstanceMap.get(this)._currentElement.type;\n return Component(this.props, this.context, this.updater);\n};\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n * - componentWillMount\n * - render\n * - [children's constructors]\n * - [children's componentWillMount and render]\n * - [children's componentDidMount]\n * - componentDidMount\n *\n * Update Phases:\n * - componentWillReceiveProps (only called if parent updated)\n * - shouldComponentUpdate\n * - componentWillUpdate\n * - render\n * - [children's constructors or receive props phases]\n * - componentDidUpdate\n *\n * - componentWillUnmount\n * - [children's componentWillUnmount]\n * - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponentMixin = {\n\n /**\n * Base constructor for all composite component.\n *\n * @param {ReactElement} element\n * @final\n * @internal\n */\n construct: function (element) {\n this._currentElement = element;\n this._rootNodeID = null;\n this._instance = null;\n\n // See ReactUpdateQueue\n this._pendingElement = null;\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n\n this._renderedComponent = null;\n\n this._context = null;\n this._mountOrder = 0;\n this._topLevelWrapper = null;\n\n // See ReactUpdates and ReactUpdateQueue.\n this._pendingCallbacks = null;\n },\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {string} rootID DOM ID of the root node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (rootID, transaction, context) {\n this._context = context;\n this._mountOrder = nextMountID++;\n this._rootNodeID = rootID;\n\n var publicProps = this._processProps(this._currentElement.props);\n var publicContext = this._processContext(context);\n\n var Component = this._currentElement.type;\n\n // Initialize the public class\n var inst;\n var renderedElement;\n\n // This is a way to detect if Component is a stateless arrow function\n // component, which is not newable. It might not be 100% reliable but is\n // something we can do until we start detecting that Component extends\n // React.Component. We already assume that typeof Component === 'function'.\n var canInstantiate = ('prototype' in Component);\n\n if (canInstantiate) {\n if (process.env.NODE_ENV !== 'production') {\n ReactCurrentOwner.current = this;\n try {\n inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n } finally {\n ReactCurrentOwner.current = null;\n }\n } else {\n inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n }\n }\n\n if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) {\n renderedElement = inst;\n inst = new StatelessComponent(Component);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This will throw later in _renderValidatedComponent, but add an early\n // warning now to help debugging\n if (inst.render == null) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\\'t a React component.', Component.displayName || Component.name || 'Component') : undefined;\n } else {\n // We support ES6 inheriting from React.Component, the module pattern,\n // and stateless components, but not ES6 classes that don't extend\n process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined;\n }\n }\n\n // These should be set up in the constructor, but as a convenience for\n // simpler class abstractions, we set them up after the fact.\n inst.props = publicProps;\n inst.context = publicContext;\n inst.refs = emptyObject;\n inst.updater = ReactUpdateQueue;\n\n this._instance = inst;\n\n // Store a reference from the instance back to the internal representation\n ReactInstanceMap.set(inst, this);\n\n if (process.env.NODE_ENV !== 'production') {\n // Since plain JS classes are defined without any special initialization\n // logic, we can not catch common errors early. Therefore, we have to\n // catch them here, at initialization time, instead.\n process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined;\n }\n\n var initialState = inst.state;\n if (initialState === undefined) {\n inst.state = initialState = null;\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n\n if (inst.componentWillMount) {\n inst.componentWillMount();\n // When mounting, calls to `setState` by `componentWillMount` will set\n // `this._pendingStateQueue` without triggering a re-render.\n if (this._pendingStateQueue) {\n inst.state = this._processPendingState(inst.props, inst.context);\n }\n }\n\n // If not a stateless component, we now render\n if (renderedElement === undefined) {\n renderedElement = this._renderValidatedComponent();\n }\n\n this._renderedComponent = this._instantiateReactComponent(renderedElement);\n\n var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context));\n if (inst.componentDidMount) {\n transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n }\n\n return markup;\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function () {\n var inst = this._instance;\n\n if (inst.componentWillUnmount) {\n inst.componentWillUnmount();\n }\n\n ReactReconciler.unmountComponent(this._renderedComponent);\n this._renderedComponent = null;\n this._instance = null;\n\n // Reset pending fields\n // Even if this component is scheduled for another update in ReactUpdates,\n // it would still be ignored because these fields are reset.\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n this._pendingCallbacks = null;\n this._pendingElement = null;\n\n // These fields do not really need to be reset since this object is no\n // longer accessible.\n this._context = null;\n this._rootNodeID = null;\n this._topLevelWrapper = null;\n\n // Delete the reference from the instance to this internal representation\n // which allow the internals to be properly cleaned up even if the user\n // leaks a reference to the public instance.\n ReactInstanceMap.remove(inst);\n\n // Some existing components rely on inst.props even after they've been\n // destroyed (in event handlers).\n // TODO: inst.props = null;\n // TODO: inst.state = null;\n // TODO: inst.context = null;\n },\n\n /**\n * Filters the context object to only contain keys specified in\n * `contextTypes`\n *\n * @param {object} context\n * @return {?object}\n * @private\n */\n _maskContext: function (context) {\n var maskedContext = null;\n var Component = this._currentElement.type;\n var contextTypes = Component.contextTypes;\n if (!contextTypes) {\n return emptyObject;\n }\n maskedContext = {};\n for (var contextName in contextTypes) {\n maskedContext[contextName] = context[contextName];\n }\n return maskedContext;\n },\n\n /**\n * Filters the context object to only contain keys specified in\n * `contextTypes`, and asserts that they are valid.\n *\n * @param {object} context\n * @return {?object}\n * @private\n */\n _processContext: function (context) {\n var maskedContext = this._maskContext(context);\n if (process.env.NODE_ENV !== 'production') {\n var Component = this._currentElement.type;\n if (Component.contextTypes) {\n this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);\n }\n }\n return maskedContext;\n },\n\n /**\n * @param {object} currentContext\n * @return {object}\n * @private\n */\n _processChildContext: function (currentContext) {\n var Component = this._currentElement.type;\n var inst = this._instance;\n var childContext = inst.getChildContext && inst.getChildContext();\n if (childContext) {\n !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n if (process.env.NODE_ENV !== 'production') {\n this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);\n }\n for (var name in childContext) {\n !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined;\n }\n return assign({}, currentContext, childContext);\n }\n return currentContext;\n },\n\n /**\n * Processes props by setting default values for unspecified props and\n * asserting that the props are valid. Does not mutate its argument; returns\n * a new props object with defaults merged in.\n *\n * @param {object} newProps\n * @return {object}\n * @private\n */\n _processProps: function (newProps) {\n if (process.env.NODE_ENV !== 'production') {\n var Component = this._currentElement.type;\n if (Component.propTypes) {\n this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);\n }\n }\n return newProps;\n },\n\n /**\n * Assert that the props are valid\n *\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\n _checkPropTypes: function (propTypes, props, location) {\n // TODO: Stop validating prop types here and only use the element\n // validation.\n var componentName = this.getName();\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error;\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n error = propTypes[propName](props, propName, componentName, location);\n } catch (ex) {\n error = ex;\n }\n if (error instanceof Error) {\n // We may want to extend this logic for similar errors in\n // top-level render calls, so I'm abstracting it away into\n // a function to minimize refactoring in the future\n var addendum = getDeclarationErrorAddendum(this);\n\n if (location === ReactPropTypeLocations.prop) {\n // Preface gives us something to blacklist in warning module\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined;\n }\n }\n }\n }\n },\n\n receiveComponent: function (nextElement, transaction, nextContext) {\n var prevElement = this._currentElement;\n var prevContext = this._context;\n\n this._pendingElement = null;\n\n this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n },\n\n /**\n * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n * is set, update the component.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (transaction) {\n if (this._pendingElement != null) {\n ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);\n }\n\n if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n }\n },\n\n /**\n * Perform an update to a mounted component. The componentWillReceiveProps and\n * shouldComponentUpdate methods are called, then (assuming the update isn't\n * skipped) the remaining update lifecycle methods are called and the DOM\n * representation is updated.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @param {ReactElement} prevParentElement\n * @param {ReactElement} nextParentElement\n * @internal\n * @overridable\n */\n updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n var inst = this._instance;\n\n var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext);\n var nextProps;\n\n // Distinguish between a props update versus a simple state update\n if (prevParentElement === nextParentElement) {\n // Skip checking prop types again -- we don't read inst.props to avoid\n // warning for DOM component props in this upgrade\n nextProps = nextParentElement.props;\n } else {\n nextProps = this._processProps(nextParentElement.props);\n // An update here will schedule an update but immediately set\n // _pendingStateQueue which will ensure that any state updates gets\n // immediately reconciled instead of waiting for the next batch.\n\n if (inst.componentWillReceiveProps) {\n inst.componentWillReceiveProps(nextProps, nextContext);\n }\n }\n\n var nextState = this._processPendingState(nextProps, nextContext);\n\n var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined;\n }\n\n if (shouldUpdate) {\n this._pendingForceUpdate = false;\n // Will set `this.props`, `this.state` and `this.context`.\n this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n } else {\n // If it's determined that a component should not update, we still want\n // to set props and state but we shortcut the rest of the update.\n this._currentElement = nextParentElement;\n this._context = nextUnmaskedContext;\n inst.props = nextProps;\n inst.state = nextState;\n inst.context = nextContext;\n }\n },\n\n _processPendingState: function (props, context) {\n var inst = this._instance;\n var queue = this._pendingStateQueue;\n var replace = this._pendingReplaceState;\n this._pendingReplaceState = false;\n this._pendingStateQueue = null;\n\n if (!queue) {\n return inst.state;\n }\n\n if (replace && queue.length === 1) {\n return queue[0];\n }\n\n var nextState = assign({}, replace ? queue[0] : inst.state);\n for (var i = replace ? 1 : 0; i < queue.length; i++) {\n var partial = queue[i];\n assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n }\n\n return nextState;\n },\n\n /**\n * Merges new props and state, notifies delegate methods of update and\n * performs update.\n *\n * @param {ReactElement} nextElement Next element\n * @param {object} nextProps Next public object to set as properties.\n * @param {?object} nextState Next object to set as state.\n * @param {?object} nextContext Next public object to set as context.\n * @param {ReactReconcileTransaction} transaction\n * @param {?object} unmaskedContext\n * @private\n */\n _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n var inst = this._instance;\n\n var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n var prevProps;\n var prevState;\n var prevContext;\n if (hasComponentDidUpdate) {\n prevProps = inst.props;\n prevState = inst.state;\n prevContext = inst.context;\n }\n\n if (inst.componentWillUpdate) {\n inst.componentWillUpdate(nextProps, nextState, nextContext);\n }\n\n this._currentElement = nextElement;\n this._context = unmaskedContext;\n inst.props = nextProps;\n inst.state = nextState;\n inst.context = nextContext;\n\n this._updateRenderedComponent(transaction, unmaskedContext);\n\n if (hasComponentDidUpdate) {\n transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n }\n },\n\n /**\n * Call the component's `render` method and update the DOM accordingly.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n _updateRenderedComponent: function (transaction, context) {\n var prevComponentInstance = this._renderedComponent;\n var prevRenderedElement = prevComponentInstance._currentElement;\n var nextRenderedElement = this._renderValidatedComponent();\n if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n } else {\n // These two IDs are actually the same! But nothing should rely on that.\n var thisID = this._rootNodeID;\n var prevComponentID = prevComponentInstance._rootNodeID;\n ReactReconciler.unmountComponent(prevComponentInstance);\n\n this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);\n var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context));\n this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n }\n },\n\n /**\n * @protected\n */\n _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) {\n ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n },\n\n /**\n * @protected\n */\n _renderValidatedComponentWithoutOwnerOrContext: function () {\n var inst = this._instance;\n var renderedComponent = inst.render();\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n renderedComponent = null;\n }\n }\n\n return renderedComponent;\n },\n\n /**\n * @private\n */\n _renderValidatedComponent: function () {\n var renderedComponent;\n ReactCurrentOwner.current = this;\n try {\n renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n } finally {\n ReactCurrentOwner.current = null;\n }\n !(\n // TODO: An `isValidNode` function would probably be more appropriate\n renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n return renderedComponent;\n },\n\n /**\n * Lazily allocates the refs object and stores `component` as `ref`.\n *\n * @param {string} ref Reference name.\n * @param {component} component Component to store as `ref`.\n * @final\n * @private\n */\n attachRef: function (ref, component) {\n var inst = this.getPublicInstance();\n !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined;\n var publicComponentInstance = component.getPublicInstance();\n if (process.env.NODE_ENV !== 'production') {\n var componentName = component && component.getName ? component.getName() : 'a component';\n process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined;\n }\n var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n refs[ref] = publicComponentInstance;\n },\n\n /**\n * Detaches a reference name.\n *\n * @param {string} ref Name to dereference.\n * @final\n * @private\n */\n detachRef: function (ref) {\n var refs = this.getPublicInstance().refs;\n delete refs[ref];\n },\n\n /**\n * Get a text description of the component that can be used to identify it\n * in error messages.\n * @return {string} The name or null.\n * @internal\n */\n getName: function () {\n var type = this._currentElement.type;\n var constructor = this._instance && this._instance.constructor;\n return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n },\n\n /**\n * Get the publicly accessible representation of this component - i.e. what\n * is exposed by refs and returned by render. Can be null for stateless\n * components.\n *\n * @return {ReactComponent} the public component instance.\n * @internal\n */\n getPublicInstance: function () {\n var inst = this._instance;\n if (inst instanceof StatelessComponent) {\n return null;\n }\n return inst;\n },\n\n // Stub\n _instantiateReactComponent: null\n\n};\n\nReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {\n mountComponent: 'mountComponent',\n updateComponent: 'updateComponent',\n _renderValidatedComponent: '_renderValidatedComponent'\n});\n\nvar ReactCompositeComponent = {\n\n Mixin: ReactCompositeComponentMixin\n\n};\n\nmodule.exports = ReactCompositeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCompositeComponent.js\n ** module id = 62\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n /**\n * Optionally injectable environment dependent cleanup hook. (server vs.\n * browser etc). Example: A browser system caches DOM nodes based on component\n * ID and must remove that cache entry when this instance is unmounted.\n */\n unmountIDFromEnvironment: null,\n\n /**\n * Optionally injectable hook for swapping out mount images in the middle of\n * the tree.\n */\n replaceNodeWithMarkupByID: null,\n\n /**\n * Optionally injectable hook for processing a queue of child updates. Will\n * later move into MultiChildComponents.\n */\n processChildrenUpdates: null,\n\n injection: {\n injectEnvironment: function (environment) {\n !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined;\n ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;\n ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;\n ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n injected = true;\n }\n }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentEnvironment.js\n ** module id = 63\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar ReactPropTypeLocations = keyMirror({\n prop: null,\n context: null,\n childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocations.js\n ** module id = 64\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocationNames.js\n ** module id = 65\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n if (prevEmpty || nextEmpty) {\n return prevEmpty === nextEmpty;\n }\n\n var prevType = typeof prevElement;\n var nextType = typeof nextElement;\n if (prevType === 'string' || prevType === 'number') {\n return nextType === 'string' || nextType === 'number';\n } else {\n return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n }\n return false;\n}\n\nmodule.exports = shouldUpdateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/shouldUpdateReactComponent.js\n ** module id = 66\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactEmptyComponentRegistry = require('./ReactEmptyComponentRegistry');\nvar ReactReconciler = require('./ReactReconciler');\n\nvar assign = require('./Object.assign');\n\nvar placeholderElement;\n\nvar ReactEmptyComponentInjection = {\n injectEmptyComponent: function (component) {\n placeholderElement = ReactElement.createElement(component);\n }\n};\n\nvar ReactEmptyComponent = function (instantiate) {\n this._currentElement = null;\n this._rootNodeID = null;\n this._renderedComponent = instantiate(placeholderElement);\n};\nassign(ReactEmptyComponent.prototype, {\n construct: function (element) {},\n mountComponent: function (rootID, transaction, context) {\n ReactEmptyComponentRegistry.registerNullComponentID(rootID);\n this._rootNodeID = rootID;\n return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context);\n },\n receiveComponent: function () {},\n unmountComponent: function (rootID, transaction, context) {\n ReactReconciler.unmountComponent(this._renderedComponent);\n ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);\n this._rootNodeID = null;\n this._renderedComponent = null;\n }\n});\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponent.js\n ** module id = 67\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNativeComponent\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar autoGenerateWrapperClass = null;\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around native tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactNativeComponentInjection = {\n // This accepts a class that receives the tag string. This is a catch all\n // that can render any kind of tag.\n injectGenericComponentClass: function (componentClass) {\n genericComponentClass = componentClass;\n },\n // This accepts a text component class that takes the text string to be\n // rendered as props.\n injectTextComponentClass: function (componentClass) {\n textComponentClass = componentClass;\n },\n // This accepts a keyed object with classes as values. Each key represents a\n // tag. That particular tag will use this class instead of the generic one.\n injectComponentClasses: function (componentClasses) {\n assign(tagToComponentClass, componentClasses);\n }\n};\n\n/**\n * Get a composite component wrapper class for a specific tag.\n *\n * @param {ReactElement} element The tag for which to get the class.\n * @return {function} The React class constructor function.\n */\nfunction getComponentClassForElement(element) {\n if (typeof element.type === 'function') {\n return element.type;\n }\n var tag = element.type;\n var componentClass = tagToComponentClass[tag];\n if (componentClass == null) {\n tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);\n }\n return componentClass;\n}\n\n/**\n * Get a native internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined;\n return new genericComponentClass(element.type, element.props);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n return component instanceof textComponentClass;\n}\n\nvar ReactNativeComponent = {\n getComponentClassForElement: getComponentClassForElement,\n createInternalComponent: createInternalComponent,\n createInstanceForText: createInstanceForText,\n isTextComponent: isTextComponent,\n injection: ReactNativeComponentInjection\n};\n\nmodule.exports = ReactNativeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNativeComponent.js\n ** module id = 68\n ** module chunks = 0 1\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example, <b><div></div></b> is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n // <p> tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for <title>, including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n var buttonScopeTags = inScopeTags.concat(['button']);\n\n // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n var emptyAncestorInfo = {\n parentTag: null,\n\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n var updatedAncestorInfo = function (oldInfo, tag, instance) {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);\n var info = { tag: tag, instance: instance };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n }\n\n // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.parentTag = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n\n /**\n * Returns whether\n */\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n case 'option':\n return tag === '#text';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n case 'html':\n return tag === 'head' || tag === 'body';\n }\n\n // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frame':\n case 'head':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n\n /**\n * Returns whether\n */\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n\n case 'pre':\n case 'listing':\n\n case 'table':\n\n case 'hr':\n\n case 'xmp':\n\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n /**\n * Given a ReactCompositeComponent instance, return a list of its recursive\n * owners, starting at the root and ending with the instance itself.\n */\n var findOwnerStack = function (instance) {\n if (!instance) {\n return [];\n }\n\n var stack = [];\n /*eslint-disable space-after-keywords */\n do {\n /*eslint-enable space-after-keywords */\n stack.push(instance);\n } while (instance = instance._currentElement._owner);\n stack.reverse();\n return stack;\n };\n\n var didWarn = {};\n\n validateDOMNesting = function (childTag, childInstance, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.parentTag;\n var parentTag = parentInfo && parentInfo.tag;\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var problematic = invalidParent || invalidAncestor;\n\n if (problematic) {\n var ancestorTag = problematic.tag;\n var ancestorInstance = problematic.instance;\n\n var childOwner = childInstance && childInstance._currentElement._owner;\n var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n var childOwners = findOwnerStack(childOwner);\n var ancestorOwners = findOwnerStack(ancestorOwner);\n\n var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n var i;\n\n var deepestCommon = -1;\n for (i = 0; i < minStackLen; i++) {\n if (childOwners[i] === ancestorOwners[i]) {\n deepestCommon = i;\n } else {\n break;\n }\n }\n\n var UNKNOWN = '(unknown)';\n var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ownerInfo = [].concat(\n // If the parent and child instances have a common owner ancestor, start\n // with that -- otherwise we just start with the parent's owners.\n deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n // If we're warning about an invalid (non-parent) ancestry, add '...'\n invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n if (didWarn[warnKey]) {\n return;\n }\n didWarn[warnKey] = true;\n\n if (invalidParent) {\n var info = '';\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined;\n }\n }\n };\n\n validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2);\n\n validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n // For testing\n validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.parentTag;\n var parentTag = parentInfo && parentInfo.tag;\n return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n };\n}\n\nmodule.exports = validateDOMNesting;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/validateDOMNesting.js\n ** module id = 69\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = require('./BeforeInputEventPlugin');\nvar ChangeEventPlugin = require('./ChangeEventPlugin');\nvar ClientReactRootIndex = require('./ClientReactRootIndex');\nvar DefaultEventPluginOrder = require('./DefaultEventPluginOrder');\nvar EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');\nvar ReactBrowserComponentMixin = require('./ReactBrowserComponentMixin');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactDOMComponent = require('./ReactDOMComponent');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactEventListener = require('./ReactEventListener');\nvar ReactInjection = require('./ReactInjection');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactReconcileTransaction = require('./ReactReconcileTransaction');\nvar SelectEventPlugin = require('./SelectEventPlugin');\nvar ServerReactRootIndex = require('./ServerReactRootIndex');\nvar SimpleEventPlugin = require('./SimpleEventPlugin');\nvar SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');\n\nvar alreadyInjected = false;\n\nfunction inject() {\n if (alreadyInjected) {\n // TODO: This is currently true because these injections are shared between\n // the client and the server package. They should be built independently\n // and not share any injection state. Then this problem will be solved.\n return;\n }\n alreadyInjected = true;\n\n ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n /**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);\n ReactInjection.EventPluginHub.injectMount(ReactMount);\n\n /**\n * Some important event plugins included by default (without having to require\n * them).\n */\n ReactInjection.EventPluginHub.injectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n });\n\n ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);\n\n ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);\n\n ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n ReactInjection.EmptyComponent.injectEmptyComponent('noscript');\n\n ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);\n\n ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n\n if (process.env.NODE_ENV !== 'production') {\n var url = ExecutionEnvironment.canUseDOM && window.location.href || '';\n if (/[?&]react_perf\\b/.test(url)) {\n var ReactDefaultPerf = require('./ReactDefaultPerf');\n ReactDefaultPerf.start();\n }\n }\n}\n\nmodule.exports = {\n inject: inject\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultInjection.js\n ** module id = 70\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015 Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar FallbackCompositionState = require('./FallbackCompositionState');\nvar SyntheticCompositionEvent = require('./SyntheticCompositionEvent');\nvar SyntheticInputEvent = require('./SyntheticInputEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n var opera = window.opera;\n return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onBeforeInput: null }),\n captured: keyOf({ onBeforeInputCapture: null })\n },\n dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionEnd: null }),\n captured: keyOf({ onCompositionEndCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionStart: null }),\n captured: keyOf({ onCompositionStartCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionUpdate: null }),\n captured: keyOf({ onCompositionUpdateCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case topLevelTypes.topCompositionStart:\n return eventTypes.compositionStart;\n case topLevelTypes.topCompositionEnd:\n return eventTypes.compositionEnd;\n case topLevelTypes.topCompositionUpdate:\n return eventTypes.compositionUpdate;\n }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case topLevelTypes.topKeyUp:\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n case topLevelTypes.topKeyDown:\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n case topLevelTypes.topKeyPress:\n case topLevelTypes.topMouseDown:\n case topLevelTypes.topBlur:\n // Events are not possible without cancelling IME.\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!currentComposition) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!currentComposition && eventType === eventTypes.compositionStart) {\n currentComposition = FallbackCompositionState.getPooled(topLevelTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (currentComposition) {\n fallbackData = currentComposition.getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case topLevelTypes.topCompositionEnd:\n return getDataFromCustomEvent(nativeEvent);\n case topLevelTypes.topKeyPress:\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case topLevelTypes.topTextInput:\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data;\n\n // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to blacklist it.\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n if (currentComposition) {\n if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = currentComposition.getData();\n FallbackCompositionState.release(currentComposition);\n currentComposition = null;\n return chars;\n }\n return null;\n }\n\n switch (topLevelType) {\n case topLevelTypes.topPaste:\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n case topLevelTypes.topKeyPress:\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case topLevelTypes.topCompositionEnd:\n return useFallbackCompositionData ? null : nativeEvent.data;\n default:\n return null;\n }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n }\n\n // If no characters are being inserted, no BeforeInput event should\n // be fired.\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n event.data = chars;\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)];\n }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/BeforeInputEventPlugin.js\n ** module id = 71\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\n\nvar warning = require('fbjs/lib/warning');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(id, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(id, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(domID, upwards, event) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined;\n }\n var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n var listener = listenerAtPhase(domID, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(id, ignoredDirection, event) {\n if (event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(id, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchIDs = accumulateInto(event._dispatchIDs, id);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event.dispatchMarker, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {\n EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n accumulateDirectDispatches: accumulateDirectDispatches,\n accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPropagators.js\n ** module id = 72\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n this._root = root;\n this._startText = this.getText();\n this._fallbackText = null;\n}\n\nassign(FallbackCompositionState.prototype, {\n destructor: function () {\n this._root = null;\n this._startText = null;\n this._fallbackText = null;\n },\n\n /**\n * Get current text of input.\n *\n * @return {string}\n */\n getText: function () {\n if ('value' in this._root) {\n return this._root.value;\n }\n return this._root[getTextContentAccessor()];\n },\n\n /**\n * Determine the differing substring between the initially stored\n * text content and the current content.\n *\n * @return {string}\n */\n getData: function () {\n if (this._fallbackText) {\n return this._fallbackText;\n }\n\n var start;\n var startValue = this._startText;\n var startLength = startValue.length;\n var end;\n var endValue = this.getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n this._fallbackText = endValue.slice(start, sliceTail);\n return this._fallbackText;\n }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/FallbackCompositionState.js\n ** module id = 73\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n if (!contentKey && ExecutionEnvironment.canUseDOM) {\n // Prefer textContent to innerText because many browsers support both but\n // SVG <text> elements don't support innerText even when <div> does.\n contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n }\n return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getTextContentAccessor.js\n ** module id = 74\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticCompositionEvent.js\n ** module id = 75\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: emptyFunction.thatReturnsNull,\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n */\nfunction SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n this.dispatchConfig = dispatchConfig;\n this.dispatchMarker = dispatchMarker;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = nativeEventTarget;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n } else {\n this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n}\n\nassign(SyntheticEvent.prototype, {\n\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n }\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else {\n event.returnValue = false;\n }\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n }\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else {\n event.cancelBubble = true;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: emptyFunction.thatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n this[propName] = null;\n }\n this.dispatchConfig = null;\n this.dispatchMarker = null;\n this.nativeEvent = null;\n }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n var Super = this;\n\n var prototype = Object.create(Super.prototype);\n assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = assign({}, Super.Interface, Interface);\n Class.augmentClass = Super.augmentClass;\n\n PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticEvent.js\n ** module id = 76\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\nvar InputEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticInputEvent.js\n ** module id = 77\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyOf\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\n\"use strict\";\n\nvar keyOf = function (oneKeyObj) {\n var key;\n for (key in oneKeyObj) {\n if (!oneKeyObj.hasOwnProperty(key)) {\n continue;\n }\n return key;\n }\n return null;\n};\n\nmodule.exports = keyOf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyOf.js\n ** module id = 78\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactUpdates = require('./ReactUpdates');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\nvar isEventSupported = require('./isEventSupported');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n change: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onChange: null }),\n captured: keyOf({ onChangeCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementID = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n // See `handleChange` comment below\n doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent));\n EventPropagators.accumulateTwoPhaseDispatches(event);\n\n // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n EventPluginHub.enqueueEvents(event);\n EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetID) {\n activeElement = target;\n activeElementID = targetID;\n activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n if (!activeElement) {\n return;\n }\n activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n activeElement = null;\n activeElementID = null;\n}\n\nfunction getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topChange) {\n return topLevelTargetID;\n }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topFocus) {\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForChangeEventIE8();\n startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);\n } else if (topLevelType === topLevelTypes.topBlur) {\n stopWatchingForChangeEventIE8();\n }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events\n isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);\n}\n\n/**\n * (For old IE.) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n get: function () {\n return activeElementValueProp.get.call(this);\n },\n set: function (val) {\n // Cast to a string so we can do equality checks.\n activeElementValue = '' + val;\n activeElementValueProp.set.call(this, val);\n }\n};\n\n/**\n * (For old IE.) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetID) {\n activeElement = target;\n activeElementID = targetID;\n activeElementValue = target.value;\n activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n // on DOM elements\n Object.defineProperty(activeElement, 'value', newValueProp);\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n\n/**\n * (For old IE.) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n // delete restores the original property definition\n delete activeElement.value;\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n\n activeElement = null;\n activeElementID = null;\n activeElementValue = null;\n activeElementValueProp = null;\n}\n\n/**\n * (For old IE.) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n var value = nativeEvent.srcElement.value;\n if (value === activeElementValue) {\n return;\n }\n activeElementValue = value;\n\n manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topInput) {\n // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n // what we want so fall through here and trigger an abstract event\n return topLevelTargetID;\n }\n}\n\n// For IE8 and IE9.\nfunction handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topFocus) {\n // In IE8, we can capture almost all .value changes by adding a\n // propertychange handler and looking for events with propertyName\n // equal to 'value'\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(topLevelTarget, topLevelTargetID);\n } else if (topLevelType === topLevelTypes.topBlur) {\n stopWatchingForValueChange();\n }\n}\n\n// For IE8 and IE9.\nfunction getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n if (activeElement && activeElement.value !== activeElementValue) {\n activeElementValue = activeElement.value;\n return activeElementID;\n }\n }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topClick) {\n return topLevelTargetID;\n }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n\n var getTargetIDFunc, handleEventFunc;\n if (shouldUseChangeEvent(topLevelTarget)) {\n if (doesChangeEventBubble) {\n getTargetIDFunc = getTargetIDForChangeEvent;\n } else {\n handleEventFunc = handleEventsForChangeEventIE8;\n }\n } else if (isTextInputElement(topLevelTarget)) {\n if (isInputEventSupported) {\n getTargetIDFunc = getTargetIDForInputEvent;\n } else {\n getTargetIDFunc = getTargetIDForInputEventIE;\n handleEventFunc = handleEventsForInputEventIE;\n }\n } else if (shouldUseClickEvent(topLevelTarget)) {\n getTargetIDFunc = getTargetIDForClickEvent;\n }\n\n if (getTargetIDFunc) {\n var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);\n if (targetID) {\n var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget);\n event.type = 'change';\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);\n }\n }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ChangeEventPlugin.js\n ** module id = 79\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\nfunction getEventTarget(nativeEvent) {\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventTarget.js\n ** module id = 80\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n 'color': true,\n 'date': true,\n 'datetime': true,\n 'datetime-local': true,\n 'email': true,\n 'month': true,\n 'number': true,\n 'password': true,\n 'range': true,\n 'search': true,\n 'tel': true,\n 'text': true,\n 'time': true,\n 'url': true,\n 'week': true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');\n}\n\nmodule.exports = isTextInputElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isTextInputElement.js\n ** module id = 81\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ClientReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar nextReactRootIndex = 0;\n\nvar ClientReactRootIndex = {\n createReactRootIndex: function () {\n return nextReactRootIndex++;\n }\n};\n\nmodule.exports = ClientReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ClientReactRootIndex.js\n ** module id = 82\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = require('fbjs/lib/keyOf');\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DefaultEventPluginOrder.js\n ** module id = 83\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\nvar ReactMount = require('./ReactMount');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\nvar getFirstReactDOM = ReactMount.getFirstReactDOM;\n\nvar eventTypes = {\n mouseEnter: {\n registrationName: keyOf({ onMouseEnter: null }),\n dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n },\n mouseLeave: {\n registrationName: keyOf({ onMouseLeave: null }),\n dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n }\n};\n\nvar extractedEvents = [null, null];\n\nvar EnterLeaveEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n return null;\n }\n if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n // Must not be a mouse in or mouse out - ignoring.\n return null;\n }\n\n var win;\n if (topLevelTarget.window === topLevelTarget) {\n // `topLevelTarget` is probably a window object.\n win = topLevelTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = topLevelTarget.ownerDocument;\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n var fromID = '';\n var toID = '';\n if (topLevelType === topLevelTypes.topMouseOut) {\n from = topLevelTarget;\n fromID = topLevelTargetID;\n to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement);\n if (to) {\n toID = ReactMount.getID(to);\n } else {\n to = win;\n }\n to = to || win;\n } else {\n from = win;\n to = topLevelTarget;\n toID = topLevelTargetID;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget);\n leave.type = 'mouseleave';\n leave.target = from;\n leave.relatedTarget = to;\n\n var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget);\n enter.type = 'mouseenter';\n enter.target = to;\n enter.relatedTarget = from;\n\n EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);\n\n extractedEvents[0] = leave;\n extractedEvents[1] = enter;\n\n return extractedEvents;\n }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EnterLeaveEventPlugin.js\n ** module id = 84\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: function (event) {\n // Webkit, Firefox, IE9+\n // which: 1 2 3\n // button: 0 1 2 (standard)\n var button = event.button;\n if ('which' in event) {\n return button;\n }\n // IE<9\n // which: undefined\n // button: 0 0 0\n // button: 1 4 2 (onmouseup)\n return button === 2 ? 2 : button === 4 ? 1 : 0;\n },\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n // \"Proprietary\" Interface.\n pageX: function (event) {\n return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n },\n pageY: function (event) {\n return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticMouseEvent.js\n ** module id = 85\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n view: function (event) {\n if (event.view) {\n return event.view;\n }\n\n var target = getEventTarget(event);\n if (target != null && target.window === target) {\n // target is a window object\n return target;\n }\n\n var doc = target.ownerDocument;\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n if (doc) {\n return doc.defaultView || doc.parentWindow;\n } else {\n return window;\n }\n },\n detail: function (event) {\n return event.detail || 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticUIEvent.js\n ** module id = 86\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n 'Alt': 'altKey',\n 'Control': 'ctrlKey',\n 'Meta': 'metaKey',\n 'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventModifierState.js\n ** module id = 87\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar hasSVG;\nif (ExecutionEnvironment.canUseDOM) {\n var implementation = document.implementation;\n hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');\n}\n\nvar HTMLDOMPropertyConfig = {\n isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\\d_.\\-]*$/),\n Properties: {\n /**\n * Standard Properties\n */\n accept: null,\n acceptCharset: null,\n accessKey: null,\n action: null,\n allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n allowTransparency: MUST_USE_ATTRIBUTE,\n alt: null,\n async: HAS_BOOLEAN_VALUE,\n autoComplete: null,\n // autoFocus is polyfilled/normalized by AutoFocusUtils\n // autoFocus: HAS_BOOLEAN_VALUE,\n autoPlay: HAS_BOOLEAN_VALUE,\n capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n cellPadding: null,\n cellSpacing: null,\n charSet: MUST_USE_ATTRIBUTE,\n challenge: MUST_USE_ATTRIBUTE,\n checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n classID: MUST_USE_ATTRIBUTE,\n // To set className on SVG elements, it's necessary to use .setAttribute;\n // this works on HTML elements too in all browsers except IE8. Conveniently,\n // IE8 doesn't support SVG and so we can simply use the attribute in\n // browsers that support SVG and the property in browsers that don't,\n // regardless of whether the element is HTML or SVG.\n className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,\n cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n colSpan: null,\n content: null,\n contentEditable: null,\n contextMenu: MUST_USE_ATTRIBUTE,\n controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n coords: null,\n crossOrigin: null,\n data: null, // For `<object />` acts as `src`.\n dateTime: MUST_USE_ATTRIBUTE,\n 'default': HAS_BOOLEAN_VALUE,\n defer: HAS_BOOLEAN_VALUE,\n dir: null,\n disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n download: HAS_OVERLOADED_BOOLEAN_VALUE,\n draggable: null,\n encType: null,\n form: MUST_USE_ATTRIBUTE,\n formAction: MUST_USE_ATTRIBUTE,\n formEncType: MUST_USE_ATTRIBUTE,\n formMethod: MUST_USE_ATTRIBUTE,\n formNoValidate: HAS_BOOLEAN_VALUE,\n formTarget: MUST_USE_ATTRIBUTE,\n frameBorder: MUST_USE_ATTRIBUTE,\n headers: null,\n height: MUST_USE_ATTRIBUTE,\n hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n high: null,\n href: null,\n hrefLang: null,\n htmlFor: null,\n httpEquiv: null,\n icon: null,\n id: MUST_USE_PROPERTY,\n inputMode: MUST_USE_ATTRIBUTE,\n integrity: null,\n is: MUST_USE_ATTRIBUTE,\n keyParams: MUST_USE_ATTRIBUTE,\n keyType: MUST_USE_ATTRIBUTE,\n kind: null,\n label: null,\n lang: null,\n list: MUST_USE_ATTRIBUTE,\n loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n low: null,\n manifest: MUST_USE_ATTRIBUTE,\n marginHeight: null,\n marginWidth: null,\n max: null,\n maxLength: MUST_USE_ATTRIBUTE,\n media: MUST_USE_ATTRIBUTE,\n mediaGroup: null,\n method: null,\n min: null,\n minLength: MUST_USE_ATTRIBUTE,\n multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n name: null,\n nonce: MUST_USE_ATTRIBUTE,\n noValidate: HAS_BOOLEAN_VALUE,\n open: HAS_BOOLEAN_VALUE,\n optimum: null,\n pattern: null,\n placeholder: null,\n poster: null,\n preload: null,\n radioGroup: null,\n readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n rel: null,\n required: HAS_BOOLEAN_VALUE,\n reversed: HAS_BOOLEAN_VALUE,\n role: MUST_USE_ATTRIBUTE,\n rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n rowSpan: null,\n sandbox: null,\n scope: null,\n scoped: HAS_BOOLEAN_VALUE,\n scrolling: null,\n seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n shape: null,\n size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n sizes: MUST_USE_ATTRIBUTE,\n span: HAS_POSITIVE_NUMERIC_VALUE,\n spellCheck: null,\n src: null,\n srcDoc: MUST_USE_PROPERTY,\n srcLang: null,\n srcSet: MUST_USE_ATTRIBUTE,\n start: HAS_NUMERIC_VALUE,\n step: null,\n style: null,\n summary: null,\n tabIndex: null,\n target: null,\n title: null,\n type: null,\n useMap: null,\n value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\n width: MUST_USE_ATTRIBUTE,\n wmode: MUST_USE_ATTRIBUTE,\n wrap: null,\n\n /**\n * RDFa Properties\n */\n about: MUST_USE_ATTRIBUTE,\n datatype: MUST_USE_ATTRIBUTE,\n inlist: MUST_USE_ATTRIBUTE,\n prefix: MUST_USE_ATTRIBUTE,\n // property is also supported for OpenGraph in meta tags.\n property: MUST_USE_ATTRIBUTE,\n resource: MUST_USE_ATTRIBUTE,\n 'typeof': MUST_USE_ATTRIBUTE,\n vocab: MUST_USE_ATTRIBUTE,\n\n /**\n * Non-standard Properties\n */\n // autoCapitalize and autoCorrect are supported in Mobile Safari for\n // keyboard hints.\n autoCapitalize: null,\n autoCorrect: null,\n // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n autoSave: null,\n // color is for Safari mask-icon link\n color: null,\n // itemProp, itemScope, itemType are for\n // Microdata support. See http://schema.org/docs/gs.html\n itemProp: MUST_USE_ATTRIBUTE,\n itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n itemType: MUST_USE_ATTRIBUTE,\n // itemID and itemRef are for Microdata support as well but\n // only specified in the the WHATWG spec document. See\n // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n itemID: MUST_USE_ATTRIBUTE,\n itemRef: MUST_USE_ATTRIBUTE,\n // results show looking glass icon and recent searches on input\n // search fields in WebKit/Blink\n results: null,\n // IE-only attribute that specifies security restrictions on an iframe\n // as an alternative to the sandbox attribute on IE<10\n security: MUST_USE_ATTRIBUTE,\n // IE-only attribute that controls focus behavior\n unselectable: MUST_USE_ATTRIBUTE\n },\n DOMAttributeNames: {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv'\n },\n DOMPropertyNames: {\n autoCapitalize: 'autocapitalize',\n autoComplete: 'autocomplete',\n autoCorrect: 'autocorrect',\n autoFocus: 'autofocus',\n autoPlay: 'autoplay',\n autoSave: 'autosave',\n // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.\n // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding\n encType: 'encoding',\n hrefLang: 'hreflang',\n radioGroup: 'radiogroup',\n spellCheck: 'spellcheck',\n srcDoc: 'srcdoc',\n srcSet: 'srcset'\n }\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\n ** module id = 88\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserComponentMixin\n */\n\n'use strict';\n\nvar ReactInstanceMap = require('./ReactInstanceMap');\n\nvar findDOMNode = require('./findDOMNode');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnKey = '_getDOMNodeDidWarn';\n\nvar ReactBrowserComponentMixin = {\n /**\n * Returns the DOM node rendered by this component.\n *\n * @return {DOMElement} The root node of this component.\n * @final\n * @protected\n */\n getDOMNode: function () {\n process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;\n this.constructor[didWarnKey] = true;\n return findDOMNode(this);\n }\n};\n\nmodule.exports = ReactBrowserComponentMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserComponentMixin.js\n ** module id = 89\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule findDOMNode\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactMount = require('./ReactMount');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n owner._warnedAboutRefsInRender = true;\n }\n }\n if (componentOrElement == null) {\n return null;\n }\n if (componentOrElement.nodeType === 1) {\n return componentOrElement;\n }\n if (ReactInstanceMap.has(componentOrElement)) {\n return ReactMount.getNodeFromInstance(componentOrElement);\n }\n !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;\n}\n\nmodule.exports = findDOMNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/findDOMNode.js\n ** module id = 90\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultBatchingStrategy\n */\n\n'use strict';\n\nvar ReactUpdates = require('./ReactUpdates');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\nvar RESET_BATCHED_UPDATES = {\n initialize: emptyFunction,\n close: function () {\n ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n initialize: emptyFunction,\n close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n this.reinitializeTransaction();\n}\n\nassign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n isBatchingUpdates: false,\n\n /**\n * Call the provided function in a context within which calls to `setState`\n * and friends are batched such that components aren't updated unnecessarily.\n */\n batchedUpdates: function (callback, a, b, c, d, e) {\n var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n // The code is written this way to avoid extra allocations\n if (alreadyBatchingUpdates) {\n callback(a, b, c, d, e);\n } else {\n transaction.perform(callback, null, a, b, c, d, e);\n }\n }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultBatchingStrategy.js\n ** module id = 91\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponent\n * @typechecks static-only\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar AutoFocusUtils = require('./AutoFocusUtils');\nvar CSSPropertyOperations = require('./CSSPropertyOperations');\nvar DOMProperty = require('./DOMProperty');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar EventConstants = require('./EventConstants');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMButton = require('./ReactDOMButton');\nvar ReactDOMInput = require('./ReactDOMInput');\nvar ReactDOMOption = require('./ReactDOMOption');\nvar ReactDOMSelect = require('./ReactDOMSelect');\nvar ReactDOMTextarea = require('./ReactDOMTextarea');\nvar ReactMount = require('./ReactMount');\nvar ReactMultiChild = require('./ReactMultiChild');\nvar ReactPerf = require('./ReactPerf');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar canDefineProperty = require('./canDefineProperty');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar isEventSupported = require('./isEventSupported');\nvar keyOf = require('fbjs/lib/keyOf');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar deleteListener = ReactBrowserEventEmitter.deleteListener;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar CHILDREN = keyOf({ children: null });\nvar STYLE = keyOf({ style: null });\nvar HTML = keyOf({ __html: null });\n\nvar ELEMENT_NODE_TYPE = 1;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n if (internalInstance) {\n var owner = internalInstance._currentElement._owner || null;\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' This DOM node was rendered by `' + name + '`.';\n }\n }\n }\n return '';\n}\n\nvar legacyPropsDescriptor;\nif (process.env.NODE_ENV !== 'production') {\n legacyPropsDescriptor = {\n props: {\n enumerable: false,\n get: function () {\n var component = this._reactInternalComponent;\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined;\n return component._currentElement.props;\n }\n }\n };\n}\n\nfunction legacyGetDOMNode() {\n if (process.env.NODE_ENV !== 'production') {\n var component = this._reactInternalComponent;\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n return this;\n}\n\nfunction legacyIsMounted() {\n var component = this._reactInternalComponent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n return !!component;\n}\n\nfunction legacySetStateEtc() {\n if (process.env.NODE_ENV !== 'production') {\n var component = this._reactInternalComponent;\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n}\n\nfunction legacySetProps(partialProps, callback) {\n var component = this._reactInternalComponent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n if (!component) {\n return;\n }\n ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n }\n}\n\nfunction legacyReplaceProps(partialProps, callback) {\n var component = this._reactInternalComponent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n if (!component) {\n return;\n }\n ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n }\n}\n\nfunction friendlyStringify(obj) {\n if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return '[' + obj.map(friendlyStringify).join(', ') + ']';\n } else {\n var pairs = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n }\n }\n return '{' + pairs.join(', ') + '}';\n }\n } else if (typeof obj === 'string') {\n return JSON.stringify(obj);\n } else if (typeof obj === 'function') {\n return '[function object]';\n }\n // Differs from JSON.stringify in that undefined becauses undefined and that\n // inf and nan don't become null\n return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n if (style1 == null || style2 == null) {\n return;\n }\n if (shallowEqual(style1, style2)) {\n return;\n }\n\n var componentName = component._tag;\n var owner = component._currentElement._owner;\n var ownerName;\n if (owner) {\n ownerName = owner.getName();\n }\n\n var hash = ownerName + '|' + componentName;\n\n if (styleMutationWarning.hasOwnProperty(hash)) {\n return;\n }\n\n styleMutationWarning[hash] = true;\n\n process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n if (!props) {\n return;\n }\n // Note the use of `==` which checks for null or undefined.\n if (process.env.NODE_ENV !== 'production') {\n if (voidElementTags[component._tag]) {\n process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined;\n }\n }\n if (props.dangerouslySetInnerHTML != null) {\n !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined;\n !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined;\n }\n !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \\'em\\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined;\n}\n\nfunction enqueuePutListener(id, registrationName, listener, transaction) {\n if (process.env.NODE_ENV !== 'production') {\n // IE8 has no API for event capturing and the `onScroll` event doesn't\n // bubble.\n process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : undefined;\n }\n var container = ReactMount.findReactContainerForID(id);\n if (container) {\n var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;\n listenTo(registrationName, doc);\n }\n transaction.getReactMountReady().enqueue(putListener, {\n id: id,\n registrationName: registrationName,\n listener: listener\n });\n}\n\nfunction putListener() {\n var listenerToPut = this;\n ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener);\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n topAbort: 'abort',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTimeUpdate: 'timeupdate',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n var inst = this;\n // If a component renders to null or if another component fatals and causes\n // the state of the tree to be corrupted, `node` here can be null.\n !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined;\n var node = ReactMount.getNode(inst._rootNodeID);\n !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined;\n\n switch (inst._tag) {\n case 'iframe':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n break;\n case 'video':\n case 'audio':\n\n inst._wrapperState.listeners = [];\n // create listener for each media event\n for (var event in mediaEvents) {\n if (mediaEvents.hasOwnProperty(event)) {\n inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));\n }\n }\n\n break;\n case 'img':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n break;\n case 'form':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];\n break;\n }\n}\n\nfunction mountReadyInputWrapper() {\n ReactDOMInput.mountReadyWrapper(this);\n}\n\nfunction postUpdateSelectWrapper() {\n ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special cased tags.\n\nvar omittedCloseTags = {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'embed': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true\n};\n\n// NOTE: menuitem's close tag should be omitted, but that causes problems.\nvar newlineEatingTags = {\n 'listing': true,\n 'pre': true,\n 'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = assign({\n 'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = ({}).hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n if (!hasOwnProperty.call(validatedTagCache, tag)) {\n !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined;\n validatedTagCache[tag] = true;\n }\n}\n\nfunction processChildContextDev(context, inst) {\n // Pass down our tag name to child components for validation purposes\n context = assign({}, context);\n var info = context[validateDOMNesting.ancestorInfoContextKey];\n context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst);\n return context;\n}\n\nfunction isCustomComponent(tagName, props) {\n return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n * - Event listeners: `onClick`, `onMouseDown`, etc.\n * - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(tag) {\n validateDangerousTag(tag);\n this._tag = tag.toLowerCase();\n this._renderedChildren = null;\n this._previousStyle = null;\n this._previousStyleCopy = null;\n this._rootNodeID = null;\n this._wrapperState = null;\n this._topLevelWrapper = null;\n this._nodeWithLegacyProperties = null;\n if (process.env.NODE_ENV !== 'production') {\n this._unprocessedContextDev = null;\n this._processedContextDev = null;\n }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n construct: function (element) {\n this._currentElement = element;\n },\n\n /**\n * Generates root tag markup then recurses. This method has side effects and\n * is not idempotent.\n *\n * @internal\n * @param {string} rootID The root DOM ID for this node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} context\n * @return {string} The computed markup.\n */\n mountComponent: function (rootID, transaction, context) {\n this._rootNodeID = rootID;\n\n var props = this._currentElement.props;\n\n switch (this._tag) {\n case 'iframe':\n case 'img':\n case 'form':\n case 'video':\n case 'audio':\n this._wrapperState = {\n listeners: null\n };\n transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n break;\n case 'button':\n props = ReactDOMButton.getNativeProps(this, props, context);\n break;\n case 'input':\n ReactDOMInput.mountWrapper(this, props, context);\n props = ReactDOMInput.getNativeProps(this, props, context);\n break;\n case 'option':\n ReactDOMOption.mountWrapper(this, props, context);\n props = ReactDOMOption.getNativeProps(this, props, context);\n break;\n case 'select':\n ReactDOMSelect.mountWrapper(this, props, context);\n props = ReactDOMSelect.getNativeProps(this, props, context);\n context = ReactDOMSelect.processChildContext(this, props, context);\n break;\n case 'textarea':\n ReactDOMTextarea.mountWrapper(this, props, context);\n props = ReactDOMTextarea.getNativeProps(this, props, context);\n break;\n }\n\n assertValidProps(this, props);\n if (process.env.NODE_ENV !== 'production') {\n if (context[validateDOMNesting.ancestorInfoContextKey]) {\n validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n this._unprocessedContextDev = context;\n this._processedContextDev = processChildContextDev(context, this);\n context = this._processedContextDev;\n }\n\n var mountImage;\n if (transaction.useCreateElement) {\n var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n var el = ownerDocument.createElement(this._currentElement.type);\n DOMPropertyOperations.setAttributeForID(el, this._rootNodeID);\n // Populate node cache\n ReactMount.getID(el);\n this._updateDOMProperties({}, props, transaction, el);\n this._createInitialChildren(transaction, props, context, el);\n mountImage = el;\n } else {\n var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n var tagContent = this._createContentMarkup(transaction, props, context);\n if (!tagContent && omittedCloseTags[this._tag]) {\n mountImage = tagOpen + '/>';\n } else {\n mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n }\n }\n\n switch (this._tag) {\n case 'input':\n transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this);\n // falls through\n case 'button':\n case 'select':\n case 'textarea':\n if (props.autoFocus) {\n transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n }\n break;\n }\n\n return mountImage;\n },\n\n /**\n * Creates markup for the open tag and all attributes.\n *\n * This method has side effects because events get registered.\n *\n * Iterating over object properties is faster than iterating over arrays.\n * @see http://jsperf.com/obj-vs-arr-iteration\n *\n * @private\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} props\n * @return {string} Markup of opening tag.\n */\n _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n var ret = '<' + this._currentElement.type;\n\n for (var propKey in props) {\n if (!props.hasOwnProperty(propKey)) {\n continue;\n }\n var propValue = props[propKey];\n if (propValue == null) {\n continue;\n }\n if (registrationNameModules.hasOwnProperty(propKey)) {\n if (propValue) {\n enqueuePutListener(this._rootNodeID, propKey, propValue, transaction);\n }\n } else {\n if (propKey === STYLE) {\n if (propValue) {\n if (process.env.NODE_ENV !== 'production') {\n // See `_updateDOMProperties`. style block\n this._previousStyle = propValue;\n }\n propValue = this._previousStyleCopy = assign({}, props.style);\n }\n propValue = CSSPropertyOperations.createMarkupForStyles(propValue);\n }\n var markup = null;\n if (this._tag != null && isCustomComponent(this._tag, props)) {\n if (propKey !== CHILDREN) {\n markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n }\n } else {\n markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n }\n if (markup) {\n ret += ' ' + markup;\n }\n }\n }\n\n // For static pages, no need to put React ID and checksum. Saves lots of\n // bytes.\n if (transaction.renderToStaticMarkup) {\n return ret;\n }\n\n var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);\n return ret + ' ' + markupForID;\n },\n\n /**\n * Creates markup for the content between the tags.\n *\n * @private\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} props\n * @param {object} context\n * @return {string} Content markup.\n */\n _createContentMarkup: function (transaction, props, context) {\n var ret = '';\n\n // Intentional use of != to avoid catching zero/false.\n var innerHTML = props.dangerouslySetInnerHTML;\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n ret = innerHTML.__html;\n }\n } else {\n var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n var childrenToUse = contentToUse != null ? null : props.children;\n if (contentToUse != null) {\n // TODO: Validate that text is allowed as a child of this node\n ret = escapeTextContentForBrowser(contentToUse);\n } else if (childrenToUse != null) {\n var mountImages = this.mountChildren(childrenToUse, transaction, context);\n ret = mountImages.join('');\n }\n }\n if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n // text/html ignores the first character in these tags if it's a newline\n // Prefer to break application/xml over text/html (for now) by adding\n // a newline specifically to get eaten by the parser. (Alternately for\n // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n // \\r is normalized out by HTMLTextAreaElement#value.)\n // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n return '\\n' + ret;\n } else {\n return ret;\n }\n },\n\n _createInitialChildren: function (transaction, props, context, el) {\n // Intentional use of != to avoid catching zero/false.\n var innerHTML = props.dangerouslySetInnerHTML;\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n setInnerHTML(el, innerHTML.__html);\n }\n } else {\n var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n var childrenToUse = contentToUse != null ? null : props.children;\n if (contentToUse != null) {\n // TODO: Validate that text is allowed as a child of this node\n setTextContent(el, contentToUse);\n } else if (childrenToUse != null) {\n var mountImages = this.mountChildren(childrenToUse, transaction, context);\n for (var i = 0; i < mountImages.length; i++) {\n el.appendChild(mountImages[i]);\n }\n }\n }\n },\n\n /**\n * Receives a next element and updates the component.\n *\n * @internal\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} context\n */\n receiveComponent: function (nextElement, transaction, context) {\n var prevElement = this._currentElement;\n this._currentElement = nextElement;\n this.updateComponent(transaction, prevElement, nextElement, context);\n },\n\n /**\n * Updates a native DOM component after it has already been allocated and\n * attached to the DOM. Reconciles the root DOM node, then recurses.\n *\n * @param {ReactReconcileTransaction} transaction\n * @param {ReactElement} prevElement\n * @param {ReactElement} nextElement\n * @internal\n * @overridable\n */\n updateComponent: function (transaction, prevElement, nextElement, context) {\n var lastProps = prevElement.props;\n var nextProps = this._currentElement.props;\n\n switch (this._tag) {\n case 'button':\n lastProps = ReactDOMButton.getNativeProps(this, lastProps);\n nextProps = ReactDOMButton.getNativeProps(this, nextProps);\n break;\n case 'input':\n ReactDOMInput.updateWrapper(this);\n lastProps = ReactDOMInput.getNativeProps(this, lastProps);\n nextProps = ReactDOMInput.getNativeProps(this, nextProps);\n break;\n case 'option':\n lastProps = ReactDOMOption.getNativeProps(this, lastProps);\n nextProps = ReactDOMOption.getNativeProps(this, nextProps);\n break;\n case 'select':\n lastProps = ReactDOMSelect.getNativeProps(this, lastProps);\n nextProps = ReactDOMSelect.getNativeProps(this, nextProps);\n break;\n case 'textarea':\n ReactDOMTextarea.updateWrapper(this);\n lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);\n nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);\n break;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // If the context is reference-equal to the old one, pass down the same\n // processed object so the update bailout in ReactReconciler behaves\n // correctly (and identically in dev and prod). See #5005.\n if (this._unprocessedContextDev !== context) {\n this._unprocessedContextDev = context;\n this._processedContextDev = processChildContextDev(context, this);\n }\n context = this._processedContextDev;\n }\n\n assertValidProps(this, nextProps);\n this._updateDOMProperties(lastProps, nextProps, transaction, null);\n this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n if (!canDefineProperty && this._nodeWithLegacyProperties) {\n this._nodeWithLegacyProperties.props = nextProps;\n }\n\n if (this._tag === 'select') {\n // <select> value update needs to occur after <option> children\n // reconciliation\n transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n }\n },\n\n /**\n * Reconciles the properties by detecting differences in property values and\n * updating the DOM as necessary. This function is probably the single most\n * critical path for performance optimization.\n *\n * TODO: Benchmark whether checking for changed values in memory actually\n * improves performance (especially statically positioned elements).\n * TODO: Benchmark the effects of putting this at the top since 99% of props\n * do not change for a given reconciliation.\n * TODO: Benchmark areas that can be improved with caching.\n *\n * @private\n * @param {object} lastProps\n * @param {object} nextProps\n * @param {ReactReconcileTransaction} transaction\n * @param {?DOMElement} node\n */\n _updateDOMProperties: function (lastProps, nextProps, transaction, node) {\n var propKey;\n var styleName;\n var styleUpdates;\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {\n continue;\n }\n if (propKey === STYLE) {\n var lastStyle = this._previousStyleCopy;\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = '';\n }\n }\n this._previousStyleCopy = null;\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (lastProps[propKey]) {\n // Only call deleteListener if there was a listener previously or\n // else willDeleteListener gets called when there wasn't actually a\n // listener (e.g., onClick={null})\n deleteListener(this._rootNodeID, propKey);\n }\n } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n DOMPropertyOperations.deleteValueForProperty(node, propKey);\n }\n }\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {\n continue;\n }\n if (propKey === STYLE) {\n if (nextProp) {\n if (process.env.NODE_ENV !== 'production') {\n checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n this._previousStyle = nextProp;\n }\n nextProp = this._previousStyleCopy = assign({}, nextProp);\n } else {\n this._previousStyleCopy = null;\n }\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = '';\n }\n }\n // Update styles that changed since `lastProp`.\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n styleUpdates = nextProp;\n }\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp) {\n enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction);\n } else if (lastProp) {\n deleteListener(this._rootNodeID, propKey);\n }\n } else if (isCustomComponent(this._tag, nextProps)) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n if (propKey === CHILDREN) {\n nextProp = null;\n }\n DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp);\n } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n // If we're updating to null or undefined, we should remove the property\n // from the DOM node instead of inadvertantly setting to a string. This\n // brings us in line with the same behavior we have on initial render.\n if (nextProp != null) {\n DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n } else {\n DOMPropertyOperations.deleteValueForProperty(node, propKey);\n }\n }\n }\n if (styleUpdates) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n CSSPropertyOperations.setValueForStyles(node, styleUpdates);\n }\n },\n\n /**\n * Reconciles the children with the various properties that affect the\n * children content.\n *\n * @param {object} lastProps\n * @param {object} nextProps\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n */\n _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n // Note the use of `!=` which checks for null or undefined.\n var lastChildren = lastContent != null ? null : lastProps.children;\n var nextChildren = nextContent != null ? null : nextProps.children;\n\n // If we're switching from children to content/html or vice versa, remove\n // the old content\n var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n if (lastChildren != null && nextChildren == null) {\n this.updateChildren(null, transaction, context);\n } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n this.updateTextContent('');\n }\n\n if (nextContent != null) {\n if (lastContent !== nextContent) {\n this.updateTextContent('' + nextContent);\n }\n } else if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n this.updateMarkup('' + nextHtml);\n }\n } else if (nextChildren != null) {\n this.updateChildren(nextChildren, transaction, context);\n }\n },\n\n /**\n * Destroys all event registrations for this instance. Does not remove from\n * the DOM. That must be done by the parent.\n *\n * @internal\n */\n unmountComponent: function () {\n switch (this._tag) {\n case 'iframe':\n case 'img':\n case 'form':\n case 'video':\n case 'audio':\n var listeners = this._wrapperState.listeners;\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].remove();\n }\n }\n break;\n case 'input':\n ReactDOMInput.unmountWrapper(this);\n break;\n case 'html':\n case 'head':\n case 'body':\n /**\n * Components like <html> <head> and <body> can't be removed or added\n * easily in a cross-browser way, however it's valuable to be able to\n * take advantage of React's reconciliation for styling and <title>\n * management. So we just document it and throw in dangerous cases.\n */\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined;\n break;\n }\n\n this.unmountChildren();\n ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);\n ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n this._rootNodeID = null;\n this._wrapperState = null;\n if (this._nodeWithLegacyProperties) {\n var node = this._nodeWithLegacyProperties;\n node._reactInternalComponent = null;\n this._nodeWithLegacyProperties = null;\n }\n },\n\n getPublicInstance: function () {\n if (!this._nodeWithLegacyProperties) {\n var node = ReactMount.getNode(this._rootNodeID);\n\n node._reactInternalComponent = this;\n node.getDOMNode = legacyGetDOMNode;\n node.isMounted = legacyIsMounted;\n node.setState = legacySetStateEtc;\n node.replaceState = legacySetStateEtc;\n node.forceUpdate = legacySetStateEtc;\n node.setProps = legacySetProps;\n node.replaceProps = legacyReplaceProps;\n\n if (process.env.NODE_ENV !== 'production') {\n if (canDefineProperty) {\n Object.defineProperties(node, legacyPropsDescriptor);\n } else {\n // updateComponent will update this property on subsequent renders\n node.props = this._currentElement.props;\n }\n } else {\n // updateComponent will update this property on subsequent renders\n node.props = this._currentElement.props;\n }\n\n this._nodeWithLegacyProperties = node;\n }\n return this._nodeWithLegacyProperties;\n }\n\n};\n\nReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {\n mountComponent: 'mountComponent',\n updateComponent: 'updateComponent'\n});\n\nassign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponent.js\n ** module id = 92\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule AutoFocusUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nvar findDOMNode = require('./findDOMNode');\nvar focusNode = require('fbjs/lib/focusNode');\n\nvar Mixin = {\n componentDidMount: function () {\n if (this.props.autoFocus) {\n focusNode(findDOMNode(this));\n }\n }\n};\n\nvar AutoFocusUtils = {\n Mixin: Mixin,\n\n focusDOMComponent: function () {\n focusNode(ReactMount.getNode(this._rootNodeID));\n }\n};\n\nmodule.exports = AutoFocusUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/AutoFocusUtils.js\n ** module id = 93\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule focusNode\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/focusNode.js\n ** module id = 94\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactPerf = require('./ReactPerf');\n\nvar camelizeStyleName = require('fbjs/lib/camelizeStyleName');\nvar dangerousStyleValue = require('./dangerousStyleValue');\nvar hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');\nvar memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');\nvar warning = require('fbjs/lib/warning');\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n var tempStyle = document.createElement('div').style;\n try {\n // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n tempStyle.font = '';\n } catch (e) {\n hasShorthandPropertyBug = true;\n }\n // IE8 only supports accessing cssFloat (standard) as styleFloat\n if (document.documentElement.style.cssFloat === undefined) {\n styleFloatAccessor = 'styleFloat';\n }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n // style values shouldn't contain a semicolon\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n\n var warnHyphenatedStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined;\n };\n\n var warnBadVendoredStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined;\n };\n\n var warnStyleValueWithSemicolon = function (name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon. ' + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined;\n };\n\n /**\n * @param {string} name\n * @param {*} value\n */\n var warnValidStyle = function (name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n /**\n * Serializes a mapping of style properties for use as inline styles:\n *\n * > createMarkupForStyles({width: '200px', height: 0})\n * \"width:200px;height:0;\"\n *\n * Undefined values are ignored so that declarative programming is easier.\n * The result should be HTML-escaped before insertion into the DOM.\n *\n * @param {object} styles\n * @return {?string}\n */\n createMarkupForStyles: function (styles) {\n var serialized = '';\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = styles[styleName];\n if (process.env.NODE_ENV !== 'production') {\n warnValidStyle(styleName, styleValue);\n }\n if (styleValue != null) {\n serialized += processStyleName(styleName) + ':';\n serialized += dangerousStyleValue(styleName, styleValue) + ';';\n }\n }\n return serialized || null;\n },\n\n /**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n setValueForStyles: function (node, styles) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n if (process.env.NODE_ENV !== 'production') {\n warnValidStyle(styleName, styles[styleName]);\n }\n var styleValue = dangerousStyleValue(styleName, styles[styleName]);\n if (styleName === 'float') {\n styleName = styleFloatAccessor;\n }\n if (styleValue) {\n style[styleName] = styleValue;\n } else {\n var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n if (expansion) {\n // Shorthand property that IE8 won't like unsetting, so unset each\n // component to placate it\n for (var individualStyleName in expansion) {\n style[individualStyleName] = '';\n }\n } else {\n style[styleName] = '';\n }\n }\n }\n }\n\n};\n\nReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {\n setValueForStyles: 'setValueForStyles'\n});\n\nmodule.exports = CSSPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSPropertyOperations.js\n ** module id = 95\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n stopOpacity: true,\n strokeDashoffset: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSProperty.js\n ** module id = 96\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelizeStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n * > camelizeStyleName('background-color')\n * < \"backgroundColor\"\n * > camelizeStyleName('-moz-transition')\n * < \"MozTransition\"\n * > camelizeStyleName('-ms-transition')\n * < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/camelizeStyleName.js\n ** module id = 97\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelize\n * @typechecks\n */\n\n\"use strict\";\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n * > camelize('background-color')\n * < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n return string.replace(_hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nmodule.exports = camelize;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/camelize.js\n ** module id = 98\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n\n var isNonNumeric = isNaN(value);\n if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n return '' + value; // cast to string\n }\n\n if (typeof value === 'string') {\n value = value.trim();\n }\n return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/dangerousStyleValue.js\n ** module id = 99\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenateStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/hyphenateStyleName.js\n ** module id = 100\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenate\n * @typechecks\n */\n\n'use strict';\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n * > hyphenate('backgroundColor')\n * < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/hyphenate.js\n ** module id = 101\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule memoizeStringOnly\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n *\n * @param {function} callback\n * @return {function}\n */\nfunction memoizeStringOnly(callback) {\n var cache = {};\n return function (string) {\n if (!cache.hasOwnProperty(string)) {\n cache[string] = callback.call(this, string);\n }\n return cache[string];\n };\n}\n\nmodule.exports = memoizeStringOnly;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/memoizeStringOnly.js\n ** module id = 102\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMButton\n */\n\n'use strict';\n\nvar mouseListenerNames = {\n onClick: true,\n onDoubleClick: true,\n onMouseDown: true,\n onMouseMove: true,\n onMouseUp: true,\n\n onClickCapture: true,\n onDoubleClickCapture: true,\n onMouseDownCapture: true,\n onMouseMoveCapture: true,\n onMouseUpCapture: true\n};\n\n/**\n * Implements a <button> native component that does not receive mouse events\n * when `disabled` is set.\n */\nvar ReactDOMButton = {\n getNativeProps: function (inst, props, context) {\n if (!props.disabled) {\n return props;\n }\n\n // Copy the props, except the mouse listeners\n var nativeProps = {};\n for (var key in props) {\n if (props.hasOwnProperty(key) && !mouseListenerNames[key]) {\n nativeProps[key] = props[key];\n }\n }\n\n return nativeProps;\n }\n};\n\nmodule.exports = ReactDOMButton;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMButton.js\n ** module id = 103\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInput\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar instancesByReactID = {};\n\nfunction forceUpdateIfMounted() {\n if (this._rootNodeID) {\n // DOM component is still mounted; update\n ReactDOMInput.updateWrapper(this);\n }\n}\n\n/**\n * Implements an <input> native component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n getNativeProps: function (inst, props, context) {\n var value = LinkedValueUtils.getValue(props);\n var checked = LinkedValueUtils.getChecked(props);\n\n var nativeProps = assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: value != null ? value : inst._wrapperState.initialValue,\n checked: checked != null ? checked : inst._wrapperState.initialChecked,\n onChange: inst._wrapperState.onChange\n });\n\n return nativeProps;\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n }\n\n var defaultValue = props.defaultValue;\n inst._wrapperState = {\n initialChecked: props.defaultChecked || false,\n initialValue: defaultValue != null ? defaultValue : null,\n onChange: _handleChange.bind(inst)\n };\n },\n\n mountReadyWrapper: function (inst) {\n // Can't be in mountWrapper or else server rendering leaks.\n instancesByReactID[inst._rootNodeID] = inst;\n },\n\n unmountWrapper: function (inst) {\n delete instancesByReactID[inst._rootNodeID];\n },\n\n updateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // TODO: Shouldn't this be getChecked(props)?\n var checked = props.checked;\n if (checked != null) {\n ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false);\n }\n\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n // Here we use asap to wait until all updates have propagated, which\n // is important when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n ReactUpdates.asap(forceUpdateIfMounted, this);\n\n var name = props.name;\n if (props.type === 'radio' && name != null) {\n var rootNode = ReactMount.getNode(this._rootNodeID);\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n }\n\n // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form, let's just use the global\n // `querySelectorAll` to ensure we don't miss anything.\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n }\n // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React with non-React.\n var otherID = ReactMount.getID(otherNode);\n !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined;\n var otherInstance = instancesByReactID[otherID];\n !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined;\n // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n }\n }\n\n return returnValue;\n}\n\nmodule.exports = ReactDOMInput;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMInput.js\n ** module id = 104\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar hasReadOnlyValue = {\n 'button': true,\n 'checkbox': true,\n 'image': true,\n 'hidden': true,\n 'radio': true,\n 'reset': true,\n 'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\\'t want to use valueLink and vice versa.') : invariant(false) : undefined;\n}\nfunction _assertValueLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\\'t want to use valueLink.') : invariant(false) : undefined;\n}\n\nfunction _assertCheckedLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\\'t want to ' + 'use checkedLink') : invariant(false) : undefined;\n}\n\nvar propTypes = {\n value: function (props, propName, componentName) {\n if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n checkPropTypes: function (tagName, props, owner) {\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var addendum = getDeclarationErrorAddendum(owner);\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined;\n }\n }\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current value of the input either from value prop or link.\n */\n getValue: function (inputProps) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.value;\n }\n return inputProps.value;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current checked status of the input either from checked prop\n * or link.\n */\n getChecked: function (inputProps) {\n if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.value;\n }\n return inputProps.checked;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @param {SyntheticEvent} event change event to handle\n */\n executeOnChange: function (inputProps, event) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.requestChange(event.target.value);\n } else if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.requestChange(event.target.checked);\n } else if (inputProps.onChange) {\n return inputProps.onChange.call(undefined, event);\n }\n }\n};\n\nmodule.exports = LinkedValueUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/LinkedValueUtils.js\n ** module id = 105\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n};\n\nfunction createChainableTypeChecker(validate) {\n function checkType(isRequired, props, propName, componentName, location, propFullName) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n if (props[propName] == null) {\n var locationName = ReactPropTypeLocationNames[location];\n if (isRequired) {\n return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n var locationName = ReactPropTypeLocationNames[location];\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!ReactElement.isValidElement(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var locationName = ReactPropTypeLocationNames[location];\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n return createChainableTypeChecker(function () {\n return new Error('Invalid argument supplied to oneOf, expected an instance of array.');\n });\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (propValue === expectedValues[i]) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n var valuesString = JSON.stringify(expectedValues);\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n return createChainableTypeChecker(function () {\n return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');\n });\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName) == null) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || ReactElement.isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return '<<anonymous>>';\n }\n return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypes.js\n ** module id = 106\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * @typechecks static-only\n */\n\n'use strict';\n\n/* global Symbol */\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n}\n\nmodule.exports = getIteratorFn;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getIteratorFn.js\n ** module id = 107\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMOption\n */\n\n'use strict';\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactDOMSelect = require('./ReactDOMSelect');\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\nvar valueContextKey = ReactDOMSelect.valueContextKey;\n\n/**\n * Implements an <option> native component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n mountWrapper: function (inst, props, context) {\n // TODO (yungsters): Remove support for `selected` in <option>.\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;\n }\n\n // Look up whether this option is 'selected' via context\n var selectValue = context[valueContextKey];\n\n // If context key is null (e.g., no specified value or after initial mount)\n // or missing (e.g., for <datalist>), we don't change props.selected\n var selected = null;\n if (selectValue != null) {\n selected = false;\n if (Array.isArray(selectValue)) {\n // multiple\n for (var i = 0; i < selectValue.length; i++) {\n if ('' + selectValue[i] === '' + props.value) {\n selected = true;\n break;\n }\n }\n } else {\n selected = '' + selectValue === '' + props.value;\n }\n }\n\n inst._wrapperState = { selected: selected };\n },\n\n getNativeProps: function (inst, props, context) {\n var nativeProps = assign({ selected: undefined, children: undefined }, props);\n\n // Read state only from initial mount because <select> updates value\n // manually; we need the initial state only for server rendering\n if (inst._wrapperState.selected != null) {\n nativeProps.selected = inst._wrapperState.selected;\n }\n\n var content = '';\n\n // Flatten children and warn if they aren't strings or numbers;\n // invalid types are ignored.\n ReactChildren.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n content += child;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;\n }\n });\n\n nativeProps.children = content;\n return nativeProps;\n }\n\n};\n\nmodule.exports = ReactDOMOption;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMOption.js\n ** module id = 108\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar ReactElement = require('./ReactElement');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar traverseAllChildren = require('./traverseAllChildren');\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/(?!\\/)/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '//');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n this.func = forEachFunction;\n this.context = forEachContext;\n this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func;\n var context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n this.result = mapResult;\n this.keyPrefix = keyPrefix;\n this.func = mapFunction;\n this.context = mapContext;\n this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n this.result = null;\n this.keyPrefix = null;\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result;\n var keyPrefix = bookKeeping.keyPrefix;\n var func = bookKeeping.func;\n var context = bookKeeping.context;\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n } else if (mappedChild != null) {\n if (ReactElement.isValidElement(mappedChild)) {\n mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n return result;\n}\n\nvar ReactChildren = {\n forEach: forEachChildren,\n map: mapChildren,\n mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n count: countChildren,\n toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildren.js\n ** module id = 109\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar userProvidedKeyEscaperLookup = {\n '=': '=0',\n '.': '=1',\n ':': '=2'\n};\n\nvar userProvidedKeyEscapeRegex = /[=.:]/g;\n\nvar didWarnAboutMaps = false;\n\nfunction userProvidedKeyEscaper(match) {\n return userProvidedKeyEscaperLookup[match];\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n if (component && component.key != null) {\n // Explicit key\n return wrapUserProvidedKey(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * Escape a component key so that it is safe to use in a reactid.\n *\n * @param {*} text Component key to be escaped.\n * @return {string} An escaped string.\n */\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);\n}\n\n/**\n * Wrap a `key` value explicitly provided by the user to distinguish it from\n * implicitly-generated keys generated by a component's index in its parent.\n *\n * @param {string} key Value of a user-provided `key` attribute\n * @return {string}\n */\nfunction wrapUserProvidedKey(key) {\n return '$' + escapeUserProvidedKey(key);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (iteratorFn) {\n var iterator = iteratorFn.call(children);\n var step;\n if (iteratorFn !== children.entries) {\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined;\n didWarnAboutMaps = true;\n }\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n child = entry[1];\n nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n }\n }\n } else if (type === 'object') {\n var addendum = '';\n if (process.env.NODE_ENV !== 'production') {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n if (children._isReactElement) {\n addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n }\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n addendum += ' Check the render method of `' + name + '`.';\n }\n }\n }\n var childrenString = String(children);\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/traverseAllChildren.js\n ** module id = 110\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\nvar valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n this._wrapperState.pendingUpdate = false;\n\n var props = this._currentElement.props;\n var value = LinkedValueUtils.getValue(props);\n\n if (value != null) {\n updateOptions(this, props, value);\n }\n }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n var owner = inst._currentElement._owner;\n LinkedValueUtils.checkPropTypes('select', props, owner);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n if (props[propName] == null) {\n continue;\n }\n if (props.multiple) {\n process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n }\n }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n var selectedValue, i;\n var options = ReactMount.getNode(inst._rootNodeID).options;\n\n if (multiple) {\n selectedValue = {};\n for (i = 0; i < propValue.length; i++) {\n selectedValue['' + propValue[i]] = true;\n }\n for (i = 0; i < options.length; i++) {\n var selected = selectedValue.hasOwnProperty(options[i].value);\n if (options[i].selected !== selected) {\n options[i].selected = selected;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n selectedValue = '' + propValue;\n for (i = 0; i < options.length; i++) {\n if (options[i].value === selectedValue) {\n options[i].selected = true;\n return;\n }\n }\n if (options.length) {\n options[0].selected = true;\n }\n }\n}\n\n/**\n * Implements a <select> native component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n valueContextKey: valueContextKey,\n\n getNativeProps: function (inst, props, context) {\n return assign({}, props, {\n onChange: inst._wrapperState.onChange,\n value: undefined\n });\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n checkSelectPropTypes(inst, props);\n }\n\n var value = LinkedValueUtils.getValue(props);\n inst._wrapperState = {\n pendingUpdate: false,\n initialValue: value != null ? value : props.defaultValue,\n onChange: _handleChange.bind(inst),\n wasMultiple: Boolean(props.multiple)\n };\n },\n\n processChildContext: function (inst, props, context) {\n // Pass down initial value so initial generated markup has correct\n // `selected` attributes\n var childContext = assign({}, context);\n childContext[valueContextKey] = inst._wrapperState.initialValue;\n return childContext;\n },\n\n postUpdateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // After the initial mount, we control selected-ness manually so don't pass\n // the context value down\n inst._wrapperState.initialValue = undefined;\n\n var wasMultiple = inst._wrapperState.wasMultiple;\n inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n inst._wrapperState.pendingUpdate = false;\n updateOptions(inst, Boolean(props.multiple), value);\n } else if (wasMultiple !== Boolean(props.multiple)) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n }\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n this._wrapperState.pendingUpdate = true;\n ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelect.js\n ** module id = 111\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextarea\n */\n\n'use strict';\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction forceUpdateIfMounted() {\n if (this._rootNodeID) {\n // DOM component is still mounted; update\n ReactDOMTextarea.updateWrapper(this);\n }\n}\n\n/**\n * Implements a <textarea> native component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n getNativeProps: function (inst, props, context) {\n !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;\n\n // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated.\n var nativeProps = assign({}, props, {\n defaultValue: undefined,\n value: undefined,\n children: inst._wrapperState.initialValue,\n onChange: inst._wrapperState.onChange\n });\n\n return nativeProps;\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n }\n\n var defaultValue = props.defaultValue;\n // TODO (yungsters): Remove support for children content in <textarea>.\n var children = props.children;\n if (children != null) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;\n }\n !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;\n if (Array.isArray(children)) {\n !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;\n children = children[0];\n }\n\n defaultValue = '' + children;\n }\n if (defaultValue == null) {\n defaultValue = '';\n }\n var value = LinkedValueUtils.getValue(props);\n\n inst._wrapperState = {\n // We save the initial value so that `ReactDOMComponent` doesn't update\n // `textContent` (unnecessary since we update value).\n // The initial value can be a boolean or object so that's why it's\n // forced to be a string.\n initialValue: '' + (value != null ? value : defaultValue),\n onChange: _handleChange.bind(inst)\n };\n },\n\n updateWrapper: function (inst) {\n var props = inst._currentElement.props;\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n ReactUpdates.asap(forceUpdateIfMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextarea.js\n ** module id = 112\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChild\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactChildReconciler = require('./ReactChildReconciler');\n\nvar flattenChildren = require('./flattenChildren');\n\n/**\n * Updating children of a component may trigger recursive updates. The depth is\n * used to batch recursive updates to render markup more efficiently.\n *\n * @type {number}\n * @private\n */\nvar updateDepth = 0;\n\n/**\n * Queue of update configuration objects.\n *\n * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.\n *\n * @type {array<object>}\n * @private\n */\nvar updateQueue = [];\n\n/**\n * Queue of markup to be rendered.\n *\n * @type {array<string>}\n * @private\n */\nvar markupQueue = [];\n\n/**\n * Enqueues markup to be rendered and inserted at a supplied index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction enqueueInsertMarkup(parentID, markup, toIndex) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\n markupIndex: markupQueue.push(markup) - 1,\n content: null,\n fromIndex: null,\n toIndex: toIndex\n });\n}\n\n/**\n * Enqueues moving an existing element to another index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction enqueueMove(parentID, fromIndex, toIndex) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\n markupIndex: null,\n content: null,\n fromIndex: fromIndex,\n toIndex: toIndex\n });\n}\n\n/**\n * Enqueues removing an element at an index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction enqueueRemove(parentID, fromIndex) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.REMOVE_NODE,\n markupIndex: null,\n content: null,\n fromIndex: fromIndex,\n toIndex: null\n });\n}\n\n/**\n * Enqueues setting the markup of a node.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction enqueueSetMarkup(parentID, markup) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.SET_MARKUP,\n markupIndex: null,\n content: markup,\n fromIndex: null,\n toIndex: null\n });\n}\n\n/**\n * Enqueues setting the text content.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction enqueueTextContent(parentID, textContent) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\n markupIndex: null,\n content: textContent,\n fromIndex: null,\n toIndex: null\n });\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue() {\n if (updateQueue.length) {\n ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);\n clearQueue();\n }\n}\n\n/**\n * Clears any enqueued updates.\n *\n * @private\n */\nfunction clearQueue() {\n updateQueue.length = 0;\n markupQueue.length = 0;\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n /**\n * Provides common functionality for components that must reconcile multiple\n * children. This is used by `ReactDOMComponent` to mount, update, and\n * unmount child components.\n *\n * @lends {ReactMultiChild.prototype}\n */\n Mixin: {\n\n _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n if (process.env.NODE_ENV !== 'production') {\n if (this._currentElement) {\n try {\n ReactCurrentOwner.current = this._currentElement._owner;\n return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n } finally {\n ReactCurrentOwner.current = null;\n }\n }\n }\n return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n },\n\n _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) {\n var nextChildren;\n if (process.env.NODE_ENV !== 'production') {\n if (this._currentElement) {\n try {\n ReactCurrentOwner.current = this._currentElement._owner;\n nextChildren = flattenChildren(nextNestedChildrenElements);\n } finally {\n ReactCurrentOwner.current = null;\n }\n return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n }\n }\n nextChildren = flattenChildren(nextNestedChildrenElements);\n return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n },\n\n /**\n * Generates a \"mount image\" for each of the supplied children. In the case\n * of `ReactDOMComponent`, a mount image is a string of markup.\n *\n * @param {?object} nestedChildren Nested child maps.\n * @return {array} An array of mounted representations.\n * @internal\n */\n mountChildren: function (nestedChildren, transaction, context) {\n var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n this._renderedChildren = children;\n var mountImages = [];\n var index = 0;\n for (var name in children) {\n if (children.hasOwnProperty(name)) {\n var child = children[name];\n // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n var rootID = this._rootNodeID + name;\n var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n child._mountIndex = index++;\n mountImages.push(mountImage);\n }\n }\n return mountImages;\n },\n\n /**\n * Replaces any rendered children with a text content string.\n *\n * @param {string} nextContent String of content.\n * @internal\n */\n updateTextContent: function (nextContent) {\n updateDepth++;\n var errorThrown = true;\n try {\n var prevChildren = this._renderedChildren;\n // Remove any rendered children.\n ReactChildReconciler.unmountChildren(prevChildren);\n // TODO: The setTextContent operation should be enough\n for (var name in prevChildren) {\n if (prevChildren.hasOwnProperty(name)) {\n this._unmountChild(prevChildren[name]);\n }\n }\n // Set new text content.\n this.setTextContent(nextContent);\n errorThrown = false;\n } finally {\n updateDepth--;\n if (!updateDepth) {\n if (errorThrown) {\n clearQueue();\n } else {\n processQueue();\n }\n }\n }\n },\n\n /**\n * Replaces any rendered children with a markup string.\n *\n * @param {string} nextMarkup String of markup.\n * @internal\n */\n updateMarkup: function (nextMarkup) {\n updateDepth++;\n var errorThrown = true;\n try {\n var prevChildren = this._renderedChildren;\n // Remove any rendered children.\n ReactChildReconciler.unmountChildren(prevChildren);\n for (var name in prevChildren) {\n if (prevChildren.hasOwnProperty(name)) {\n this._unmountChildByName(prevChildren[name], name);\n }\n }\n this.setMarkup(nextMarkup);\n errorThrown = false;\n } finally {\n updateDepth--;\n if (!updateDepth) {\n if (errorThrown) {\n clearQueue();\n } else {\n processQueue();\n }\n }\n }\n },\n\n /**\n * Updates the rendered children with new children.\n *\n * @param {?object} nextNestedChildrenElements Nested child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n updateChildren: function (nextNestedChildrenElements, transaction, context) {\n updateDepth++;\n var errorThrown = true;\n try {\n this._updateChildren(nextNestedChildrenElements, transaction, context);\n errorThrown = false;\n } finally {\n updateDepth--;\n if (!updateDepth) {\n if (errorThrown) {\n clearQueue();\n } else {\n processQueue();\n }\n }\n }\n },\n\n /**\n * Improve performance by isolating this hot code path from the try/catch\n * block in `updateChildren`.\n *\n * @param {?object} nextNestedChildrenElements Nested child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @final\n * @protected\n */\n _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n var prevChildren = this._renderedChildren;\n var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context);\n this._renderedChildren = nextChildren;\n if (!nextChildren && !prevChildren) {\n return;\n }\n var name;\n // `nextIndex` will increment for each child in `nextChildren`, but\n // `lastIndex` will be the last index visited in `prevChildren`.\n var lastIndex = 0;\n var nextIndex = 0;\n for (name in nextChildren) {\n if (!nextChildren.hasOwnProperty(name)) {\n continue;\n }\n var prevChild = prevChildren && prevChildren[name];\n var nextChild = nextChildren[name];\n if (prevChild === nextChild) {\n this.moveChild(prevChild, nextIndex, lastIndex);\n lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n prevChild._mountIndex = nextIndex;\n } else {\n if (prevChild) {\n // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n this._unmountChild(prevChild);\n }\n // The child must be instantiated before it's mounted.\n this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);\n }\n nextIndex++;\n }\n // Remove children that are no longer present.\n for (name in prevChildren) {\n if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n this._unmountChild(prevChildren[name]);\n }\n }\n },\n\n /**\n * Unmounts all rendered children. This should be used to clean up children\n * when this component is unmounted.\n *\n * @internal\n */\n unmountChildren: function () {\n var renderedChildren = this._renderedChildren;\n ReactChildReconciler.unmountChildren(renderedChildren);\n this._renderedChildren = null;\n },\n\n /**\n * Moves a child component to the supplied index.\n *\n * @param {ReactComponent} child Component to move.\n * @param {number} toIndex Destination index of the element.\n * @param {number} lastIndex Last index visited of the siblings of `child`.\n * @protected\n */\n moveChild: function (child, toIndex, lastIndex) {\n // If the index of `child` is less than `lastIndex`, then it needs to\n // be moved. Otherwise, we do not need to move it because a child will be\n // inserted or moved before `child`.\n if (child._mountIndex < lastIndex) {\n enqueueMove(this._rootNodeID, child._mountIndex, toIndex);\n }\n },\n\n /**\n * Creates a child component.\n *\n * @param {ReactComponent} child Component to create.\n * @param {string} mountImage Markup to insert.\n * @protected\n */\n createChild: function (child, mountImage) {\n enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex);\n },\n\n /**\n * Removes a child component.\n *\n * @param {ReactComponent} child Child to remove.\n * @protected\n */\n removeChild: function (child) {\n enqueueRemove(this._rootNodeID, child._mountIndex);\n },\n\n /**\n * Sets this text content string.\n *\n * @param {string} textContent Text content to set.\n * @protected\n */\n setTextContent: function (textContent) {\n enqueueTextContent(this._rootNodeID, textContent);\n },\n\n /**\n * Sets this markup string.\n *\n * @param {string} markup Markup to set.\n * @protected\n */\n setMarkup: function (markup) {\n enqueueSetMarkup(this._rootNodeID, markup);\n },\n\n /**\n * Mounts a child with the supplied name.\n *\n * NOTE: This is part of `updateChildren` and is here for readability.\n *\n * @param {ReactComponent} child Component to mount.\n * @param {string} name Name of the child.\n * @param {number} index Index at which to insert the child.\n * @param {ReactReconcileTransaction} transaction\n * @private\n */\n _mountChildByNameAtIndex: function (child, name, index, transaction, context) {\n // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n var rootID = this._rootNodeID + name;\n var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n child._mountIndex = index;\n this.createChild(child, mountImage);\n },\n\n /**\n * Unmounts a rendered child.\n *\n * NOTE: This is part of `updateChildren` and is here for readability.\n *\n * @param {ReactComponent} child Component to unmount.\n * @private\n */\n _unmountChild: function (child) {\n this.removeChild(child);\n child._mountIndex = null;\n }\n\n }\n\n};\n\nmodule.exports = ReactMultiChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChild.js\n ** module id = 113\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildReconciler\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactReconciler = require('./ReactReconciler');\n\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nfunction instantiateChild(childInstances, child, name) {\n // We found a component instance.\n var keyUnique = childInstances[name] === undefined;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n }\n if (child != null && keyUnique) {\n childInstances[name] = instantiateReactComponent(child, null);\n }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n /**\n * Generates a \"mount image\" for each of the supplied children. In the case\n * of `ReactDOMComponent`, a mount image is a string of markup.\n *\n * @param {?object} nestedChildNodes Nested child maps.\n * @return {?object} A set of child instances.\n * @internal\n */\n instantiateChildren: function (nestedChildNodes, transaction, context) {\n if (nestedChildNodes == null) {\n return null;\n }\n var childInstances = {};\n traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n return childInstances;\n },\n\n /**\n * Updates the rendered children and returns a new set of children.\n *\n * @param {?object} prevChildren Previously initialized set of children.\n * @param {?object} nextChildren Flat child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @return {?object} A new set of child instances.\n * @internal\n */\n updateChildren: function (prevChildren, nextChildren, transaction, context) {\n // We currently don't have a way to track moves here but if we use iterators\n // instead of for..in we can zip the iterators and check if an item has\n // moved.\n // TODO: If nothing has changed, return the prevChildren object so that we\n // can quickly bailout if nothing has changed.\n if (!nextChildren && !prevChildren) {\n return null;\n }\n var name;\n for (name in nextChildren) {\n if (!nextChildren.hasOwnProperty(name)) {\n continue;\n }\n var prevChild = prevChildren && prevChildren[name];\n var prevElement = prevChild && prevChild._currentElement;\n var nextElement = nextChildren[name];\n if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n nextChildren[name] = prevChild;\n } else {\n if (prevChild) {\n ReactReconciler.unmountComponent(prevChild, name);\n }\n // The child must be instantiated before it's mounted.\n var nextChildInstance = instantiateReactComponent(nextElement, null);\n nextChildren[name] = nextChildInstance;\n }\n }\n // Unmount children that are no longer present.\n for (name in prevChildren) {\n if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n ReactReconciler.unmountComponent(prevChildren[name]);\n }\n }\n return nextChildren;\n },\n\n /**\n * Unmounts all rendered children. This should be used to clean up children\n * when this component is unmounted.\n *\n * @param {?object} renderedChildren Previously initialized set of children.\n * @internal\n */\n unmountChildren: function (renderedChildren) {\n for (var name in renderedChildren) {\n if (renderedChildren.hasOwnProperty(name)) {\n var renderedChild = renderedChildren[name];\n ReactReconciler.unmountComponent(renderedChild);\n }\n }\n }\n\n};\n\nmodule.exports = ReactChildReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildReconciler.js\n ** module id = 114\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule flattenChildren\n */\n\n'use strict';\n\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\n // We found a component instance.\n var result = traverseContext;\n var keyUnique = result[name] === undefined;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n }\n if (keyUnique && child != null) {\n result[name] = child;\n }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children) {\n if (children == null) {\n return children;\n }\n var result = {};\n traverseAllChildren(children, flattenSingleChildIntoContext, result);\n return result;\n}\n\nmodule.exports = flattenChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/flattenChildren.js\n ** module id = 115\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shallowEqual\n * @typechecks\n * \n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n var bHasOwnProperty = hasOwnProperty.bind(objB);\n for (var i = 0; i < keysA.length; i++) {\n if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/shallowEqual.js\n ** module id = 116\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventListener\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventListener = require('fbjs/lib/EventListener');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar PooledClass = require('./PooledClass');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar getEventTarget = require('./getEventTarget');\nvar getUnboundedScrollPosition = require('fbjs/lib/getUnboundedScrollPosition');\n\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * Finds the parent React component of `node`.\n *\n * @param {*} node\n * @return {?DOMEventTarget} Parent container, or `null` if the specified node\n * is not nested.\n */\nfunction findParent(node) {\n // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n var nodeID = ReactMount.getID(node);\n var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n var container = ReactMount.findReactContainerForID(rootID);\n var parent = ReactMount.getFirstReactDOM(container);\n return parent;\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n this.topLevelType = topLevelType;\n this.nativeEvent = nativeEvent;\n this.ancestors = [];\n}\nassign(TopLevelCallbackBookKeeping.prototype, {\n destructor: function () {\n this.topLevelType = null;\n this.nativeEvent = null;\n this.ancestors.length = 0;\n }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n // TODO: Re-enable event.path handling\n //\n // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) {\n // // New browsers have a path attribute on native events\n // handleTopLevelWithPath(bookKeeping);\n // } else {\n // // Legacy browsers don't have a path attribute on native events\n // handleTopLevelWithoutPath(bookKeeping);\n // }\n\n void handleTopLevelWithPath; // temporarily unused\n handleTopLevelWithoutPath(bookKeeping);\n}\n\n// Legacy browsers don't have a path attribute on native events\nfunction handleTopLevelWithoutPath(bookKeeping) {\n var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;\n\n // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n var ancestor = topLevelTarget;\n while (ancestor) {\n bookKeeping.ancestors.push(ancestor);\n ancestor = findParent(ancestor);\n }\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n topLevelTarget = bookKeeping.ancestors[i];\n var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\n// New browsers have a path attribute on native events\nfunction handleTopLevelWithPath(bookKeeping) {\n var path = bookKeeping.nativeEvent.path;\n var currentNativeTarget = path[0];\n var eventsFired = 0;\n for (var i = 0; i < path.length; i++) {\n var currentPathElement = path[i];\n if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) {\n currentNativeTarget = path[i + 1];\n }\n // TODO: slow\n var reactParent = ReactMount.getFirstReactDOM(currentPathElement);\n if (reactParent === currentPathElement) {\n var currentPathElementID = ReactMount.getID(currentPathElement);\n var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID);\n bookKeeping.ancestors.push(currentPathElement);\n\n var topLevelTargetID = ReactMount.getID(currentPathElement) || '';\n eventsFired++;\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget);\n\n // Jump to the root of this React render tree\n while (currentPathElementID !== newRootID) {\n i++;\n currentPathElement = path[i];\n currentPathElementID = ReactMount.getID(currentPathElement);\n }\n }\n }\n if (eventsFired === 0) {\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\nfunction scrollValueMonitor(cb) {\n var scrollPosition = getUnboundedScrollPosition(window);\n cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n _enabled: true,\n _handleTopLevel: null,\n\n WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n setHandleTopLevel: function (handleTopLevel) {\n ReactEventListener._handleTopLevel = handleTopLevel;\n },\n\n setEnabled: function (enabled) {\n ReactEventListener._enabled = !!enabled;\n },\n\n isEnabled: function () {\n return ReactEventListener._enabled;\n },\n\n /**\n * Traps top-level events by using event bubbling.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} handle Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\n trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n var element = handle;\n if (!element) {\n return null;\n }\n return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n },\n\n /**\n * Traps a top-level event by using event capturing.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} handle Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\n trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n var element = handle;\n if (!element) {\n return null;\n }\n return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n },\n\n monitorScrollValue: function (refresh) {\n var callback = scrollValueMonitor.bind(null, refresh);\n EventListener.listen(window, 'scroll', callback);\n },\n\n dispatchEvent: function (topLevelType, nativeEvent) {\n if (!ReactEventListener._enabled) {\n return;\n }\n\n var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n } finally {\n TopLevelCallbackBookKeeping.release(bookKeeping);\n }\n }\n};\n\nmodule.exports = ReactEventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventListener.js\n ** module id = 117\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @providesModule EventListener\n * @typechecks\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function (target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function () {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function () {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function (target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function () {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function () {}\n};\n\nmodule.exports = EventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/EventListener.js\n ** module id = 118\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getUnboundedScrollPosition\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\nfunction getUnboundedScrollPosition(scrollable) {\n if (scrollable === window) {\n return {\n x: window.pageXOffset || document.documentElement.scrollLeft,\n y: window.pageYOffset || document.documentElement.scrollTop\n };\n }\n return {\n x: scrollable.scrollLeft,\n y: scrollable.scrollTop\n };\n}\n\nmodule.exports = getUnboundedScrollPosition;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getUnboundedScrollPosition.js\n ** module id = 119\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInjection\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar EventPluginHub = require('./EventPluginHub');\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactClass = require('./ReactClass');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactNativeComponent = require('./ReactNativeComponent');\nvar ReactPerf = require('./ReactPerf');\nvar ReactRootIndex = require('./ReactRootIndex');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar ReactInjection = {\n Component: ReactComponentEnvironment.injection,\n Class: ReactClass.injection,\n DOMProperty: DOMProperty.injection,\n EmptyComponent: ReactEmptyComponent.injection,\n EventPluginHub: EventPluginHub.injection,\n EventEmitter: ReactBrowserEventEmitter.injection,\n NativeComponent: ReactNativeComponent.injection,\n Perf: ReactPerf.injection,\n RootIndex: ReactRootIndex.injection,\n Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInjection.js\n ** module id = 120\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar keyMirror = require('fbjs/lib/keyMirror');\nvar keyOf = require('fbjs/lib/keyOf');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n /**\n * These methods may be defined only once by the class specification or mixin.\n */\n DEFINE_ONCE: null,\n /**\n * These methods may be defined by both the class specification and mixins.\n * Subsequent definitions will be chained. These methods must return void.\n */\n DEFINE_MANY: null,\n /**\n * These methods are overriding the base class.\n */\n OVERRIDE_BASE: null,\n /**\n * These methods are similar to DEFINE_MANY, except we assume they return\n * objects. We try to merge the keys of the return values of all the mixed in\n * functions. If there is a key conflict we throw.\n */\n DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\nvar warnedSetProps = false;\nfunction warnSetProps() {\n if (!warnedSetProps) {\n warnedSetProps = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined;\n }\n}\n\n/**\n * Composite components are higher-level components that compose other composite\n * or native components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: SpecPolicy.DEFINE_MANY,\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: SpecPolicy.DEFINE_MANY,\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @nosideeffects\n * @required\n */\n render: SpecPolicy.DEFINE_ONCE,\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n displayName: function (Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function (Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function (Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n }\n Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes);\n },\n contextTypes: function (Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n }\n Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes);\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function (Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function (Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n }\n Constructor.propTypes = assign({}, Constructor.propTypes, propTypes);\n },\n statics: function (Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an invariant so components\n // don't show up in prod but not in __DEV__\n process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined;\n }\n }\n}\n\nfunction validateMethodOverride(proto, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined;\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (proto.hasOwnProperty(name)) {\n !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined;\n }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classses.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n return;\n }\n\n !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n\n var proto = Constructor.prototype;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n validateMethodOverride(proto, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isAlreadyDefined = proto.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n if (shouldAutoBind) {\n if (!proto.__reactAutoBindMap) {\n proto.__reactAutoBindMap = {};\n }\n proto.__reactAutoBindMap[name] = property;\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined;\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = (name in RESERVED_SPEC_KEYS);\n !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined;\n\n var isInherited = (name in Constructor);\n !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined;\n Constructor[name] = property;\n }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined;\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined;\n one[key] = two[key];\n }\n }\n return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n /* eslint-disable block-scoped-var, no-undef */\n boundMethod.bind = function (newThis) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined;\n } else if (!args.length) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined;\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n /* eslint-enable */\n };\n }\n return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n for (var autoBindKey in component.__reactAutoBindMap) {\n if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {\n var method = component.__reactAutoBindMap[autoBindKey];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function (newState, callback) {\n this.updater.enqueueReplaceState(this, newState);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function () {\n return this.updater.isMounted(this);\n },\n\n /**\n * Sets a subset of the props.\n *\n * @param {object} partialProps Subset of the next props.\n * @param {?function} callback Called after props are updated.\n * @final\n * @public\n * @deprecated\n */\n setProps: function (partialProps, callback) {\n if (process.env.NODE_ENV !== 'production') {\n warnSetProps();\n }\n this.updater.enqueueSetProps(this, partialProps);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n },\n\n /**\n * Replace all the props.\n *\n * @param {object} newProps Subset of the next props.\n * @param {?function} callback Called after props are updated.\n * @final\n * @public\n * @deprecated\n */\n replaceProps: function (newProps, callback) {\n if (process.env.NODE_ENV !== 'production') {\n warnSetProps();\n }\n this.updater.enqueueReplaceProps(this, newProps);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n }\n};\n\nvar ReactClassComponent = function () {};\nassign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n /**\n * Creates a composite component class given a class specification.\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n createClass: function (spec) {\n var Constructor = function (props, context, updater) {\n // This constructor is overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined;\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindMap) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n this.state = initialState;\n };\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, spec);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined;\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n },\n\n injection: {\n injectMixin: function (mixin) {\n injectedMixins.push(mixin);\n }\n }\n\n};\n\nmodule.exports = ReactClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactClass.js\n ** module id = 121\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined;\n }\n this.updater.enqueueSetState(this, partialState);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n var deprecatedAPIs = {\n getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'],\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceProps: ['replaceProps', 'Instead, call render again at the top level.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],\n setProps: ['setProps', 'Instead, call render again at the top level.']\n };\n var defineDeprecationWarning = function (methodName, info) {\n if (canDefineProperty) {\n Object.defineProperty(ReactComponent.prototype, methodName, {\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined;\n return undefined;\n }\n });\n }\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nmodule.exports = ReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponent.js\n ** module id = 122\n ** module chunks = 0 1\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnTDZ(publicInstance, callerName) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {},\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n warnTDZ(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n warnTDZ(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n warnTDZ(publicInstance, 'setState');\n },\n\n /**\n * Sets a subset of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialProps Subset of the next props.\n * @internal\n */\n enqueueSetProps: function (publicInstance, partialProps) {\n warnTDZ(publicInstance, 'setProps');\n },\n\n /**\n * Replaces all of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} props New props.\n * @internal\n */\n enqueueReplaceProps: function (publicInstance, props) {\n warnTDZ(publicInstance, 'replaceProps');\n }\n\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNoopUpdateQueue.js\n ** module id = 123\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconcileTransaction\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n /**\n * @return {Selection} Selection information.\n */\n initialize: ReactInputSelection.getSelectionInformation,\n /**\n * @param {Selection} sel Selection information returned from `initialize`.\n */\n close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n /**\n * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n * the reconciliation.\n */\n initialize: function () {\n var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n ReactBrowserEventEmitter.setEnabled(false);\n return currentlyEnabled;\n },\n\n /**\n * @param {boolean} previouslyEnabled Enabled status of\n * `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n * restores the previous value.\n */\n close: function (previouslyEnabled) {\n ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n /**\n * Initializes the internal `onDOMReady` queue.\n */\n initialize: function () {\n this.reactMountReady.reset();\n },\n\n /**\n * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n */\n close: function () {\n this.reactMountReady.notifyAll();\n }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n * modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n * track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(forceHTML) {\n this.reinitializeTransaction();\n // Only server-side rendering really needs this option (see\n // `ReactServerRendering`), but server-side uses\n // `ReactServerRenderingTransaction` instead. This option is here so that it's\n // accessible and defaults to false when `ReactDOMComponent` and\n // `ReactTextComponent` checks it in `mountComponent`.`\n this.renderToStaticMarkup = false;\n this.reactMountReady = CallbackQueue.getPooled(null);\n this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement;\n}\n\nvar Mixin = {\n /**\n * @see Transaction\n * @abstract\n * @final\n * @return {array<object>} List of operation wrap procedures.\n * TODO: convert to array<TransactionWrapper>\n */\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n /**\n * @return {object} The queue to collect `onDOMReady` callbacks with.\n */\n getReactMountReady: function () {\n return this.reactMountReady;\n },\n\n /**\n * `PooledClass` looks for this, and will invoke this before allowing this\n * instance to be reused.\n */\n destructor: function () {\n CallbackQueue.release(this.reactMountReady);\n this.reactMountReady = null;\n }\n};\n\nassign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconcileTransaction.js\n ** module id = 124\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = require('./ReactDOMSelection');\n\nvar containsNode = require('fbjs/lib/containsNode');\nvar focusNode = require('fbjs/lib/focusNode');\nvar getActiveElement = require('fbjs/lib/getActiveElement');\n\nfunction isInDocument(node) {\n return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n hasSelectionCapabilities: function (elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n },\n\n getSelectionInformation: function () {\n var focusedElem = getActiveElement();\n return {\n focusedElem: focusedElem,\n selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n };\n },\n\n /**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n restoreSelection: function (priorSelectionInformation) {\n var curFocusedElem = getActiveElement();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n }\n focusNode(priorFocusedElem);\n }\n },\n\n /**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n getSelection: function (input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n // IE8 input.\n var range = document.selection.createRange();\n // There can only be one selection per document in IE, so it must\n // be in our element.\n if (range.parentElement() === input) {\n selection = {\n start: -range.moveStart('character', -input.value.length),\n end: -range.moveEnd('character', -input.value.length)\n };\n }\n } else {\n // Content editable or old IE textarea.\n selection = ReactDOMSelection.getOffsets(input);\n }\n\n return selection || { start: 0, end: 0 };\n },\n\n /**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n setSelection: function (input, offsets) {\n var start = offsets.start;\n var end = offsets.end;\n if (typeof end === 'undefined') {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n var range = input.createTextRange();\n range.collapse(true);\n range.moveStart('character', start);\n range.moveEnd('character', end - start);\n range.select();\n } else {\n ReactDOMSelection.setOffsets(input, offsets);\n }\n }\n};\n\nmodule.exports = ReactInputSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInputSelection.js\n ** module id = 125\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelection\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar getNodeForCharacterOffset = require('./getNodeForCharacterOffset');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n var selection = document.selection;\n var selectedRange = selection.createRange();\n var selectedLength = selectedRange.text.length;\n\n // Duplicate selection so we can move range without breaking user selection.\n var fromStart = selectedRange.duplicate();\n fromStart.moveToElementText(node);\n fromStart.setEndPoint('EndToStart', selectedRange);\n\n var startOffset = fromStart.text.length;\n var endOffset = startOffset + selectedLength;\n\n return {\n start: startOffset,\n end: endOffset\n };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n var selection = window.getSelection && window.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode;\n var anchorOffset = selection.anchorOffset;\n var focusNode = selection.focusNode;\n var focusOffset = selection.focusOffset;\n\n var currentRange = selection.getRangeAt(0);\n\n // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n // divs do not seem to expose properties, triggering a \"Permission denied\n // error\" if any of its properties are accessed. The only seemingly possible\n // way to avoid erroring is to access a property that typically works for\n // non-anonymous divs and catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n try {\n /* eslint-disable no-unused-expressions */\n currentRange.startContainer.nodeType;\n currentRange.endContainer.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n // If the node and offset values are the same, the selection is collapsed.\n // `Selection.isCollapsed` is available natively, but IE sometimes gets\n // this value wrong.\n var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n var tempRange = currentRange.cloneRange();\n tempRange.selectNodeContents(node);\n tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n var end = start + rangeLength;\n\n // Detect whether the selection is backward.\n var detectionRange = document.createRange();\n detectionRange.setStart(anchorNode, anchorOffset);\n detectionRange.setEnd(focusNode, focusOffset);\n var isBackward = detectionRange.collapsed;\n\n return {\n start: isBackward ? end : start,\n end: isBackward ? start : end\n };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n var range = document.selection.createRange().duplicate();\n var start, end;\n\n if (typeof offsets.end === 'undefined') {\n start = offsets.start;\n end = start;\n } else if (offsets.start > offsets.end) {\n start = offsets.end;\n end = offsets.start;\n } else {\n start = offsets.start;\n end = offsets.end;\n }\n\n range.moveToElementText(node);\n range.moveStart('character', start);\n range.setEndPoint('EndToStart', range);\n range.moveEnd('character', end - start);\n range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n if (!window.getSelection) {\n return;\n }\n\n var selection = window.getSelection();\n var length = node[getTextContentAccessor()].length;\n var start = Math.min(offsets.start, length);\n var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);\n\n // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n var range = document.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n /**\n * @param {DOMElement} node\n */\n getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n /**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelection.js\n ** module id = 126\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNodeForCharacterOffset\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === 3) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\nmodule.exports = getNodeForCharacterOffset;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getNodeForCharacterOffset.js\n ** module id = 127\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getActiveElement\n * @typechecks\n */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not yet defined.\n */\n'use strict';\n\nfunction getActiveElement() /*?DOMElement*/{\n if (typeof document === 'undefined') {\n return null;\n }\n\n try {\n return document.activeElement || document.body;\n } catch (e) {\n return document.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getActiveElement.js\n ** module id = 128\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SelectEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getActiveElement = require('fbjs/lib/getActiveElement');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n select: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSelect: null }),\n captured: keyOf({ onSelectCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]\n }\n};\n\nvar activeElement = null;\nvar activeElementID = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events.\nvar hasListener = false;\nvar ON_SELECT_KEY = keyOf({ onSelect: null });\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else if (window.getSelection) {\n var selection = window.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n } else if (document.selection) {\n var range = document.selection.createRange();\n return {\n parentElement: range.parentElement(),\n text: range.text,\n top: range.boundingTop,\n left: range.boundingLeft\n };\n }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n return null;\n }\n\n // Only fire when selection has actually changed.\n var currentSelection = getSelection(activeElement);\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n\n var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget);\n\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement;\n\n EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n return syntheticEvent;\n }\n\n return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n if (!hasListener) {\n return null;\n }\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case topLevelTypes.topFocus:\n if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {\n activeElement = topLevelTarget;\n activeElementID = topLevelTargetID;\n lastSelection = null;\n }\n break;\n case topLevelTypes.topBlur:\n activeElement = null;\n activeElementID = null;\n lastSelection = null;\n break;\n\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n case topLevelTypes.topMouseDown:\n mouseDown = true;\n break;\n case topLevelTypes.topContextMenu:\n case topLevelTypes.topMouseUp:\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n case topLevelTypes.topSelectionChange:\n if (skipSelectionChangeEvent) {\n break;\n }\n // falls through\n case topLevelTypes.topKeyDown:\n case topLevelTypes.topKeyUp:\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n },\n\n didPutListener: function (id, registrationName, listener) {\n if (registrationName === ON_SELECT_KEY) {\n hasListener = true;\n }\n }\n};\n\nmodule.exports = SelectEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SelectEventPlugin.js\n ** module id = 129\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ServerReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Size of the reactRoot ID space. We generate random numbers for React root\n * IDs and if there's a collision the events and DOM update system will\n * get confused. In the future we need a way to generate GUIDs but for\n * now this will work on a smaller scale.\n */\nvar GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);\n\nvar ServerReactRootIndex = {\n createReactRootIndex: function () {\n return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);\n }\n};\n\nmodule.exports = ServerReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ServerReactRootIndex.js\n ** module id = 130\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SimpleEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventListener = require('fbjs/lib/EventListener');\nvar EventPropagators = require('./EventPropagators');\nvar ReactMount = require('./ReactMount');\nvar SyntheticClipboardEvent = require('./SyntheticClipboardEvent');\nvar SyntheticEvent = require('./SyntheticEvent');\nvar SyntheticFocusEvent = require('./SyntheticFocusEvent');\nvar SyntheticKeyboardEvent = require('./SyntheticKeyboardEvent');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\nvar SyntheticDragEvent = require('./SyntheticDragEvent');\nvar SyntheticTouchEvent = require('./SyntheticTouchEvent');\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar SyntheticWheelEvent = require('./SyntheticWheelEvent');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getEventCharCode = require('./getEventCharCode');\nvar invariant = require('fbjs/lib/invariant');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n abort: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onAbort: true }),\n captured: keyOf({ onAbortCapture: true })\n }\n },\n blur: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onBlur: true }),\n captured: keyOf({ onBlurCapture: true })\n }\n },\n canPlay: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCanPlay: true }),\n captured: keyOf({ onCanPlayCapture: true })\n }\n },\n canPlayThrough: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCanPlayThrough: true }),\n captured: keyOf({ onCanPlayThroughCapture: true })\n }\n },\n click: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onClick: true }),\n captured: keyOf({ onClickCapture: true })\n }\n },\n contextMenu: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onContextMenu: true }),\n captured: keyOf({ onContextMenuCapture: true })\n }\n },\n copy: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCopy: true }),\n captured: keyOf({ onCopyCapture: true })\n }\n },\n cut: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCut: true }),\n captured: keyOf({ onCutCapture: true })\n }\n },\n doubleClick: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDoubleClick: true }),\n captured: keyOf({ onDoubleClickCapture: true })\n }\n },\n drag: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDrag: true }),\n captured: keyOf({ onDragCapture: true })\n }\n },\n dragEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragEnd: true }),\n captured: keyOf({ onDragEndCapture: true })\n }\n },\n dragEnter: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragEnter: true }),\n captured: keyOf({ onDragEnterCapture: true })\n }\n },\n dragExit: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragExit: true }),\n captured: keyOf({ onDragExitCapture: true })\n }\n },\n dragLeave: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragLeave: true }),\n captured: keyOf({ onDragLeaveCapture: true })\n }\n },\n dragOver: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragOver: true }),\n captured: keyOf({ onDragOverCapture: true })\n }\n },\n dragStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragStart: true }),\n captured: keyOf({ onDragStartCapture: true })\n }\n },\n drop: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDrop: true }),\n captured: keyOf({ onDropCapture: true })\n }\n },\n durationChange: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDurationChange: true }),\n captured: keyOf({ onDurationChangeCapture: true })\n }\n },\n emptied: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onEmptied: true }),\n captured: keyOf({ onEmptiedCapture: true })\n }\n },\n encrypted: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onEncrypted: true }),\n captured: keyOf({ onEncryptedCapture: true })\n }\n },\n ended: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onEnded: true }),\n captured: keyOf({ onEndedCapture: true })\n }\n },\n error: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onError: true }),\n captured: keyOf({ onErrorCapture: true })\n }\n },\n focus: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onFocus: true }),\n captured: keyOf({ onFocusCapture: true })\n }\n },\n input: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onInput: true }),\n captured: keyOf({ onInputCapture: true })\n }\n },\n keyDown: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onKeyDown: true }),\n captured: keyOf({ onKeyDownCapture: true })\n }\n },\n keyPress: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onKeyPress: true }),\n captured: keyOf({ onKeyPressCapture: true })\n }\n },\n keyUp: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onKeyUp: true }),\n captured: keyOf({ onKeyUpCapture: true })\n }\n },\n load: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoad: true }),\n captured: keyOf({ onLoadCapture: true })\n }\n },\n loadedData: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoadedData: true }),\n captured: keyOf({ onLoadedDataCapture: true })\n }\n },\n loadedMetadata: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoadedMetadata: true }),\n captured: keyOf({ onLoadedMetadataCapture: true })\n }\n },\n loadStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoadStart: true }),\n captured: keyOf({ onLoadStartCapture: true })\n }\n },\n // Note: We do not allow listening to mouseOver events. Instead, use the\n // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\n mouseDown: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseDown: true }),\n captured: keyOf({ onMouseDownCapture: true })\n }\n },\n mouseMove: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseMove: true }),\n captured: keyOf({ onMouseMoveCapture: true })\n }\n },\n mouseOut: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseOut: true }),\n captured: keyOf({ onMouseOutCapture: true })\n }\n },\n mouseOver: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseOver: true }),\n captured: keyOf({ onMouseOverCapture: true })\n }\n },\n mouseUp: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseUp: true }),\n captured: keyOf({ onMouseUpCapture: true })\n }\n },\n paste: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPaste: true }),\n captured: keyOf({ onPasteCapture: true })\n }\n },\n pause: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPause: true }),\n captured: keyOf({ onPauseCapture: true })\n }\n },\n play: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPlay: true }),\n captured: keyOf({ onPlayCapture: true })\n }\n },\n playing: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPlaying: true }),\n captured: keyOf({ onPlayingCapture: true })\n }\n },\n progress: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onProgress: true }),\n captured: keyOf({ onProgressCapture: true })\n }\n },\n rateChange: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onRateChange: true }),\n captured: keyOf({ onRateChangeCapture: true })\n }\n },\n reset: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onReset: true }),\n captured: keyOf({ onResetCapture: true })\n }\n },\n scroll: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onScroll: true }),\n captured: keyOf({ onScrollCapture: true })\n }\n },\n seeked: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSeeked: true }),\n captured: keyOf({ onSeekedCapture: true })\n }\n },\n seeking: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSeeking: true }),\n captured: keyOf({ onSeekingCapture: true })\n }\n },\n stalled: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onStalled: true }),\n captured: keyOf({ onStalledCapture: true })\n }\n },\n submit: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSubmit: true }),\n captured: keyOf({ onSubmitCapture: true })\n }\n },\n suspend: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSuspend: true }),\n captured: keyOf({ onSuspendCapture: true })\n }\n },\n timeUpdate: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTimeUpdate: true }),\n captured: keyOf({ onTimeUpdateCapture: true })\n }\n },\n touchCancel: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchCancel: true }),\n captured: keyOf({ onTouchCancelCapture: true })\n }\n },\n touchEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchEnd: true }),\n captured: keyOf({ onTouchEndCapture: true })\n }\n },\n touchMove: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchMove: true }),\n captured: keyOf({ onTouchMoveCapture: true })\n }\n },\n touchStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchStart: true }),\n captured: keyOf({ onTouchStartCapture: true })\n }\n },\n volumeChange: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onVolumeChange: true }),\n captured: keyOf({ onVolumeChangeCapture: true })\n }\n },\n waiting: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onWaiting: true }),\n captured: keyOf({ onWaitingCapture: true })\n }\n },\n wheel: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onWheel: true }),\n captured: keyOf({ onWheelCapture: true })\n }\n }\n};\n\nvar topLevelEventsToDispatchConfig = {\n topAbort: eventTypes.abort,\n topBlur: eventTypes.blur,\n topCanPlay: eventTypes.canPlay,\n topCanPlayThrough: eventTypes.canPlayThrough,\n topClick: eventTypes.click,\n topContextMenu: eventTypes.contextMenu,\n topCopy: eventTypes.copy,\n topCut: eventTypes.cut,\n topDoubleClick: eventTypes.doubleClick,\n topDrag: eventTypes.drag,\n topDragEnd: eventTypes.dragEnd,\n topDragEnter: eventTypes.dragEnter,\n topDragExit: eventTypes.dragExit,\n topDragLeave: eventTypes.dragLeave,\n topDragOver: eventTypes.dragOver,\n topDragStart: eventTypes.dragStart,\n topDrop: eventTypes.drop,\n topDurationChange: eventTypes.durationChange,\n topEmptied: eventTypes.emptied,\n topEncrypted: eventTypes.encrypted,\n topEnded: eventTypes.ended,\n topError: eventTypes.error,\n topFocus: eventTypes.focus,\n topInput: eventTypes.input,\n topKeyDown: eventTypes.keyDown,\n topKeyPress: eventTypes.keyPress,\n topKeyUp: eventTypes.keyUp,\n topLoad: eventTypes.load,\n topLoadedData: eventTypes.loadedData,\n topLoadedMetadata: eventTypes.loadedMetadata,\n topLoadStart: eventTypes.loadStart,\n topMouseDown: eventTypes.mouseDown,\n topMouseMove: eventTypes.mouseMove,\n topMouseOut: eventTypes.mouseOut,\n topMouseOver: eventTypes.mouseOver,\n topMouseUp: eventTypes.mouseUp,\n topPaste: eventTypes.paste,\n topPause: eventTypes.pause,\n topPlay: eventTypes.play,\n topPlaying: eventTypes.playing,\n topProgress: eventTypes.progress,\n topRateChange: eventTypes.rateChange,\n topReset: eventTypes.reset,\n topScroll: eventTypes.scroll,\n topSeeked: eventTypes.seeked,\n topSeeking: eventTypes.seeking,\n topStalled: eventTypes.stalled,\n topSubmit: eventTypes.submit,\n topSuspend: eventTypes.suspend,\n topTimeUpdate: eventTypes.timeUpdate,\n topTouchCancel: eventTypes.touchCancel,\n topTouchEnd: eventTypes.touchEnd,\n topTouchMove: eventTypes.touchMove,\n topTouchStart: eventTypes.touchStart,\n topVolumeChange: eventTypes.volumeChange,\n topWaiting: eventTypes.waiting,\n topWheel: eventTypes.wheel\n};\n\nfor (var type in topLevelEventsToDispatchConfig) {\n topLevelEventsToDispatchConfig[type].dependencies = [type];\n}\n\nvar ON_CLICK_KEY = keyOf({ onClick: null });\nvar onClickListeners = {};\n\nvar SimpleEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n if (!dispatchConfig) {\n return null;\n }\n var EventConstructor;\n switch (topLevelType) {\n case topLevelTypes.topAbort:\n case topLevelTypes.topCanPlay:\n case topLevelTypes.topCanPlayThrough:\n case topLevelTypes.topDurationChange:\n case topLevelTypes.topEmptied:\n case topLevelTypes.topEncrypted:\n case topLevelTypes.topEnded:\n case topLevelTypes.topError:\n case topLevelTypes.topInput:\n case topLevelTypes.topLoad:\n case topLevelTypes.topLoadedData:\n case topLevelTypes.topLoadedMetadata:\n case topLevelTypes.topLoadStart:\n case topLevelTypes.topPause:\n case topLevelTypes.topPlay:\n case topLevelTypes.topPlaying:\n case topLevelTypes.topProgress:\n case topLevelTypes.topRateChange:\n case topLevelTypes.topReset:\n case topLevelTypes.topSeeked:\n case topLevelTypes.topSeeking:\n case topLevelTypes.topStalled:\n case topLevelTypes.topSubmit:\n case topLevelTypes.topSuspend:\n case topLevelTypes.topTimeUpdate:\n case topLevelTypes.topVolumeChange:\n case topLevelTypes.topWaiting:\n // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n EventConstructor = SyntheticEvent;\n break;\n case topLevelTypes.topKeyPress:\n // FireFox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n /* falls through */\n case topLevelTypes.topKeyDown:\n case topLevelTypes.topKeyUp:\n EventConstructor = SyntheticKeyboardEvent;\n break;\n case topLevelTypes.topBlur:\n case topLevelTypes.topFocus:\n EventConstructor = SyntheticFocusEvent;\n break;\n case topLevelTypes.topClick:\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n /* falls through */\n case topLevelTypes.topContextMenu:\n case topLevelTypes.topDoubleClick:\n case topLevelTypes.topMouseDown:\n case topLevelTypes.topMouseMove:\n case topLevelTypes.topMouseOut:\n case topLevelTypes.topMouseOver:\n case topLevelTypes.topMouseUp:\n EventConstructor = SyntheticMouseEvent;\n break;\n case topLevelTypes.topDrag:\n case topLevelTypes.topDragEnd:\n case topLevelTypes.topDragEnter:\n case topLevelTypes.topDragExit:\n case topLevelTypes.topDragLeave:\n case topLevelTypes.topDragOver:\n case topLevelTypes.topDragStart:\n case topLevelTypes.topDrop:\n EventConstructor = SyntheticDragEvent;\n break;\n case topLevelTypes.topTouchCancel:\n case topLevelTypes.topTouchEnd:\n case topLevelTypes.topTouchMove:\n case topLevelTypes.topTouchStart:\n EventConstructor = SyntheticTouchEvent;\n break;\n case topLevelTypes.topScroll:\n EventConstructor = SyntheticUIEvent;\n break;\n case topLevelTypes.topWheel:\n EventConstructor = SyntheticWheelEvent;\n break;\n case topLevelTypes.topCopy:\n case topLevelTypes.topCut:\n case topLevelTypes.topPaste:\n EventConstructor = SyntheticClipboardEvent;\n break;\n }\n !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined;\n var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget);\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n },\n\n didPutListener: function (id, registrationName, listener) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n if (registrationName === ON_CLICK_KEY) {\n var node = ReactMount.getNode(id);\n if (!onClickListeners[id]) {\n onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);\n }\n }\n },\n\n willDeleteListener: function (id, registrationName) {\n if (registrationName === ON_CLICK_KEY) {\n onClickListeners[id].remove();\n delete onClickListeners[id];\n }\n }\n\n};\n\nmodule.exports = SimpleEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SimpleEventPlugin.js\n ** module id = 131\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticClipboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticClipboardEvent.js\n ** module id = 132\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticFocusEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticFocusEvent.js\n ** module id = 133\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticKeyboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventCharCode = require('./getEventCharCode');\nvar getEventKey = require('./getEventKey');\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticKeyboardEvent.js\n ** module id = 134\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode;\n\n // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n }\n\n // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\nmodule.exports = getEventCharCode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventCharCode.js\n ** module id = 135\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventKey\n * @typechecks static-only\n */\n\n'use strict';\n\nvar getEventCharCode = require('./getEventCharCode');\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n 'Esc': 'Escape',\n 'Spacebar': ' ',\n 'Left': 'ArrowLeft',\n 'Up': 'ArrowUp',\n 'Right': 'ArrowRight',\n 'Down': 'ArrowDown',\n 'Del': 'Delete',\n 'Win': 'OS',\n 'Menu': 'ContextMenu',\n 'Apps': 'ContextMenu',\n 'Scroll': 'ScrollLock',\n 'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n 8: 'Backspace',\n 9: 'Tab',\n 12: 'Clear',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Control',\n 18: 'Alt',\n 19: 'Pause',\n 20: 'CapsLock',\n 27: 'Escape',\n 32: ' ',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n 144: 'NumLock',\n 145: 'ScrollLock',\n 224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (key !== 'Unidentified') {\n return key;\n }\n }\n\n // Browser does not implement `key`, polyfill as much of it as we can.\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent);\n\n // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n return '';\n}\n\nmodule.exports = getEventKey;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventKey.js\n ** module id = 136\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticDragEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticDragEvent.js\n ** module id = 137\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTouchEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticTouchEvent.js\n ** module id = 138\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticWheelEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX :\n // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY :\n // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY :\n // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: null,\n\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticWheelEvent.js\n ** module id = 139\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SVGDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\n\nvar NS = {\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\nvar SVGDOMPropertyConfig = {\n Properties: {\n clipPath: MUST_USE_ATTRIBUTE,\n cx: MUST_USE_ATTRIBUTE,\n cy: MUST_USE_ATTRIBUTE,\n d: MUST_USE_ATTRIBUTE,\n dx: MUST_USE_ATTRIBUTE,\n dy: MUST_USE_ATTRIBUTE,\n fill: MUST_USE_ATTRIBUTE,\n fillOpacity: MUST_USE_ATTRIBUTE,\n fontFamily: MUST_USE_ATTRIBUTE,\n fontSize: MUST_USE_ATTRIBUTE,\n fx: MUST_USE_ATTRIBUTE,\n fy: MUST_USE_ATTRIBUTE,\n gradientTransform: MUST_USE_ATTRIBUTE,\n gradientUnits: MUST_USE_ATTRIBUTE,\n markerEnd: MUST_USE_ATTRIBUTE,\n markerMid: MUST_USE_ATTRIBUTE,\n markerStart: MUST_USE_ATTRIBUTE,\n offset: MUST_USE_ATTRIBUTE,\n opacity: MUST_USE_ATTRIBUTE,\n patternContentUnits: MUST_USE_ATTRIBUTE,\n patternUnits: MUST_USE_ATTRIBUTE,\n points: MUST_USE_ATTRIBUTE,\n preserveAspectRatio: MUST_USE_ATTRIBUTE,\n r: MUST_USE_ATTRIBUTE,\n rx: MUST_USE_ATTRIBUTE,\n ry: MUST_USE_ATTRIBUTE,\n spreadMethod: MUST_USE_ATTRIBUTE,\n stopColor: MUST_USE_ATTRIBUTE,\n stopOpacity: MUST_USE_ATTRIBUTE,\n stroke: MUST_USE_ATTRIBUTE,\n strokeDasharray: MUST_USE_ATTRIBUTE,\n strokeLinecap: MUST_USE_ATTRIBUTE,\n strokeOpacity: MUST_USE_ATTRIBUTE,\n strokeWidth: MUST_USE_ATTRIBUTE,\n textAnchor: MUST_USE_ATTRIBUTE,\n transform: MUST_USE_ATTRIBUTE,\n version: MUST_USE_ATTRIBUTE,\n viewBox: MUST_USE_ATTRIBUTE,\n x1: MUST_USE_ATTRIBUTE,\n x2: MUST_USE_ATTRIBUTE,\n x: MUST_USE_ATTRIBUTE,\n xlinkActuate: MUST_USE_ATTRIBUTE,\n xlinkArcrole: MUST_USE_ATTRIBUTE,\n xlinkHref: MUST_USE_ATTRIBUTE,\n xlinkRole: MUST_USE_ATTRIBUTE,\n xlinkShow: MUST_USE_ATTRIBUTE,\n xlinkTitle: MUST_USE_ATTRIBUTE,\n xlinkType: MUST_USE_ATTRIBUTE,\n xmlBase: MUST_USE_ATTRIBUTE,\n xmlLang: MUST_USE_ATTRIBUTE,\n xmlSpace: MUST_USE_ATTRIBUTE,\n y1: MUST_USE_ATTRIBUTE,\n y2: MUST_USE_ATTRIBUTE,\n y: MUST_USE_ATTRIBUTE\n },\n DOMAttributeNamespaces: {\n xlinkActuate: NS.xlink,\n xlinkArcrole: NS.xlink,\n xlinkHref: NS.xlink,\n xlinkRole: NS.xlink,\n xlinkShow: NS.xlink,\n xlinkTitle: NS.xlink,\n xlinkType: NS.xlink,\n xmlBase: NS.xml,\n xmlLang: NS.xml,\n xmlSpace: NS.xml\n },\n DOMAttributeNames: {\n clipPath: 'clip-path',\n fillOpacity: 'fill-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n gradientTransform: 'gradientTransform',\n gradientUnits: 'gradientUnits',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n patternContentUnits: 'patternContentUnits',\n patternUnits: 'patternUnits',\n preserveAspectRatio: 'preserveAspectRatio',\n spreadMethod: 'spreadMethod',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strokeDasharray: 'stroke-dasharray',\n strokeLinecap: 'stroke-linecap',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n textAnchor: 'text-anchor',\n viewBox: 'viewBox',\n xlinkActuate: 'xlink:actuate',\n xlinkArcrole: 'xlink:arcrole',\n xlinkHref: 'xlink:href',\n xlinkRole: 'xlink:role',\n xlinkShow: 'xlink:show',\n xlinkTitle: 'xlink:title',\n xlinkType: 'xlink:type',\n xmlBase: 'xml:base',\n xmlLang: 'xml:lang',\n xmlSpace: 'xml:space'\n }\n};\n\nmodule.exports = SVGDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SVGDOMPropertyConfig.js\n ** module id = 140\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerf\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDefaultPerfAnalysis = require('./ReactDefaultPerfAnalysis');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\n\nvar performanceNow = require('fbjs/lib/performanceNow');\n\nfunction roundFloat(val) {\n return Math.floor(val * 100) / 100;\n}\n\nfunction addValue(obj, key, val) {\n obj[key] = (obj[key] || 0) + val;\n}\n\nvar ReactDefaultPerf = {\n _allMeasurements: [], // last item in the list is the current one\n _mountStack: [0],\n _injected: false,\n\n start: function () {\n if (!ReactDefaultPerf._injected) {\n ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\n }\n\n ReactDefaultPerf._allMeasurements.length = 0;\n ReactPerf.enableMeasure = true;\n },\n\n stop: function () {\n ReactPerf.enableMeasure = false;\n },\n\n getLastMeasurements: function () {\n return ReactDefaultPerf._allMeasurements;\n },\n\n printExclusive: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\n console.table(summary.map(function (item) {\n return {\n 'Component class name': item.componentName,\n 'Total inclusive time (ms)': roundFloat(item.inclusive),\n 'Exclusive mount time (ms)': roundFloat(item.exclusive),\n 'Exclusive render time (ms)': roundFloat(item.render),\n 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\n 'Render time per instance (ms)': roundFloat(item.render / item.count),\n 'Instances': item.count\n };\n }));\n // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\n // number.\n },\n\n printInclusive: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\n console.table(summary.map(function (item) {\n return {\n 'Owner > component': item.componentName,\n 'Inclusive time (ms)': roundFloat(item.time),\n 'Instances': item.count\n };\n }));\n console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n },\n\n getMeasurementsSummaryMap: function (measurements) {\n var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);\n return summary.map(function (item) {\n return {\n 'Owner > component': item.componentName,\n 'Wasted time (ms)': item.time,\n 'Instances': item.count\n };\n });\n },\n\n printWasted: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\n console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n },\n\n printDOM: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\n console.table(summary.map(function (item) {\n var result = {};\n result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\n result.type = item.type;\n result.args = JSON.stringify(item.args);\n return result;\n }));\n console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n },\n\n _recordWrite: function (id, fnName, totalTime, args) {\n // TODO: totalTime isn't that useful since it doesn't count paints/reflows\n var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;\n writes[id] = writes[id] || [];\n writes[id].push({\n type: fnName,\n time: totalTime,\n args: args\n });\n },\n\n measure: function (moduleName, fnName, func) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var totalTime;\n var rv;\n var start;\n\n if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {\n // A \"measurement\" is a set of metrics recorded for each flush. We want\n // to group the metrics for a given flush together so we can look at the\n // components that rendered and the DOM operations that actually\n // happened to determine the amount of \"wasted work\" performed.\n ReactDefaultPerf._allMeasurements.push({\n exclusive: {},\n inclusive: {},\n render: {},\n counts: {},\n writes: {},\n displayNames: {},\n totalTime: 0,\n created: {}\n });\n start = performanceNow();\n rv = func.apply(this, args);\n ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;\n return rv;\n } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') {\n start = performanceNow();\n rv = func.apply(this, args);\n totalTime = performanceNow() - start;\n\n if (fnName === '_mountImageIntoNode') {\n var mountID = ReactMount.getID(args[1]);\n ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);\n } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\n // special format\n args[0].forEach(function (update) {\n var writeArgs = {};\n if (update.fromIndex !== null) {\n writeArgs.fromIndex = update.fromIndex;\n }\n if (update.toIndex !== null) {\n writeArgs.toIndex = update.toIndex;\n }\n if (update.textContent !== null) {\n writeArgs.textContent = update.textContent;\n }\n if (update.markupIndex !== null) {\n writeArgs.markup = args[1][update.markupIndex];\n }\n ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);\n });\n } else {\n // basic format\n var id = args[0];\n if (typeof id === 'object') {\n id = ReactMount.getID(args[0]);\n }\n ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));\n }\n return rv;\n } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?\n fnName === '_renderValidatedComponent')) {\n\n if (this._currentElement.type === ReactMount.TopLevelWrapper) {\n return func.apply(this, args);\n }\n\n var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;\n var isRender = fnName === '_renderValidatedComponent';\n var isMount = fnName === 'mountComponent';\n\n var mountStack = ReactDefaultPerf._mountStack;\n var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];\n\n if (isRender) {\n addValue(entry.counts, rootNodeID, 1);\n } else if (isMount) {\n entry.created[rootNodeID] = true;\n mountStack.push(0);\n }\n\n start = performanceNow();\n rv = func.apply(this, args);\n totalTime = performanceNow() - start;\n\n if (isRender) {\n addValue(entry.render, rootNodeID, totalTime);\n } else if (isMount) {\n var subMountTime = mountStack.pop();\n mountStack[mountStack.length - 1] += totalTime;\n addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\n addValue(entry.inclusive, rootNodeID, totalTime);\n } else {\n addValue(entry.inclusive, rootNodeID, totalTime);\n }\n\n entry.displayNames[rootNodeID] = {\n current: this.getName(),\n owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'\n };\n\n return rv;\n } else {\n return func.apply(this, args);\n }\n };\n }\n};\n\nmodule.exports = ReactDefaultPerf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultPerf.js\n ** module id = 141\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerfAnalysis\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\n\n// Don't try to save users less than 1.2ms (a number I made up)\nvar DONT_CARE_THRESHOLD = 1.2;\nvar DOM_OPERATION_TYPES = {\n '_mountImageIntoNode': 'set innerHTML',\n INSERT_MARKUP: 'set innerHTML',\n MOVE_EXISTING: 'move',\n REMOVE_NODE: 'remove',\n SET_MARKUP: 'set innerHTML',\n TEXT_CONTENT: 'set textContent',\n 'setValueForProperty': 'update attribute',\n 'setValueForAttribute': 'update attribute',\n 'deleteValueForProperty': 'remove attribute',\n 'dangerouslyReplaceNodeWithMarkupByID': 'replace'\n};\n\nfunction getTotalTime(measurements) {\n // TODO: return number of DOM ops? could be misleading.\n // TODO: measure dropped frames after reconcile?\n // TODO: log total time of each reconcile and the top-level component\n // class that triggered it.\n var totalTime = 0;\n for (var i = 0; i < measurements.length; i++) {\n var measurement = measurements[i];\n totalTime += measurement.totalTime;\n }\n return totalTime;\n}\n\nfunction getDOMSummary(measurements) {\n var items = [];\n measurements.forEach(function (measurement) {\n Object.keys(measurement.writes).forEach(function (id) {\n measurement.writes[id].forEach(function (write) {\n items.push({\n id: id,\n type: DOM_OPERATION_TYPES[write.type] || write.type,\n args: write.args\n });\n });\n });\n });\n return items;\n}\n\nfunction getExclusiveSummary(measurements) {\n var candidates = {};\n var displayName;\n\n for (var i = 0; i < measurements.length; i++) {\n var measurement = measurements[i];\n var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n for (var id in allIDs) {\n displayName = measurement.displayNames[id].current;\n\n candidates[displayName] = candidates[displayName] || {\n componentName: displayName,\n inclusive: 0,\n exclusive: 0,\n render: 0,\n count: 0\n };\n if (measurement.render[id]) {\n candidates[displayName].render += measurement.render[id];\n }\n if (measurement.exclusive[id]) {\n candidates[displayName].exclusive += measurement.exclusive[id];\n }\n if (measurement.inclusive[id]) {\n candidates[displayName].inclusive += measurement.inclusive[id];\n }\n if (measurement.counts[id]) {\n candidates[displayName].count += measurement.counts[id];\n }\n }\n }\n\n // Now make a sorted array with the results.\n var arr = [];\n for (displayName in candidates) {\n if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\n arr.push(candidates[displayName]);\n }\n }\n\n arr.sort(function (a, b) {\n return b.exclusive - a.exclusive;\n });\n\n return arr;\n}\n\nfunction getInclusiveSummary(measurements, onlyClean) {\n var candidates = {};\n var inclusiveKey;\n\n for (var i = 0; i < measurements.length; i++) {\n var measurement = measurements[i];\n var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n var cleanComponents;\n\n if (onlyClean) {\n cleanComponents = getUnchangedComponents(measurement);\n }\n\n for (var id in allIDs) {\n if (onlyClean && !cleanComponents[id]) {\n continue;\n }\n\n var displayName = measurement.displayNames[id];\n\n // Inclusive time is not useful for many components without knowing where\n // they are instantiated. So we aggregate inclusive time with both the\n // owner and current displayName as the key.\n inclusiveKey = displayName.owner + ' > ' + displayName.current;\n\n candidates[inclusiveKey] = candidates[inclusiveKey] || {\n componentName: inclusiveKey,\n time: 0,\n count: 0\n };\n\n if (measurement.inclusive[id]) {\n candidates[inclusiveKey].time += measurement.inclusive[id];\n }\n if (measurement.counts[id]) {\n candidates[inclusiveKey].count += measurement.counts[id];\n }\n }\n }\n\n // Now make a sorted array with the results.\n var arr = [];\n for (inclusiveKey in candidates) {\n if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\n arr.push(candidates[inclusiveKey]);\n }\n }\n\n arr.sort(function (a, b) {\n return b.time - a.time;\n });\n\n return arr;\n}\n\nfunction getUnchangedComponents(measurement) {\n // For a given reconcile, look at which components did not actually\n // render anything to the DOM and return a mapping of their ID to\n // the amount of time it took to render the entire subtree.\n var cleanComponents = {};\n var dirtyLeafIDs = Object.keys(measurement.writes);\n var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n for (var id in allIDs) {\n var isDirty = false;\n // For each component that rendered, see if a component that triggered\n // a DOM op is in its subtree.\n for (var i = 0; i < dirtyLeafIDs.length; i++) {\n if (dirtyLeafIDs[i].indexOf(id) === 0) {\n isDirty = true;\n break;\n }\n }\n // check if component newly created\n if (measurement.created[id]) {\n isDirty = true;\n }\n if (!isDirty && measurement.counts[id] > 0) {\n cleanComponents[id] = true;\n }\n }\n return cleanComponents;\n}\n\nvar ReactDefaultPerfAnalysis = {\n getExclusiveSummary: getExclusiveSummary,\n getInclusiveSummary: getInclusiveSummary,\n getDOMSummary: getDOMSummary,\n getTotalTime: getTotalTime\n};\n\nmodule.exports = ReactDefaultPerfAnalysis;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultPerfAnalysis.js\n ** module id = 142\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performanceNow\n * @typechecks\n */\n\n'use strict';\n\nvar performance = require('./performance');\nvar curPerformance = performance;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (!curPerformance || !curPerformance.now) {\n curPerformance = Date;\n}\n\nvar performanceNow = curPerformance.now.bind(curPerformance);\n\nmodule.exports = performanceNow;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/performanceNow.js\n ** module id = 143\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performance\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/performance.js\n ** module id = 144\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '0.14.3';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactVersion.js\n ** module id = 145\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n* @providesModule renderSubtreeIntoContainer\n*/\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/renderSubtreeIntoContainer.js\n ** module id = 146\n ** module chunks = 0 1\n **/","'use strict';\n\nmodule.exports = require('./lib/React');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/react.js\n ** module id = 147\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule React\n */\n\n'use strict';\n\nvar ReactDOM = require('./ReactDOM');\nvar ReactDOMServer = require('./ReactDOMServer');\nvar ReactIsomorphic = require('./ReactIsomorphic');\n\nvar assign = require('./Object.assign');\nvar deprecated = require('./deprecated');\n\n// `version` will be added here by ReactIsomorphic.\nvar React = {};\n\nassign(React, ReactIsomorphic);\n\nassign(React, {\n // ReactDOM\n findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),\n render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),\n unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),\n\n // ReactDOMServer\n renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),\n renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)\n});\n\nReact.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;\nReact.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/React.js\n ** module id = 148\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMServer\n */\n\n'use strict';\n\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactServerRendering = require('./ReactServerRendering');\nvar ReactVersion = require('./ReactVersion');\n\nReactDefaultInjection.inject();\n\nvar ReactDOMServer = {\n renderToString: ReactServerRendering.renderToString,\n renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\n version: ReactVersion\n};\n\nmodule.exports = ReactDOMServer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMServer.js\n ** module id = 149\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n * @providesModule ReactServerRendering\n */\n'use strict';\n\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactServerBatchingStrategy = require('./ReactServerBatchingStrategy');\nvar ReactServerRenderingTransaction = require('./ReactServerRenderingTransaction');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup\n */\nfunction renderToString(element) {\n !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n var transaction;\n try {\n ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n var id = ReactInstanceHandles.createReactRootID();\n transaction = ReactServerRenderingTransaction.getPooled(false);\n\n return transaction.perform(function () {\n var componentInstance = instantiateReactComponent(element, null);\n var markup = componentInstance.mountComponent(id, transaction, emptyObject);\n return ReactMarkupChecksum.addChecksumToMarkup(markup);\n }, null);\n } finally {\n ReactServerRenderingTransaction.release(transaction);\n // Revert to the DOM batching strategy since these two renderers\n // currently share these stateful modules.\n ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n }\n}\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup, without the extra React ID and checksum\n * (for generating static pages)\n */\nfunction renderToStaticMarkup(element) {\n !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n var transaction;\n try {\n ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n var id = ReactInstanceHandles.createReactRootID();\n transaction = ReactServerRenderingTransaction.getPooled(true);\n\n return transaction.perform(function () {\n var componentInstance = instantiateReactComponent(element, null);\n return componentInstance.mountComponent(id, transaction, emptyObject);\n }, null);\n } finally {\n ReactServerRenderingTransaction.release(transaction);\n // Revert to the DOM batching strategy since these two renderers\n // currently share these stateful modules.\n ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n }\n}\n\nmodule.exports = {\n renderToString: renderToString,\n renderToStaticMarkup: renderToStaticMarkup\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRendering.js\n ** module id = 150\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerBatchingStrategy\n * @typechecks\n */\n\n'use strict';\n\nvar ReactServerBatchingStrategy = {\n isBatchingUpdates: false,\n batchedUpdates: function (callback) {\n // Don't do anything here. During the server rendering we don't want to\n // schedule any updates. We will simply ignore them.\n }\n};\n\nmodule.exports = ReactServerBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerBatchingStrategy.js\n ** module id = 151\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRenderingTransaction\n * @typechecks\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar CallbackQueue = require('./CallbackQueue');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\n/**\n * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks\n * during the performing of the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n /**\n * Initializes the internal `onDOMReady` queue.\n */\n initialize: function () {\n this.reactMountReady.reset();\n },\n\n close: emptyFunction\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n this.reinitializeTransaction();\n this.renderToStaticMarkup = renderToStaticMarkup;\n this.reactMountReady = CallbackQueue.getPooled(null);\n this.useCreateElement = false;\n}\n\nvar Mixin = {\n /**\n * @see Transaction\n * @abstract\n * @final\n * @return {array} Empty list of operation wrap procedures.\n */\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n /**\n * @return {object} The queue to collect `onDOMReady` callbacks with.\n */\n getReactMountReady: function () {\n return this.reactMountReady;\n },\n\n /**\n * `PooledClass` looks for this, and will invoke this before allowing this\n * instance to be reused.\n */\n destructor: function () {\n CallbackQueue.release(this.reactMountReady);\n this.reactMountReady = null;\n }\n};\n\nassign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRenderingTransaction.js\n ** module id = 152\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactIsomorphic\n */\n\n'use strict';\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactComponent = require('./ReactComponent');\nvar ReactClass = require('./ReactClass');\nvar ReactDOMFactories = require('./ReactDOMFactories');\nvar ReactElement = require('./ReactElement');\nvar ReactElementValidator = require('./ReactElementValidator');\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactVersion = require('./ReactVersion');\n\nvar assign = require('./Object.assign');\nvar onlyChild = require('./onlyChild');\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (process.env.NODE_ENV !== 'production') {\n createElement = ReactElementValidator.createElement;\n createFactory = ReactElementValidator.createFactory;\n cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar React = {\n\n // Modern\n\n Children: {\n map: ReactChildren.map,\n forEach: ReactChildren.forEach,\n count: ReactChildren.count,\n toArray: ReactChildren.toArray,\n only: onlyChild\n },\n\n Component: ReactComponent,\n\n createElement: createElement,\n cloneElement: cloneElement,\n isValidElement: ReactElement.isValidElement,\n\n // Classic\n\n PropTypes: ReactPropTypes,\n createClass: ReactClass.createClass,\n createFactory: createFactory,\n createMixin: function (mixin) {\n // Currently a noop. Will be used to validate and trace mixins.\n return mixin;\n },\n\n // This looks DOM specific but these are actually isomorphic helpers\n // since they are just generating DOM strings.\n DOM: ReactDOMFactories,\n\n version: ReactVersion,\n\n // Hook for JSX spread, don't use this for anything else.\n __spread: assign\n};\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactIsomorphic.js\n ** module id = 153\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactElementValidator = require('./ReactElementValidator');\n\nvar mapObject = require('fbjs/lib/mapObject');\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @param {string} tag Tag name (e.g. `div`).\n * @private\n */\nfunction createDOMFactory(tag) {\n if (process.env.NODE_ENV !== 'production') {\n return ReactElementValidator.createFactory(tag);\n }\n return ReactElement.createFactory(tag);\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = mapObject({\n a: 'a',\n abbr: 'abbr',\n address: 'address',\n area: 'area',\n article: 'article',\n aside: 'aside',\n audio: 'audio',\n b: 'b',\n base: 'base',\n bdi: 'bdi',\n bdo: 'bdo',\n big: 'big',\n blockquote: 'blockquote',\n body: 'body',\n br: 'br',\n button: 'button',\n canvas: 'canvas',\n caption: 'caption',\n cite: 'cite',\n code: 'code',\n col: 'col',\n colgroup: 'colgroup',\n data: 'data',\n datalist: 'datalist',\n dd: 'dd',\n del: 'del',\n details: 'details',\n dfn: 'dfn',\n dialog: 'dialog',\n div: 'div',\n dl: 'dl',\n dt: 'dt',\n em: 'em',\n embed: 'embed',\n fieldset: 'fieldset',\n figcaption: 'figcaption',\n figure: 'figure',\n footer: 'footer',\n form: 'form',\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n head: 'head',\n header: 'header',\n hgroup: 'hgroup',\n hr: 'hr',\n html: 'html',\n i: 'i',\n iframe: 'iframe',\n img: 'img',\n input: 'input',\n ins: 'ins',\n kbd: 'kbd',\n keygen: 'keygen',\n label: 'label',\n legend: 'legend',\n li: 'li',\n link: 'link',\n main: 'main',\n map: 'map',\n mark: 'mark',\n menu: 'menu',\n menuitem: 'menuitem',\n meta: 'meta',\n meter: 'meter',\n nav: 'nav',\n noscript: 'noscript',\n object: 'object',\n ol: 'ol',\n optgroup: 'optgroup',\n option: 'option',\n output: 'output',\n p: 'p',\n param: 'param',\n picture: 'picture',\n pre: 'pre',\n progress: 'progress',\n q: 'q',\n rp: 'rp',\n rt: 'rt',\n ruby: 'ruby',\n s: 's',\n samp: 'samp',\n script: 'script',\n section: 'section',\n select: 'select',\n small: 'small',\n source: 'source',\n span: 'span',\n strong: 'strong',\n style: 'style',\n sub: 'sub',\n summary: 'summary',\n sup: 'sup',\n table: 'table',\n tbody: 'tbody',\n td: 'td',\n textarea: 'textarea',\n tfoot: 'tfoot',\n th: 'th',\n thead: 'thead',\n time: 'time',\n title: 'title',\n tr: 'tr',\n track: 'track',\n u: 'u',\n ul: 'ul',\n 'var': 'var',\n video: 'video',\n wbr: 'wbr',\n\n // SVG\n circle: 'circle',\n clipPath: 'clipPath',\n defs: 'defs',\n ellipse: 'ellipse',\n g: 'g',\n image: 'image',\n line: 'line',\n linearGradient: 'linearGradient',\n mask: 'mask',\n path: 'path',\n pattern: 'pattern',\n polygon: 'polygon',\n polyline: 'polyline',\n radialGradient: 'radialGradient',\n rect: 'rect',\n stop: 'stop',\n svg: 'svg',\n text: 'text',\n tspan: 'tspan'\n\n}, createDOMFactory);\n\nmodule.exports = ReactDOMFactories;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFactories.js\n ** module id = 154\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nvar loggedTypeFailures = {};\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);\n if (addenda === null) {\n // we already showed the warning\n return;\n }\n process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined;\n}\n\n/**\n * Shared warning and monitoring code for the key warnings.\n *\n * @internal\n * @param {string} messageType A key used for de-duping warnings.\n * @param {ReactElement} element Component that requires a key.\n * @param {*} parentType element's parent's type.\n * @returns {?object} A set of addenda to use in the warning message, or null\n * if the warning has already been shown before (and shouldn't be shown again).\n */\nfunction getAddendaForKeyUse(messageType, element, parentType) {\n var addendum = getDeclarationErrorAddendum();\n if (!addendum) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n addendum = ' Check the top-level render call using <' + parentName + '>.';\n }\n }\n\n var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});\n if (memoizer[addendum]) {\n return null;\n }\n memoizer[addendum] = true;\n\n var addenda = {\n parentOrOwner: addendum,\n url: ' See https://fb.me/react-warning-keys for more information.',\n childOwner: null\n };\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n }\n\n return addenda;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (ReactElement.isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (ReactElement.isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n // Entry iterators provide implicit keys.\n if (iteratorFn) {\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n while (!(step = iterator.next()).done) {\n if (ReactElement.isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Assert that the props are valid\n *\n * @param {string} componentName Name of the component for error messages.\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\nfunction checkPropTypes(componentName, propTypes, props, location) {\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n error = propTypes[propName](props, propName, componentName, location);\n } catch (ex) {\n error = ex;\n }\n process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined;\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var addendum = getDeclarationErrorAddendum();\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined;\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var componentClass = element.type;\n if (typeof componentClass !== 'function') {\n return;\n }\n var name = componentClass.displayName || componentClass.name;\n if (componentClass.propTypes) {\n checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);\n }\n if (typeof componentClass.getDefaultProps === 'function') {\n process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined;\n }\n}\n\nvar ReactElementValidator = {\n\n createElement: function (type, props, children) {\n var validType = typeof type === 'string' || typeof type === 'function';\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined;\n\n var element = ReactElement.createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n validatePropTypes(element);\n\n return element;\n },\n\n createFactory: function (type) {\n var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n // Legacy hook TODO: Warn if this is accessed\n validatedFactory.type = type;\n\n if (process.env.NODE_ENV !== 'production') {\n if (canDefineProperty) {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined;\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n }\n\n return validatedFactory;\n },\n\n cloneElement: function (element, props, children) {\n var newElement = ReactElement.cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n }\n\n};\n\nmodule.exports = ReactElementValidator;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElementValidator.js\n ** module id = 155\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule mapObject\n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Executes the provided `callback` once for each enumerable own property in the\n * object and constructs a new object from the results. The `callback` is\n * invoked with three arguments:\n *\n * - the property value\n * - the property name\n * - the object being traversed\n *\n * Properties that are added after the call to `mapObject` will not be visited\n * by `callback`. If the values of existing properties are changed, the value\n * passed to `callback` will be the value at the time `mapObject` visits them.\n * Properties that are deleted before being visited are not visited.\n *\n * @grep function objectMap()\n * @grep function objMap()\n *\n * @param {?object} object\n * @param {function} callback\n * @param {*} context\n * @return {?object}\n */\nfunction mapObject(object, callback, context) {\n if (!object) {\n return null;\n }\n var result = {};\n for (var name in object) {\n if (hasOwnProperty.call(object, name)) {\n result[name] = callback.call(context, object[name], name, object);\n }\n }\n return result;\n}\n\nmodule.exports = mapObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/mapObject.js\n ** module id = 156\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection. The current implementation of this\n * function assumes that a single child gets passed without a wrapper, but the\n * purpose of this helper function is to abstract away the particular structure\n * of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactComponent} The first and only `ReactComponent` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined;\n return children;\n}\n\nmodule.exports = onlyChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/onlyChild.js\n ** module id = 157\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule deprecated\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * This will log a single deprecation notice per function and forward the call\n * on to the new API.\n *\n * @param {string} fnName The name of the function\n * @param {string} newModule The module that fn will exist in\n * @param {string} newPackage The module that fn will exist in\n * @param {*} ctx The context this forwarded call should run in\n * @param {function} fn The function to forward on to\n * @return {function} The function that will warn once and then call fn\n */\nfunction deprecated(fnName, newModule, newPackage, ctx, fn) {\n var warned = false;\n if (process.env.NODE_ENV !== 'production') {\n var newFn = function () {\n process.env.NODE_ENV !== 'production' ? warning(warned,\n // Require examples in this string must be split to prevent React's\n // build tools from mistaking them for real requires.\n // Otherwise the build tools will attempt to build a '%s' module.\n 'React.%s is deprecated. Please use %s.%s from require' + '(\\'%s\\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;\n warned = true;\n return fn.apply(ctx, arguments);\n };\n // We need to make sure all properties of the original fn are copied over.\n // In particular, this is needed to support PropTypes\n return assign(newFn, fn);\n }\n\n return fn;\n}\n\nmodule.exports = deprecated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/deprecated.js\n ** module id = 158\n ** module chunks = 0 1\n **/","import React from 'react';\nimport _ from 'underscore';\nimport $ from 'jquery';\nimport Input from './components/Input';\nimport Icon from './components/Icon';\nimport InputError from './components/InputError';\nimport {getQueryVariable} from './components/Utils';\n\nexport class LoginComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n username: null,\n password: null,\n errorVisible: false,\n errorMessage: '登录失败, 请联系管理员'\n };\n }\n\n saveAndContinue = (event) => {\n event.preventDefault();\n let data = {\n username: this.state.username,\n password: this.state.password,\n continue: decodeURIComponent(getQueryVariable('continue'))\n }, self = this;\n\n $.post('/login/', data).done(function(result) {\n let res = JSON.parse(result);\n if (res.r) {\n self.setState({\n errorVisible: true,\n errorMessage: res.message\n });\n } else {\n window.location = res.continue;\n }\n });\n };\n\n handleUsernameInput = (event) => {\n this.setState({\n username: event.target.value\n });\n };\n\n handlePasswordInput = (event) => {\n this.setState({\n password: event.target.value\n });\n };\n\n render() {\n return (\n <div className=\"create_account_screen\">\n <div className=\"create_account_form\">\n <h1>登录CODE</h1>\n <form onSubmit={this.saveAndContinue}>\n\n <Input\n text=\"用户名\"\n ref=\"username\"\n type=\"text\"\n defaultValue={this.state.username}\n value={this.state.username}\n onChange={this.handleUsernameInput}\n />\n\n <Input\n text=\"密码\"\n type=\"password\"\n ref=\"text\"\n defaultValue={this.state.username}\n value={this.state.passsword}\n onChange={this.handlePasswordInput}\n />\n\n <InputError\n visible={this.state.errorVisible}\n errorMessage={this.state.errorMessage}\n />\n\n <button\n type=\"submit\"\n className=\"button button_wide\">\n 登录\n </button>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport default class Login extends React.Component {\n render() {\n return (\n <div className=\"application_wrapper\">\n <div className=\"application_routeHandler\">\n <LoginComponent/>\n </div>\n </div>\n );\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/signin.jsx\n **/","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/underscore/underscore.js\n ** module id = 160\n ** module chunks = 0 1\n **/","import React from 'react';\nimport _ from 'underscore';\nimport Icon from './Icon';\nimport InputError from './InputError';\nimport PasswordValidator from './PasswordValidator';\nimport classNames from 'classnames/bind';\n\nlet cx = classNames.bind({});\n\nexport default class Input extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n valid: (this.props.isValid && this.props.isValid()) || true,\n empty: _.isEmpty(this.props.value),\n focus: false,\n value: null,\n iconsVisible: !this.props.validator,\n errorMessage: this.props.emptyMessage,\n validator: this.props.validator,\n validatorVisible: false,\n type: this.props.type,\n minCharacters: this.props.minCharacters,\n requireCapitals: this.props.requireCapitals,\n requireNumbers: this.props.requireNumbers,\n forbiddenWords: this.props.forbiddenWords,\n isValidatorValid: {\n minChars: false,\n capitalLetters: false,\n numbers: false,\n words: false,\n all: false\n },\n allValidatorValid: false\n };\n }\n\n handleChange = (event) => {\n this.setState({\n value: event.target.value,\n empty: _.isEmpty(event.target.value)\n });\n\n if (this.props.validator) {\n this.checkRules(event.target.value)\n };\n\n if (this.props.validate) {\n this.validateInput(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n\n validateInput = (value) => {\n // trigger custom validation method in the parent component\n if (this.props.validate && this.props.validate(value)){\n this.setState({\n valid: true,\n errorVisible: false\n });\n } else {\n this.setState({\n valid: false,\n errorMessage: !_.isEmpty(value) ? this.props.errorMessage : this.props.emptyMessage\n });\n }\n\n };\n\n componentWillReceiveProps = (newProps) => {\n // perform update only when new value exists and not empty\n if (newProps.value) {\n if(!_.isUndefined(newProps.value) && newProps.value.length > 0) {\n if (this.props.validate) {\n this.validateInput(newProps.value);\n }\n this.setState({\n value: newProps.value,\n empty: _.isEmpty(newProps.value)\n });\n }\n }\n };\n\n isValid() {\n if (this.props.validate) {\n if (_.isEmpty(this.state.value) || !this.props.validate(this.state.value)) {\n this.setState({\n valid: false,\n errorVisible: true\n });\n }\n }\n\n return this.state.valid;\n }\n\n handleFocus = (event) => {\n this.setState({\n focus: true,\n validatorVisible: true\n });\n\n if (this.props.validator) {\n this.setState({\n errorVisible: false\n });\n }\n }\n\n handleBlur = (event) => {\n this.setState({\n focus: false,\n errorVisible: !this.state.valid,\n validatorVisible: false\n });\n }\n\n mouseEnterError() {\n this.setState({\n errorVisible: true\n });\n }\n\n hideError() {\n this.setState({\n errorVisible: false,\n validatorVisible: false\n });\n }\n\n // validator function\n checkRules = (value) => {\n var validData = {\n minChars: !_.isEmpty(value) ? value.length >= parseInt(this.state.minCharacters): false,\n capitalLetters: !_.isEmpty(value) ? this.countCapitals(value): false,\n numbers: !_.isEmpty(value) ? this.countNumbers(value) > 0 : false,\n words: !_.isEmpty(value) ? !this.checkWords(value) : false\n };\n var allValid = (validData.minChars && validData.capitalLetters && validData.numbers && validData.words);\n\n this.setState({\n isValidatorValid: validData,\n allValidatorValid: allValid,\n valid: allValid\n });\n };\n\n countCapitals = (value) => {\n return value.replace(/[^A-Z]/g, \"\").length;\n };\n\n countNumbers = (value) => {\n return /\\d/.test(value);\n };\n\n checkWords = (value) => {\n return _.some(this.state.forbiddenWords, function (word) {\n var matched = (word === value) ? true : \"\";\n return matched\n });\n };\n\n render() {\n\n var inputGroupClasses = cx({\n 'input_group': true,\n 'input_valid': this.state.valid,\n 'input_error': !this.state.valid,\n 'input_empty': this.state.empty,\n 'input_hasValue': !this.state.empty,\n 'input_focused': this.state.focus,\n 'input_unfocused': !this.state.focus\n });\n\n var validator;\n\n if (this.state.validator) {\n validator =\n <PasswordValidator\n ref=\"passwordValidator\"\n visible={this.state.validatorVisible}\n name={this.props.text}\n value={this.state.value}\n validData={this.state.isValidatorValid}\n valid={this.state.allValidatorValid}\n forbiddenWords={this.state.forbiddenWords}\n minCharacters={this.props.minCharacters}\n requireCapitals={this.props.requireCapitals}\n requireNumbers={this.props.requireNumbers}\n />\n };\n\n return (\n <div className={inputGroupClasses}>\n\n <label className=\"input_label\" htmlFor={this.props.text}>\n <span className=\"label_text\">{this.props.text}</span>\n </label>\n\n <input\n {...this.props}\n placeholder={this.props.placeholder}\n className=\"input\"\n id={this.props.text}\n defaultValue={this.props.defaultValue}\n value={this.state.value}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n autoComplete=\"off\"\n />\n\n <InputError\n visible={this.state.errorVisible}\n errorMessage={this.state.errorMessage}\n />\n\n <div className=\"validationIcons\">\n <i className=\"input_error_icon\" onMouseEnter={this.mouseEnterError}> <Icon type=\"circle_error\"/> </i>\n <i className=\"input_valid_icon\"> <Icon type=\"circle_tick\"/> </i>\n </div>\n\n {validator}\n\n </div>\n );\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/Input.jsx\n **/","import React from 'react';\n\nexport default class Icon extends React.Component {\n\n render() {\n switch(this.props.type) {\n\n case 'circle_error':\n return (\n <svg viewBox=\"0 0 20 20\">\n <path d=\"M10,0.982c4.973,0,9.018,4.046,9.018,9.018S14.973,19.018,10,19.018S0.982,14.973,0.982,10\n S5.027,0.982,10,0.982 M10,0C4.477,0,0,4.477,0,10c0,5.523,4.477,10,10,10s10-4.477,10-10C20,4.477,15.523,0,10,0L10,0z M9,5.703\n V5.441h2.5v0.262l-0.66,5.779H9.66L9,5.703z M9.44,12.951h1.621v1.491H9.44V12.951z\"/>\n </svg>\n )\n\n case 'circle_tick':\n return (\n <svg viewBox=\"0 0 23 23\">\n <path d=\"M11.5,23C5.2,23,0,17.8,0,11.5S5.2,0,11.5,0S23,5.2,23,11.5S17.8,23,11.5,23z M11.5,1C5.7,1,1,5.7,1,11.5S5.7,22,11.5,22\n S22,17.3,22,11.5S17.3,1,11.5,1z M10.4,15.2l6.7-7c0.2-0.2,0.2-0.5,0-0.7c-0.2-0.2-0.5-0.2-0.7,0L10,14.2L7,11\n c-0.2-0.2-0.5-0.2-0.7,0c-0.2,0.2-0.2,0.5,0,0.7l3.4,3.5c0.1,0.1,0.2,0.1,0.3,0.1S10.3,15.3,10.4,15.2z\"/>\n </svg>\n )\n\n case 'circle_tick_filled':\n return (\n <svg viewBox=\"0 0 20 20\">\n <path fill=\"#4FB07F\" d=\"M9.5,0C14.7,0,19,4.3,19,9.5S14.7,19,9.5,19S0,14.7,0,9.5S4.3,0,9.5,0z\"/>\n <path fill=\"#FFFFFF\" d=\"M8.7,12.9c-0.1,0-0.2,0-0.3-0.1l-2.4-2.5c-0.1-0.1-0.1-0.4,0-0.5c0.1-0.2,0.4-0.2,0.5,0L8.7,12l4.6-5\n c0.1-0.1,0.4-0.1,0.5,0c0.1,0.2,0.1,0.4,0,0.5L9,12.8C9,12.8,8.9,12.9,8.7,12.9C8.8,12.9,8.8,12.9,8.7,12.9z\"/>\n </svg>\n )\n\n case 'guthub':\n return (\n <svg viewBox=\"0 0 34 34\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#191717\" d=\"M32.6,16.3c0,7.2-4.7,13.3-11.1,15.5c-0.8,0.2-1.1-0.3-1.1-0.8\n c0-0.5,0-2.3,0-4.5c0-1.5-0.5-2.5-1.1-3c3.6-0.4,7.4-1.8,7.4-8c0-1.8-0.6-3.2-1.7-4.4c0.2-0.4,0.7-2.1-0.2-4.3c0,0-1.4-0.4-4.5,1.7\n c-1.3-0.4-2.7-0.5-4.1-0.5c-1.4,0-2.8,0.2-4.1,0.5C9.1,6.3,7.7,6.8,7.7,6.8C6.8,9,7.4,10.7,7.6,11.1c-1,1.1-1.7,2.6-1.7,4.4\n c0,6.2,3.8,7.6,7.4,8.1c-0.5,0.4-0.9,1.1-1,2.2c-0.9,0.4-3.3,1.1-4.7-1.4c0,0-0.9-1.6-2.5-1.7c0,0-1.6,0-0.1,1c0,0,1.1,0.5,1.8,2.4\n c0,0,1,3.2,5.5,2.2c0,1.4,0,2.4,0,2.8c0,0.4-0.3,0.9-1.1,0.8C4.7,29.6,0,23.5,0,16.3C0,7.3,7.3,0,16.3,0C25.3,0,32.6,7.3,32.6,16.3z\n \"/>\n </svg>\n )\n }\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/Icon.jsx\n **/","import React from 'react';\nimport _ from 'underscore';\nimport classNames from 'classnames/bind';\n\nlet cx = classNames.bind({});\n\nexport default class InputError extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n message: 'Input is invalid'\n };\n }\n\n render() {\n var errorClass = cx({\n 'error_container': true,\n 'visible': this.props.visible,\n 'invisible': !this.props.visible\n });\n\n return (\n <div className={errorClass}>\n <span>{this.props.errorMessage}</span>\n </div>\n )\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/InputError.jsx\n **/","/*!\n Copyright (c) 2015 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses += ' ' + (this && this[arg] || arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses += ' ' + classNames.apply(this, arg);\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses += ' ' + (this && this[key] || key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.substr(1);\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/classnames/bind.js\n ** module id = 165\n ** module chunks = 0 1\n **/","import React from 'react';\nimport _ from 'underscore';\nimport Icon from './Icon';\nimport classNames from 'classnames/bind';\n\nlet cx = classNames.bind({});\n\nexport default class PasswordValidator extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n value: null,\n minCharacters: this.props.minCharacters,\n requireCapitals: this.props.requireCapitals,\n requireNumbers: this.props.requireNumbers,\n forbiddenWords: this.props.forbiddenWords,\n name: this.props.name\n }\n }\n\n render() {\n var validatorClass = cx({\n 'password_validator': true,\n 'visible': this.props.visible,\n 'invisible': !this.props.visible\n });\n\n var forbiddenWords = this.state.forbiddenWords.map(function(word, i) {\n return (\n <span key={i} className=\"bad_word\">\n \"{word}\"\n </span>\n )\n });\n\n var validatorTitle;\n\n if (this.props.valid) {\n validatorTitle =\n <h4 className=\"validator_title valid\">\n {this.props.name} IS OK\n </h4>\n } else {\n validatorTitle =\n <h4 className=\"validator_title invalid\">\n {this.props.name} RULES\n </h4>\n }\n\n return (\n <div className={validatorClass}>\n <div className=\"validator_container\">\n {validatorTitle}\n <ul className=\"rules_list\">\n <li className={cx({'valid': this.props.validData.minChars})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">{this.state.minCharacters} characters minimum</span>\n </li>\n\n <li className={cx({'valid': this.props.validData.capitalLetters})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">Contains at least {this.state.requireCapitals} capital letter</span>\n </li>\n\n <li className={cx({'valid': this.props.validData.numbers})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">Contains at least {this.state.requireNumbers} number</span>\n </li>\n\n <li className={cx({'valid': this.props.validData.words})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">Can't be {forbiddenWords}</span>\n </li>\n </ul>\n </div>\n </div>\n )\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/PasswordValidator.jsx\n **/","export function getQueryVariable(variable)\n{\n var query = window.location.search.substring(1);\n var vars = query.split(\"&\");\n for (var i=0;i<vars.length;i++) {\n var pair = vars[i].split(\"=\");\n if(pair[0] == variable){return pair[1];}\n }\n return '/';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/Utils.jsx\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js/mod/raven.js b/dist/js/mod/raven.js new file mode 100644 index 0000000..33218bc --- /dev/null +++ b/dist/js/mod/raven.js @@ -0,0 +1,2292 @@ + +/* @source lib/oz.js */; + +/** + * OzJS: microkernel for modular javascript + * compatible with AMD (Asynchronous Module Definition) + * see http://ozjs.org for details + * + * Copyright (C) 2010-2012, Dexter.Yy, MIT License + * vim: et:ts=4:sw=4:sts=4 + */ +(function(){ + +var window = this, + _toString = Object.prototype.toString, + _RE_PLUGIN = /(.*)!(.+)/, + _RE_DEPS = /\Wrequire\((['"]).+?\1\)/g, //' + _RE_SUFFIX = /\.(js|json)$/, + _RE_RELPATH = /^\.+?\/.+/, + _RE_DOT = /(^|\/)\.\//g, + _RE_ALIAS_IN_MID = /^([\w\-]+)\//, + _builtin_mods = { "require": 1, "exports": 1, "module": 1, "host": 1, "finish": 1 }, + + _config = { + mods: {} + }, + _scripts = {}, + _delays = {}, + _refers = {}, + _waitings = {}, + _latest_mod, + _scope, + _resets = {}, + + forEach = Array.prototype.forEach || function(fn, sc){ + for(var i = 0, l = this.length; i < l; i++){ + if (i in this) + fn.call(sc, this[i], i, this); + } + }; + +/** + * @public define / register a module and its meta information + * @param {string} module name. optional as unique module in a script file + * @param {string[]} dependencies + * @param {function} module code, execute only once on the first call + * + * @note + * + * define('', [""], func) + * define([""], func) + * define('', func) + * define(func) + * + * define('', "") + * define('', [""], "") + * define('', [""]) + * + */ +function define(name, deps, block){ + var is_remote = typeof block === 'string'; + if (!block) { + if (deps) { + if (isArray(deps)) { + block = filesuffix(realname(basename(name))); + } else { + block = deps; + deps = null; + } + } else { + block = name; + name = ""; + } + if (typeof name !== 'string') { + deps = name; + name = ""; + } else { + is_remote = typeof block === 'string'; + if (!is_remote && !deps) { + deps = seek(block); + } + } + } + name = name && realname(name); + var mod = name && _config.mods[name]; + if (!_config.debug && mod && mod.name + && (is_remote && mod.loaded == 2 || mod.exports)) { + return; + } + if (is_remote && _config.enable_ozma) { + deps = null; + } + var host = isWindow(this) ? this : window; + mod = _config.mods[name] = { + name: name, + url: mod && mod.url, + host: host, + deps: deps || [] + }; + if (name === "") { // capture anonymous module + _latest_mod = mod; + } + if (typeof block !== 'string') { + mod.block = block; + mod.loaded = 2; + } else { // remote module + var alias = _config.aliases; + if (alias) { + block = block.replace(/\{(\w+)\}/g, function(e1, e2){ + return alias[e2] || ""; + }); + } + mod.url = block; + } + if (mod.block && !isFunction(mod.block)) { // json module + mod.exports = block; + } +} + +/** + * @public run a code block its dependencies + * @param {string[]} [module name] dependencies + * @param {function} + */ +function require(deps, block, _self_mod) { + if (typeof deps === 'string') { + if (!block) { + return (_config.mods[realname(basename(deps, _scope))] + || {}).exports; + } + deps = [deps]; + } else if (!block) { + block = deps; + deps = seek(block); + } + var host = isWindow(this) ? this : window; + if (!_self_mod) { + _self_mod = { url: _scope && _scope.url }; + } + var m, remotes = 0, // counter for remote scripts + list = scan.call(host, deps, _self_mod); // calculate dependencies, find all required modules + for (var i = 0, l = list.length; i < l; i++) { + m = list[i]; + if (m.is_reset) { + m = _config.mods[m.name]; + } + if (m.url && m.loaded !== 2) { // remote module + remotes++; + m.loaded = 1; // status: loading + fetch(m, function(){ + this.loaded = 2; // status: loaded + var lm = _latest_mod; + if (lm) { // capture anonymous module + lm.name = this.name; + lm.url = this.url; + _config.mods[this.name] = lm; + _latest_mod = null; + } + // loaded all modules, calculate dependencies all over again + if (--remotes <= 0) { + require.call(host, deps, block, _self_mod); + } + }); + } + } + if (!remotes) { + _self_mod.deps = deps; + _self_mod.host = host; + _self_mod.block = block; + setTimeout(function(){ + tidy(deps, _self_mod); + list.push(_self_mod); + exec(list.reverse()); + }, 0); + } +} + +/** + * @private execute modules in a sequence of dependency + * @param {object[]} [module object] + */ +var exec = function(list){ + var mod, mid, tid, result, isAsync, deps, + depObjs, exportObj, moduleObj, rmod, + wt = _waitings; + while (mod = list.pop()) { + if (mod.is_reset) { + rmod = clone(_config.mods[mod.name]); + rmod.host = mod.host; + rmod.newname = mod.newname; + mod = rmod; + if (!_resets[mod.newname]) { + _resets[mod.newname] = []; + } + _resets[mod.newname].push(mod); + mod.exports = undefined; + } else if (mod.name) { + mod = _config.mods[mod.name] || mod; + } + if (!mod.block || !mod.running && mod.exports !== undefined) { + continue; + } + depObjs = []; + exportObj = {}; // for "exports" module + moduleObj = { id: mod.name, filename: mod.url, exports: exportObj }; + deps = mod.deps.slice(); + deps[mod.block.hiddenDeps ? 'unshift' : 'push']("require", "exports", "module"); + for (var i = 0, l = deps.length; i < l; i++) { + mid = deps[i]; + switch(mid) { + case 'require': + depObjs.push(require); + break; + case 'exports': + depObjs.push(exportObj); + break; + case 'module': + depObjs.push(moduleObj); + break; + case 'host': // deprecated + depObjs.push(mod.host); + break; + case 'finish': // execute asynchronously + tid = mod.name; + if (!wt[tid]) // for delay execute + wt[tid] = [list]; + else + wt[tid].push(list); + depObjs.push(function(result){ + // HACK: no guarantee that this function will be invoked after while() loop termination in Chrome/Safari + setTimeout(function(){ + // 'mod' equal to 'list[list.length-1]' + if (result !== undefined) { + mod.exports = result; + } + if (!wt[tid]) + return; + forEach.call(wt[tid], function(list){ + this(list); + }, exec); + delete wt[tid]; + mod.running = 0; + }, 0); + }); + isAsync = 1; + break; + default: + depObjs.push(( + (_resets[mid] || []).pop() + || _config.mods[realname(mid)] + || {} + ).exports); + break; + } + } + if (!mod.running) { + // execute module code. arguments: [dep1, dep2, ..., require, exports, module] + _scope = mod; + result = mod.block.apply(mod.host, depObjs) || null; + _scope = false; + exportObj = moduleObj.exports; + mod.exports = result !== undefined ? result : exportObj; // use empty exportObj for "finish" + for (var v in exportObj) { + if (v) { + mod.exports = exportObj; + } + break; + } + } + if (isAsync) { // skip, wait for finish() + mod.running = 1; + break; + } + } +}; + +/** + * @private observer for script loader, prevent duplicate requests + * @param {object} module object + * @param {function} callback + */ +var fetch = function(m, cb){ + var url = m.url, + observers = _scripts[url]; + if (!observers) { + var mname = m.name, delays = _delays; + if (m.deps && m.deps.length && delays[mname] !== 1) { + delays[mname] = [m.deps.length, cb]; + forEach.call(m.deps, function(dep){ + var d = _config.mods[realname(dep)]; + if (this[dep] !== 1 && d.url && d.loaded !== 2) { + if (!this[dep]) { + this[dep] = []; + } + this[dep].push(m); + } else { + delays[mname][0]--; + } + }, _refers); + if (delays[mname][0] > 0) { + return; + } else { + delays[mname] = 1; + } + } + observers = _scripts[url] = [[cb, m]]; + var true_url = /^\w+:\/\//.test(url) ? url + : (_config.enable_ozma && _config.distUrl || _config.baseUrl || '') + + (_config.enableAutoSuffix ? namesuffix(url) : url); + getScript.call(m.host || this, true_url, function(){ + forEach.call(observers, function(args){ + args[0].call(args[1]); + }); + _scripts[url] = 1; + if (_refers[mname] && _refers[mname] !== 1) { + forEach.call(_refers[mname], function(dm){ + var b = this[dm.name]; + if (--b[0] <= 0) { + this[dm.name] = 1; + fetch(dm, b[1]); + } + }, delays); + _refers[mname] = 1; + } + }); + } else if (observers === 1) { + cb.call(m); + } else { + observers.push([cb, m]); + } +}; + +/** + * @private search and sequence all dependencies, based on DFS + * @param {string[]} a set of module names + * @param {object[]} + * @param {object[]} a sequence of modules, for recursion + * @return {object[]} a sequence of modules + */ +function scan(m, file_mod, list){ + list = list || []; + if (!m[0]) { + return list; + } + var deps, + history = list.history; + if (!history) { + history = list.history = {}; + } + if (m[1]) { + deps = m; + m = false; + } else { + var truename, + _mid = m[0], + plugin = _RE_PLUGIN.exec(_mid); + if (plugin) { + _mid = plugin[2]; + plugin = plugin[1]; + } + var mid = realname(_mid); + if (!_config.mods[mid] && !_builtin_mods[mid]) { + var true_mid = realname(basename(_mid, file_mod)); + if (mid !== true_mid) { + _config.mods[file_mod.url + ':' + mid] = true_mid; + mid = true_mid; + } + if (!_config.mods[true_mid]) { + define(true_mid, filesuffix(true_mid)); + } + } + m = file_mod = _config.mods[mid]; + if (m) { + if (plugin === "new") { + m = { + is_reset: true, + deps: m.deps, + name: mid, + newname: plugin + "!" + mid, + host: this + }; + } else { + truename = m.name; + } + if (history[truename]) { + return list; + } + } else { + return list; + } + if (!history[truename]) { + deps = m.deps || []; + // find require information within the code + // for server-side style module + //deps = deps.concat(seek(m)); + if (truename) { + history[truename] = true; + } + } else { + deps = []; + } + } + for (var i = deps.length - 1; i >= 0; i--) { + if (!history[deps[i]]) { + scan.call(this, [deps[i]], file_mod, list); + } + } + if (m) { + tidy(deps, m); + list.push(m); + } + return list; +} + +/** + * @experiment + * @private analyse module code + * to find out dependencies which have no explicit declaration + * @param {object} module object + */ +function seek(block){ + var hdeps = block.hiddenDeps || []; + if (!block.hiddenDeps) { + var code = block.toString(), + h = null; + hdeps = block.hiddenDeps = []; + while (h = _RE_DEPS.exec(code)) { + hdeps.push(h[0].slice(10, -2)); + } + } + return hdeps.slice(); +} + +function tidy(deps, m){ + forEach.call(deps.slice(), function(dep, i){ + var true_mid = this[m.url + ':' + realname(dep)]; + if (typeof true_mid === 'string') { + deps[i] = true_mid; + } + }, _config.mods); +} + +function config(opt){ + for (var i in opt) { + if (i === 'aliases') { + if (!_config[i]) { + _config[i] = {}; + } + for (var j in opt[i]) { + _config[i][j] = opt[i][j]; + } + var mods = _config.mods; + for (var k in mods) { + mods[k].name = realname(k); + mods[mods[k].name] = mods[k]; + } + } else { + _config[i] = opt[i]; + } + } +} + +/** + * @note naming pattern: + * _g_src.js + * _g_combo.js + * + * jquery.js + * jquery_pack.js + * + * _yy_src.pack.js + * _yy_combo.js + * + * _yy_bak.pack.js + * _yy_bak.pack_pack.js + */ +function namesuffix(file){ + return file.replace(/(.+?)(_src.*)?(\.\w+)$/, function($0, $1, $2, $3){ + return $1 + ($2 && '_combo' || '_pack') + $3; + }); +} + +function filesuffix(mid){ + return _RE_SUFFIX.test(mid) ? mid : mid + '.js'; +} + +function realname(mid){ + var alias = _config.aliases; + if (alias) { + mid = mid.replace(_RE_ALIAS_IN_MID, function(e1, e2){ + return alias[e2] || (e2 + '/'); + }); + } + return mid; +} + +function basename(mid, file_mod){ + var rel_path = _RE_RELPATH.exec(mid); + if (rel_path && file_mod) { // resolve relative path in Module ID + mid = (file_mod.url || '').replace(/[^\/]+$/, '') + rel_path[0]; + } + return resolvename(mid); +} + +function resolvename(url){ + url = url.replace(_RE_DOT, '$1'); + var dots, dots_n, url_dup = url, RE_DOTS = /(\.\.\/)+/g; + while (dots = (RE_DOTS.exec(url_dup) || [])[0]) { + dots_n = dots.match(/\.\.\//g).length; + dots = dots.replace(/\./, '\\.'); + url = url.replace(new RegExp('([^/\\.]+/){' + dots_n + '}' + dots), ''); + } + return url.replace(/\/\//g, '/'); +} + +/** + * @public non-blocking script loader + * @param {string} + * @param {object} config + */ +function getScript(url, op){ + var doc = isWindow(this) ? this.document : document, + s = doc.createElement("script"); + s.type = "text/javascript"; + s.async = "async"; //for firefox3.6 + if (!op) + op = {}; + else if (isFunction(op)) + op = { callback: op }; + if (op.charset) + s.charset = op.charset; + s.src = url; + var h = doc.getElementsByTagName("head")[0]; + s.onload = s.onreadystatechange = function(__, isAbort){ + if ( isAbort || !s.readyState || /loaded|complete/.test(s.readyState) ) { + s.onload = s.onreadystatechange = null; + if (h && s.parentNode) { + h.removeChild(s); + } + s = undefined; + if (!isAbort && op.callback) { + op.callback(); + } + } + }; + h.insertBefore(s, h.firstChild); +} + +function isFunction(obj) { + return _toString.call(obj) === "[object Function]"; +} + +function isArray(obj) { + return _toString.call(obj) === "[object Array]"; +} + +function isWindow(obj) { + return "setInterval" in obj; +} + +function clone(obj) { // be careful of using `delete` + function NewObj(){} + NewObj.prototype = obj; + return new NewObj(); +} + +var oz = { + define: define, + require: require, + config: config, + seek: seek, + fetch: fetch, + realname: realname, + basename: basename, + filesuffix: filesuffix, + namesuffix: namesuffix, + // non-core + _getScript: getScript, + _clone: clone, + _forEach: forEach, + _isFunction: isFunction, + _isWindow: isWindow +}; + +require.config = config; +define.amd = {}; + +if (!window.window) { // for nodejs + exports.oz = oz; + exports._config = _config; + // hook for build tool + for (var i in oz) { + exports[i] = oz[i]; + } + var hooking = function(fname){ + return function(){ return exports[fname].apply(this, arguments); }; + }; + exec = hooking('exec'); + fetch = hooking('fetch'); + require = hooking('require'); + require.config = config; +} else { + window.oz = oz; + window.define = define; + window.require = require; +} + +})(); + +require.config({ enable_ozma: true }); + + +/* @source lib/raven-1.0.8.js */; + +/*! Raven.js 1.0.8 | github.com/getsentry/raven-js */ + +/* + * Includes TraceKit + * https://github.com/getsentry/TraceKit + * + * Copyright 2013 Matt Robenolt and other contributors + * Released under the BSD license + * https://github.com/getsentry/raven-js/blob/master/LICENSE + * + */ +/* + TraceKit - Cross brower stack traces - github.com/occ/TraceKit + MIT license +*/ + +;(function(window, undefined) { + + +var TraceKit = {}; +var _oldTraceKit = window.TraceKit; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + + +/** + * _has, a better form of hasOwnProperty + * Example: _has(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function _has(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function _isUndefined(what) { + return typeof what === 'undefined'; +} + +/** + * TraceKit.noConflict: Export TraceKit out to another variable + * Example: var TK = TraceKit.noConflict() + */ +TraceKit.noConflict = function noConflict() { + window.TraceKit = _oldTraceKit; + return TraceKit; +}; + +/** + * TraceKit.wrap: Wrap any function in a TraceKit reporter + * Example: func = TraceKit.wrap(func); + * + * @param {Function} func Function to be wrapped + * @return {Function} The wrapped func + */ +TraceKit.wrap = function traceKitWrapper(func) { + function wrapped() { + try { + return func.apply(this, arguments); + } catch (e) { + TraceKit.report(e); + throw e; + } + } + return wrapped; +}; + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.<string, *>} stack + */ + function notifyHandlers(stack, windowError) { + var exception = null; + if (windowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (_has(handlers, i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler = window.onerror; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} message Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + */ + window.onerror = function traceKitWindowOnError(message, url, lineNo) { + var stack = null; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message); + stack = lastExceptionStack; + lastExceptionStack = null; + lastException = null; + } else { + var location = { + 'url': url, + 'line': lineNo + }; + location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line); + location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line); + stack = { + 'mode': 'onerror', + 'message': message, + 'url': document.location.href, + 'stack': [location], + 'useragent': navigator.userAgent + }; + } + + notifyHandlers(stack, 'from window.onerror'); + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + }; + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + */ + function report(ex) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + var s = lastExceptionStack; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [s, null].concat(args)); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + window.setTimeout(function () { + if (lastException === ex) { + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [stack, null].concat(args)); + } + }, (stack.incomplete ? 2000 : 0)); + + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + return report; +}()); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace.ofCaller([depth]) + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line# + * s.mode - 'stack', 'stacktrace', 'multiline', 'callers', 'onerror', or 'failed' -- method used to collect the stack trace + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + * Tracing example: + * function trace(message) { + * var stackInfo = TraceKit.computeStackTrace.ofCaller(); + * var data = message + "\n"; + * for(var i in stackInfo.stack) { + * var item = stackInfo.stack[i]; + * data += (item.func || '[anonymous]') + "() in " + item.url + ":" + (item.line || '0') + "\n"; + * } + * if (window.console) + * console.info(data); + * else + * alert(data); + * } + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + var debug = false, + sourceCache = {}; + + /** + * Attempts to retrieve source code via XMLHttpRequest, which is used + * to look up anonymous function names. + * @param {string} url URL of source code. + * @return {string} Source contents. + */ + function loadSource(url) { + if (!TraceKit.remoteFetching) { //Only attempt request if remoteFetching is on. + return ''; + } + try { + function getXHR() { + try { + return new window.XMLHttpRequest(); + } catch (e) { + // explicitly bubble up the exception if not found + return new window.ActiveXObject('Microsoft.XMLHTTP'); + } + } + + var request = getXHR(); + request.open('GET', url, false); + request.send(''); + return request.responseText; + } catch (e) { + return ''; + } + } + + /** + * Retrieves source code from the source code cache. + * @param {string} url URL of source code. + * @return {Array.<string>} Source contents. + */ + function getSource(url) { + if (!_has(sourceCache, url)) { + // URL needs to be able to fetched within the acceptable domain. Otherwise, + // cross-domain errors will be triggered. + var source = ''; + if (url.indexOf(document.domain) !== -1) { + source = loadSource(url); + } + sourceCache[url] = source ? source.split('\n') : []; + } + + return sourceCache[url]; + } + + /** + * Tries to use an externally loaded copy of source code to determine + * the name of a function by looking at the name of the variable it was + * assigned to, if any. + * @param {string} url URL of source code. + * @param {(string|number)} lineNo Line number in source code. + * @return {string} The function name, if discoverable. + */ + function guessFunctionName(url, lineNo) { + var reFunctionArgNames = /function ([^(]*)\(([^)]*)\)/, + reGuessFunction = /['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/, + line = '', + maxLines = 10, + source = getSource(url), + m; + + if (!source.length) { + return UNKNOWN_FUNCTION; + } + + // Walk backwards from the first line in the function until we find the line which + // matches the pattern above, which is the function definition + for (var i = 0; i < maxLines; ++i) { + line = source[lineNo - i] + line; + + if (!_isUndefined(line)) { + if ((m = reGuessFunction.exec(line))) { + return m[1]; + } else if ((m = reFunctionArgNames.exec(line))) { + return m[1]; + } + } + } + + return UNKNOWN_FUNCTION; + } + + /** + * Retrieves the surrounding lines from where an exception occurred. + * @param {string} url URL of source code. + * @param {(string|number)} line Line number in source code to centre + * around for context. + * @return {?Array.<string>} Lines of source code. + */ + function gatherContext(url, line) { + var source = getSource(url); + + if (!source.length) { + return null; + } + + var context = [], + // linesBefore & linesAfter are inclusive with the offending line. + // if linesOfContext is even, there will be one extra line + // *before* the offending line. + linesBefore = Math.floor(TraceKit.linesOfContext / 2), + // Add one extra line if linesOfContext is odd + linesAfter = linesBefore + (TraceKit.linesOfContext % 2), + start = Math.max(0, line - linesBefore - 1), + end = Math.min(source.length, line + linesAfter - 1); + + line -= 1; // convert to 0-based index + + for (var i = start; i < end; ++i) { + if (!_isUndefined(source[i])) { + context.push(source[i]); + } + } + + return context.length > 0 ? context : null; + } + + /** + * Escapes special characters, except for whitespace, in a string to be + * used inside a regular expression as a string literal. + * @param {string} text The string. + * @return {string} The escaped string literal. + */ + function escapeRegExp(text) { + return text.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g, '\\$&'); + } + + /** + * Escapes special characters in a string to be used inside a regular + * expression as a string literal. Also ensures that HTML entities will + * be matched the same as their literal friends. + * @param {string} body The string. + * @return {string} The escaped string. + */ + function escapeCodeAsRegExpForMatchingInsideHTML(body) { + return escapeRegExp(body).replace('<', '(?:<|<)').replace('>', '(?:>|>)').replace('&', '(?:&|&)').replace('"', '(?:"|")').replace(/\s+/g, '\\s+'); + } + + /** + * Determines where a code fragment occurs in the source code. + * @param {RegExp} re The function definition. + * @param {Array.<string>} urls A list of URLs to search. + * @return {?Object.<string, (string|number)>} An object containing + * the url, line, and column number of the defined function. + */ + function findSourceInUrls(re, urls) { + var source, m; + for (var i = 0, j = urls.length; i < j; ++i) { + // console.log('searching', urls[i]); + if ((source = getSource(urls[i])).length) { + source = source.join('\n'); + if ((m = re.exec(source))) { + // console.log('Found function in ' + urls[i]); + + return { + 'url': urls[i], + 'line': source.substring(0, m.index).split('\n').length, + 'column': m.index - source.lastIndexOf('\n', m.index) - 1 + }; + } + } + } + + // console.log('no match'); + + return null; + } + + /** + * Determines at which column a code fragment occurs on a line of the + * source code. + * @param {string} fragment The code fragment. + * @param {string} url The URL to search. + * @param {(string|number)} line The line number to examine. + * @return {?number} The column number. + */ + function findSourceInLine(fragment, url, line) { + var source = getSource(url), + re = new RegExp('\\b' + escapeRegExp(fragment) + '\\b'), + m; + + line -= 1; + + if (source && source.length > line && (m = re.exec(source[line]))) { + return m.index; + } + + return null; + } + + /** + * Determines where a function was defined within the source code. + * @param {(Function|string)} func A function reference or serialized + * function definition. + * @return {?Object.<string, (string|number)>} An object containing + * the url, line, and column number of the defined function. + */ + function findSourceByFunctionBody(func) { + var urls = [window.location.href], + scripts = document.getElementsByTagName('script'), + body, + code = '' + func, + codeRE = /^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/, + eventRE = /^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/, + re, + parts, + result; + + for (var i = 0; i < scripts.length; ++i) { + var script = scripts[i]; + if (script.src) { + urls.push(script.src); + } + } + + if (!(parts = codeRE.exec(code))) { + re = new RegExp(escapeRegExp(code).replace(/\s+/g, '\\s+')); + } + + // not sure if this is really necessary, but I don’t have a test + // corpus large enough to confirm that and it was in the original. + else { + var name = parts[1] ? '\\s+' + parts[1] : '', + args = parts[2].split(',').join('\\s*,\\s*'); + + body = escapeRegExp(parts[3]).replace(/;$/, ';?'); // semicolon is inserted if the function ends with a comment.replace(/\s+/g, '\\s+'); + re = new RegExp('function' + name + '\\s*\\(\\s*' + args + '\\s*\\)\\s*{\\s*' + body + '\\s*}'); + } + + // look for a normal function definition + if ((result = findSourceInUrls(re, urls))) { + return result; + } + + // look for an old-school event handler function + if ((parts = eventRE.exec(code))) { + var event = parts[1]; + body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]); + + // look for a function defined in HTML as an onXXX handler + re = new RegExp('on' + event + '=[\\\'"]\\s*' + body + '\\s*[\\\'"]', 'i'); + + if ((result = findSourceInUrls(re, urls[0]))) { + return result; + } + + // look for ??? + re = new RegExp(body); + + if ((result = findSourceInUrls(re, urls))) { + return result; + } + } + + return null; + } + + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.<string, *>} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (!ex.stack) { + return null; + } + + var chrome = /^\s*at (?:((?:\[object object\])?\S+) )?\(?((?:file|http|https):.*?):(\d+)(?::(\d+))?\)?\s*$/i, + gecko = /^\s*(\S*)(?:\((.*?)\))?@((?:file|http|https).*?):(\d+)(?::(\d+))?\s*$/i, + lines = ex.stack.split('\n'), + stack = [], + parts, + element, + reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = gecko.exec(lines[i]))) { + element = { + 'url': parts[3], + 'func': parts[1] || UNKNOWN_FUNCTION, + 'args': parts[2] ? parts[2].split(',') : '', + 'line': +parts[4], + 'column': parts[5] ? +parts[5] : null + }; + } else if ((parts = chrome.exec(lines[i]))) { + element = { + 'url': parts[2], + 'func': parts[1] || UNKNOWN_FUNCTION, + 'line': +parts[3], + 'column': parts[4] ? +parts[4] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = guessFunctionName(element.url, element.line); + } + + if (element.line) { + element.context = gatherContext(element.url, element.line); + } + + stack.push(element); + } + + if (stack[0] && stack[0].line && !stack[0].column && reference) { + stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line); + } + + if (!stack.length) { + return null; + } + + return { + 'mode': 'stack', + 'name': ex.name, + 'message': ex.message, + 'url': document.location.href, + 'stack': stack, + 'useragent': navigator.userAgent + }; + } + + /** + * Computes stack trace information from the stacktrace property. + * Opera 10 uses this property. + * @param {Error} ex + * @return {?Object.<string, *>} Stack trace information. + */ + function computeStackTraceFromStacktraceProp(ex) { + // Access and store the stacktrace property before doing ANYTHING + // else to it because Opera is not very good at providing it + // reliably in other circumstances. + var stacktrace = ex.stacktrace; + + var testRE = / line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i, + lines = stacktrace.split('\n'), + stack = [], + parts; + + for (var i = 0, j = lines.length; i < j; i += 2) { + if ((parts = testRE.exec(lines[i]))) { + var element = { + 'line': +parts[1], + 'column': +parts[2], + 'func': parts[3] || parts[4], + 'args': parts[5] ? parts[5].split(',') : [], + 'url': parts[6] + }; + + if (!element.func && element.line) { + element.func = guessFunctionName(element.url, element.line); + } + if (element.line) { + try { + element.context = gatherContext(element.url, element.line); + } catch (exc) {} + } + + if (!element.context) { + element.context = [lines[i + 1]]; + } + + stack.push(element); + } + } + + if (!stack.length) { + return null; + } + + return { + 'mode': 'stacktrace', + 'name': ex.name, + 'message': ex.message, + 'url': document.location.href, + 'stack': stack, + 'useragent': navigator.userAgent + }; + } + + /** + * NOT TESTED. + * Computes stack trace information from an error message that includes + * the stack trace. + * Opera 9 and earlier use this method if the option to show stack + * traces is turned on in opera:config. + * @param {Error} ex + * @return {?Object.<string, *>} Stack information. + */ + function computeStackTraceFromOperaMultiLineMessage(ex) { + // Opera includes a stack trace into the exception message. An example is: + // + // Statement on line 3: Undefined variable: undefinedFunc + // Backtrace: + // Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz + // undefinedFunc(a); + // Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy + // zzz(x, y, z); + // Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx + // yyy(a, a, a); + // Line 1 of function script + // try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); } + // ... + + var lines = ex.message.split('\n'); + if (lines.length < 4) { + return null; + } + + var lineRE1 = /^\s*Line (\d+) of linked script ((?:file|http|https)\S+)(?:: in function (\S+))?\s*$/i, + lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|http|https)\S+)(?:: in function (\S+))?\s*$/i, + lineRE3 = /^\s*Line (\d+) of function script\s*$/i, + stack = [], + scripts = document.getElementsByTagName('script'), + inlineScriptBlocks = [], + parts, + i, + len, + source; + + for (i in scripts) { + if (_has(scripts, i) && !scripts[i].src) { + inlineScriptBlocks.push(scripts[i]); + } + } + + for (i = 2, len = lines.length; i < len; i += 2) { + var item = null; + if ((parts = lineRE1.exec(lines[i]))) { + item = { + 'url': parts[2], + 'func': parts[3], + 'line': +parts[1] + }; + } else if ((parts = lineRE2.exec(lines[i]))) { + item = { + 'url': parts[3], + 'func': parts[4] + }; + var relativeLine = (+parts[1]); // relative to the start of the <SCRIPT> block + var script = inlineScriptBlocks[parts[2] - 1]; + if (script) { + source = getSource(item.url); + if (source) { + source = source.join('\n'); + var pos = source.indexOf(script.innerText); + if (pos >= 0) { + item.line = relativeLine + source.substring(0, pos).split('\n').length; + } + } + } + } else if ((parts = lineRE3.exec(lines[i]))) { + var url = window.location.href.replace(/#.*$/, ''), + line = parts[1]; + var re = new RegExp(escapeCodeAsRegExpForMatchingInsideHTML(lines[i + 1])); + source = findSourceInUrls(re, [url]); + item = { + 'url': url, + 'line': source ? source.line : line, + 'func': '' + }; + } + + if (item) { + if (!item.func) { + item.func = guessFunctionName(item.url, item.line); + } + var context = gatherContext(item.url, item.line); + var midline = (context ? context[Math.floor(context.length / 2)] : null); + if (context && midline.replace(/^\s*/, '') === lines[i + 1].replace(/^\s*/, '')) { + item.context = context; + } else { + // if (context) alert("Context mismatch. Correct midline:\n" + lines[i+1] + "\n\nMidline:\n" + midline + "\n\nContext:\n" + context.join("\n") + "\n\nURL:\n" + item.url); + item.context = [lines[i + 1]]; + } + stack.push(item); + } + } + if (!stack.length) { + return null; // could not parse multiline exception message as Opera stack trace + } + + return { + 'mode': 'multiline', + 'name': ex.name, + 'message': lines[0], + 'url': document.location.href, + 'stack': stack, + 'useragent': navigator.userAgent + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.<string, *>} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + 'url': url, + 'line': lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = guessFunctionName(initial.url, initial.line); + } + + if (!initial.context) { + initial.context = gatherContext(initial.url, initial.line); + } + + var reference = / '([^']+)' /.exec(message); + if (reference) { + initial.column = findSourceInLine(reference[1], initial.url, initial.line); + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === initial.func) { + stackInfo.stack[0].line = initial.line; + stackInfo.stack[0].context = initial.context; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.<string, *>} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item, + source; + + for (var curr = computeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + 'url': null, + 'func': UNKNOWN_FUNCTION, + 'line': null, + 'column': null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if ((source = findSourceByFunctionBody(curr))) { + item.url = source.url; + item.line = source.line; + + if (item.func === UNKNOWN_FUNCTION) { + item.func = guessFunctionName(item.url, item.line); + } + + var reference = / '([^']+)' /.exec(ex.message || ex.description); + if (reference) { + item.column = findSourceInLine(reference[1], source.url, source.line); + } + } + + if (funcs['' + curr]) { + recursion = true; + }else{ + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + 'mode': 'callers', + 'name': ex.name, + 'message': ex.message, + 'url': document.location.href, + 'stack': stack, + 'useragent': navigator.userAgent + }; + augmentStackTraceWithInitialElement(result, ex.sourceURL || ex.fileName, ex.line || ex.lineNumber, ex.message || ex.description); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = (depth == null ? 0 : +depth); + + try { + // This must be tried first because Opera 10 *destroys* + // its stacktrace property if you try to access the stack + // property first!! + stack = computeStackTraceFromStacktraceProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (debug) { + throw e; + } + } + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (debug) { + throw e; + } + } + + try { + stack = computeStackTraceFromOperaMultiLineMessage(ex); + if (stack) { + return stack; + } + } catch (e) { + if (debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (debug) { + throw e; + } + } + + return { + 'mode': 'failed' + }; + } + + /** + * Logs a stacktrace starting from the previous call and working down. + * @param {(number|string)=} depth How many frames deep to trace. + * @return {Object.<string, *>} Stack trace information. + */ + function computeStackTraceOfCaller(depth) { + depth = (depth == null ? 0 : +depth) + 1; // "+ 1" because "ofCaller" should drop one frame + try { + throw new Error(); + } catch (ex) { + return computeStackTrace(ex, depth + 1); + } + + return null; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.guessFunctionName = guessFunctionName; + computeStackTrace.gatherContext = gatherContext; + computeStackTrace.ofCaller = computeStackTraceOfCaller; + + return computeStackTrace; +}()); + +/** + * Extends support for global error handling for asynchronous browser + * functions. Adopted from Closure Library's errorhandler.js + */ +(function extendToAsynchronousCallbacks() { + var _helper = function _helper(fnName) { + var originalFn = window[fnName]; + window[fnName] = function traceKitAsyncExtension() { + // Make a copy of the arguments + var args = _slice.call(arguments); + var originalCallback = args[0]; + if (typeof (originalCallback) === 'function') { + args[0] = TraceKit.wrap(originalCallback); + } + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also only supports 2 argument and doesn't care what "this" is, so we + // can just call the original function directly. + if (originalFn.apply) { + return originalFn.apply(this, args); + } else { + return originalFn(args[0], args[1]); + } + }; + }; + + _helper('setTimeout'); + _helper('setInterval'); +}()); + +/** + * Extended support for backtraces and global error handling for most + * asynchronous jQuery functions. + */ +(function traceKitAsyncForjQuery($) { + + // quit if jQuery isn't on the page + if (!$) { + return; + } + + var _oldEventAdd = $.event.add; + $.event.add = function traceKitEventAdd(elem, types, handler, data, selector) { + var _handler; + + if (handler.handler) { + _handler = handler.handler; + handler.handler = TraceKit.wrap(handler.handler); + } else { + _handler = handler; + handler = TraceKit.wrap(handler); + } + + // If the handler we are attaching doesn’t have the same guid as + // the original, it will never be removed when someone tries to + // unbind the original function later. Technically as a result of + // this our guids are no longer globally unique, but whatever, that + // never hurt anybody RIGHT?! + if (_handler.guid) { + handler.guid = _handler.guid; + } else { + handler.guid = _handler.guid = $.guid++; + } + + return _oldEventAdd.call(this, elem, types, handler, data, selector); + }; + + var _oldReady = $.fn.ready; + $.fn.ready = function traceKitjQueryReadyWrapper(fn) { + return _oldReady.call(this, TraceKit.wrap(fn)); + }; + + var _oldAjax = $.ajax; + $.ajax = function traceKitAjaxWrapper(url, options) { + var keys = ['complete', 'error', 'success'], key; + + // Taken from https://github.com/jquery/jquery/blob/eee2eaf1d7a189d99106423a4206c224ebd5b848/src/ajax.js#L311-L318 + // If url is an object, simulate pre-1.5 signature + if (typeof url === 'object') { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + while(key = keys.pop()) { + if ($.isFunction(options[key])) { + options[key] = TraceKit.wrap(options[key]); + } + } + + try { + return _oldAjax.call(this, url, options); + } catch (e) { + TraceKit.report(e); + throw e; + } + }; + +}(window.jQuery)); + +//Default options: +if (!TraceKit.remoteFetching) { + TraceKit.remoteFetching = true; +} +if (!TraceKit.collectWindowErrors) { + TraceKit.collectWindowErrors = true; +} +if (!TraceKit.linesOfContext || TraceKit.linesOfContext < 1) { + // 5 lines before, the offending line, 5 lines after + TraceKit.linesOfContext = 11; +} + + + +// Export to global object +window.TraceKit = TraceKit; + +}(window)); +;(function(window, undefined){ +'use strict'; + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +var _Raven = window.Raven, + hasJSON = !isUndefined(window.JSON), + globalServer, + globalUser, + globalKey, + globalProject, + globalOptions = { + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [] + }; + +var TK = TraceKit.noConflict(); + +// Disable Tracekit's remote fetching by default +TK.remoteFetching = false; + +/* + * The core Raven singleton + * + * @this {Raven} + */ +var Raven = { + VERSION: '1.0.8', + + /* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ + noConflict: function() { + window.Raven = _Raven; + return Raven; + }, + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Optional set of of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var uri = parseUri(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + if (options && options.ignoreErrors && window.console && console.warn) { + console.warn('DeprecationWarning: `ignoreErrors` is going to be removed soon.'); + } + + // merge in options + if (options) { + each(options, function(key, value){ + globalOptions[key] = value; + }); + } + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push('Script error.'); + + globalKey = uri.user; + globalProject = ~~uri.path.substr(lastSlash + 1); + + // assemble the endpoint from the uri pieces + globalServer = '//' + uri.host + + (uri.port ? ':' + uri.port : '') + + '/' + path + 'api/' + globalProject + '/store/'; + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + + if (globalOptions.fetchContext) { + TK.remoteFetching = true; + } + + // return for chaining + return Raven; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + if (!isSetup()) return; + + TK.report.subscribe(handleStackInfo); + + return Raven; + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + Raven.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func) { + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + return function() { + try { + func.apply(this, arguments); + } catch(e) { + Raven.captureException(e, options); + throw e; + } + }; + }, + + /* + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + TK.report.unsubscribe(handleStackInfo); + + return Raven; + }, + + /* + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + // If a string is passed through, recall as a message + if (typeof ex === 'string') { + return Raven.captureMessage(ex, options); + } + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + TK.report(ex, options); + } catch(ex1) { + if(ex !== ex1) { + throw ex1; + } + } + + return Raven; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // Fire away! + send( + arrayMerge({ + message: msg + }, options) + ); + + return Raven; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUser: function(user) { + globalUser = user; + + return Raven; + } +}; + +var uriKeys = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' '), + uriPattern = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + +/**** Private functions ****/ +function parseUri(str) { + var m = uriPattern.exec(str), + uri = {}, + i = 14; + + while (i--) uri[uriKeys[i]] = m[i] || ''; + + return uri; +} + +function isUndefined(what) { + return typeof what === 'undefined'; +} + +function isFunction(what) { + return typeof what === 'function'; +} + +function each(obj, callback) { + var i, j; + + if (isUndefined(obj.length)) { + for (i in obj) { + if (obj.hasOwnProperty(i)) { + callback.call(null, i, obj[i]); + } + } + } else { + for (i = 0, j = obj.length; i < j; i++) { + callback.call(null, i, obj[i]); + } + } +} + +var cachedAuth; + +function getAuthQueryString() { + if (cachedAuth) return cachedAuth; + + var qs = [ + 'sentry_version=2.0', + 'sentry_client=raven-js/' + Raven.VERSION + ]; + if (globalKey) { + qs.push('sentry_key=' + globalKey); + } + + cachedAuth = '?' + qs.join('&'); + return cachedAuth; +} + +function handleStackInfo(stackInfo, options) { + var frames = [], + i = 0, + j, frame; + + if (stackInfo.stack && (j = stackInfo.stack.length)) { + for (; i < j; i++) { + frame = normalizeFrame(stackInfo.stack[i]); + if (frame) { + frames.push(frame); + } + } + } + + processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); +} + +function normalizeFrame(frame) { + if (!frame.url) return; + + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + 'function': frame.func || '?' + }, context = extractContextFromFrame(frame); + + if (context) { + var i = 3, keys = ['pre_context', 'context_line', 'post_context']; + while (i--) normalized[keys[i]] = context[i]; + } + + normalized.in_app = !/(Raven|TraceKit)\./.test(normalized['function']); + + return normalized; +} + +function extractContextFromFrame(frame) { + // immediately check if we should even attempt to parse a context + if (!frame.context || !globalOptions.fetchContext) return; + + var context = frame.context, + pivot = ~~(context.length / 2), + i = context.length, isMinified = false; + + while (i--) { + // We're making a guess to see if the source is minified or not. + // To do that, we make the assumption if *any* of the lines passed + // in are greater than 300 characters long, we bail. + // Sentry will see that there isn't a context + if (context[i].length > 300) { + isMinified = true; + break; + } + } + + if (isMinified) { + // The source is minified and we don't know which column. Fuck it. + if (isUndefined(frame.column)) return; + + // If the source is minified and has a frame column + // we take a chunk of the offending line to hopefully shed some light + return [ + [], // no pre_context + context[pivot].substr(frame.column, 50), // grab 50 characters, starting at the offending column + [] // no post_context + ]; + } + + return [ + context.slice(0, pivot), // pre_context + context[pivot], // context_line + context.slice(pivot + 1) // post_context + ]; +} + +function processException(type, message, fileurl, lineno, frames, options) { + var stacktrace, label, i; + + // IE8 really doesn't have Array.prototype.indexOf + // Filter out a message that matches our ignore list + i = globalOptions.ignoreErrors.length; + while (i--) { + if (message === globalOptions.ignoreErrors[i]) { + return; + } + } + + if (frames && frames.length) { + stacktrace = {frames: frames}; + fileurl = fileurl || frames[0].filename; + } else if (fileurl) { + stacktrace = { + frames: [{ + filename: fileurl, + lineno: lineno + }] + }; + } + + i = globalOptions.ignoreUrls.length; + while (i--) { + if (globalOptions.ignoreUrls[i].test(fileurl)) { + return; + } + } + + label = lineno ? message + ' at ' + lineno : message; + + // Fire away! + send( + arrayMerge({ + 'sentry.interfaces.Exception': { + type: type, + value: message + }, + 'sentry.interfaces.Stacktrace': stacktrace, + culprit: fileurl, + message: label + }, options) + ); +} + +function arrayMerge(arr1, arr2) { + if (!arr2) { + return arr1; + } + each(arr2, function(key, value){ + arr1[key] = value; + }); + return arr1; +} + +function getHttpData() { + var http = { + url: window.location.href, + headers: { + 'User-Agent': navigator.userAgent + } + }; + + if (window.document.referrer) { + http.headers.Referer = window.document.referrer; + } + + return http; +} + +function send(data) { + if (!isSetup()) return; + + data = arrayMerge({ + project: globalProject, + logger: globalOptions.logger, + site: globalOptions.site, + platform: 'javascript', + 'sentry.interfaces.Http': getHttpData() + }, data); + + if (globalUser) data['sentry.interfaces.User'] = globalUser; + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data); + } + + makeRequest(data); +} + +function makeRequest(data) { + new Image().src = globalServer + getAuthQueryString() + '&sentry_data=' + encodeURIComponent(JSON.stringify(data)); +} + +function isSetup() { + if (!hasJSON) return false; // needs JSON support + if (!globalServer) { + if (window.console && console.error) { + console.error("Error: Raven has not been configured."); + } + return false; + } + return true; +} + +// Expose Raven to the world +window.Raven = Raven; + +// AMD +if (typeof define === 'function' && define.amd) { + define('raven', [], function() { return Raven; }); +} + +})(window); + +/* @source */; + +require.config({ + baseUrl: '/js/' +}); +define('raven', 'lib/raven-1.0.8.js'); + +require( + ['raven'], + function(Raven) { + // app.yaml + var sentry_dsn = "http://dda66d28e34741e6ba430d44deebbeba@onimaru-stable.intra.douban.com/10"; + var options = { + includePaths: [/https?:\/\/code\.dapps\.douban\.com/] + }; + Raven.config(sentry_dsn, options).install(); + } +) diff --git a/dist/js/mod/register.js b/dist/js/mod/register.js new file mode 100644 index 0000000..731e2a4 --- /dev/null +++ b/dist/js/mod/register.js @@ -0,0 +1,22160 @@ +webpackJsonp([1],[ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _reactDom = __webpack_require__(1); + + var _reactDom2 = _interopRequireDefault(_reactDom); + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _signup = __webpack_require__(168); + + var _signup2 = _interopRequireDefault(_signup); + + _reactDom2['default'].render(_react2['default'].createElement(_signup2['default'], null), document.getElementById('main')); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(2); + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOM + */ + + /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactDOMTextComponent = __webpack_require__(5); + var ReactDefaultInjection = __webpack_require__(70); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMount = __webpack_require__(27); + var ReactPerf = __webpack_require__(17); + var ReactReconciler = __webpack_require__(49); + var ReactUpdates = __webpack_require__(53); + var ReactVersion = __webpack_require__(145); + + var findDOMNode = __webpack_require__(90); + var renderSubtreeIntoContainer = __webpack_require__(146); + var warning = __webpack_require__(24); + + ReactDefaultInjection.inject(); + + var render = ReactPerf.measure('React', 'render', ReactMount.render); + + var React = { + findDOMNode: findDOMNode, + render: render, + unmountComponentAtNode: ReactMount.unmountComponentAtNode, + version: ReactVersion, + + /* eslint-disable camelcase */ + unstable_batchedUpdates: ReactUpdates.batchedUpdates, + unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer + }; + + // Inject the runtime into a devtools global hook regardless of browser. + // Allows for debugging when the hook is injected on the page. + /* eslint-enable camelcase */ + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') { + __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ + CurrentOwner: ReactCurrentOwner, + InstanceHandles: ReactInstanceHandles, + Mount: ReactMount, + Reconciler: ReactReconciler, + TextComponent: ReactDOMTextComponent + }); + } + + if (process.env.NODE_ENV !== 'production') { + var ExecutionEnvironment = __webpack_require__(8); + if (ExecutionEnvironment.canUseDOM && window.top === window.self) { + + // First check if devtools is not installed + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { + // If we're in Chrome or Firefox, provide a download link if not installed. + if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) { + console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools'); + } + } + + // If we're in IE8, check to see if we are in compatibility mode and provide + // information on preventing compatibility mode + var ieCompatibilityMode = document.documentMode && document.documentMode < 8; + + process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv="X-UA-Compatible" content="IE=edge" />') : undefined; + + var expectedFeatures = [ + // shims + Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim, + + // shams + Object.create, Object.freeze]; + + for (var i = 0; i < expectedFeatures.length; i++) { + if (!expectedFeatures[i]) { + console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills'); + break; + } + } + } + } + + module.exports = React; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 3 */ +/***/ function(module, exports) { + + // shim for using process in browser + + var process = module.exports = {}; + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = setTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + clearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + setTimeout(drainQueue, 0); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function() { return 0; }; + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactCurrentOwner + */ + + 'use strict'; + + /** + * Keeps track of the current owner. + * + * The current owner is the component who should own any components that are + * currently being constructed. + */ + var ReactCurrentOwner = { + + /** + * @internal + * @type {ReactComponent} + */ + current: null + + }; + + module.exports = ReactCurrentOwner; + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMTextComponent + * @typechecks static-only + */ + + 'use strict'; + + var DOMChildrenOperations = __webpack_require__(6); + var DOMPropertyOperations = __webpack_require__(21); + var ReactComponentBrowserEnvironment = __webpack_require__(25); + var ReactMount = __webpack_require__(27); + + var assign = __webpack_require__(38); + var escapeTextContentForBrowser = __webpack_require__(20); + var setTextContent = __webpack_require__(19); + var validateDOMNesting = __webpack_require__(69); + + /** + * Text nodes violate a couple assumptions that React makes about components: + * + * - When mounting text into the DOM, adjacent text nodes are merged. + * - Text nodes cannot be assigned a React root ID. + * + * This component is used to wrap strings in elements so that they can undergo + * the same reconciliation that is applied to elements. + * + * TODO: Investigate representing React components in the DOM with text nodes. + * + * @class ReactDOMTextComponent + * @extends ReactComponent + * @internal + */ + var ReactDOMTextComponent = function (props) { + // This constructor and its argument is currently used by mocks. + }; + + assign(ReactDOMTextComponent.prototype, { + + /** + * @param {ReactText} text + * @internal + */ + construct: function (text) { + // TODO: This is really a ReactText (ReactNode), not a ReactElement + this._currentElement = text; + this._stringText = '' + text; + + // Properties + this._rootNodeID = null; + this._mountIndex = 0; + }, + + /** + * Creates the markup for this text node. This node is not intended to have + * any features besides containing text content. + * + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {string} Markup for this text node. + * @internal + */ + mountComponent: function (rootID, transaction, context) { + if (process.env.NODE_ENV !== 'production') { + if (context[validateDOMNesting.ancestorInfoContextKey]) { + validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]); + } + } + + this._rootNodeID = rootID; + if (transaction.useCreateElement) { + var ownerDocument = context[ReactMount.ownerDocumentContextKey]; + var el = ownerDocument.createElement('span'); + DOMPropertyOperations.setAttributeForID(el, rootID); + // Populate node cache + ReactMount.getID(el); + setTextContent(el, this._stringText); + return el; + } else { + var escapedText = escapeTextContentForBrowser(this._stringText); + + if (transaction.renderToStaticMarkup) { + // Normally we'd wrap this in a `span` for the reasons stated above, but + // since this is a situation where React won't take over (static pages), + // we can simply return the text as it is. + return escapedText; + } + + return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>'; + } + }, + + /** + * Updates this component by updating the text content. + * + * @param {ReactText} nextText The next text content + * @param {ReactReconcileTransaction} transaction + * @internal + */ + receiveComponent: function (nextText, transaction) { + if (nextText !== this._currentElement) { + this._currentElement = nextText; + var nextStringText = '' + nextText; + if (nextStringText !== this._stringText) { + // TODO: Save this as pending props and use performUpdateIfNecessary + // and/or updateComponent to do the actual update for consistency with + // other component types? + this._stringText = nextStringText; + var node = ReactMount.getNode(this._rootNodeID); + DOMChildrenOperations.updateTextContent(node, nextStringText); + } + } + }, + + unmountComponent: function () { + ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID); + } + + }); + + module.exports = ReactDOMTextComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMChildrenOperations + * @typechecks static-only + */ + + 'use strict'; + + var Danger = __webpack_require__(7); + var ReactMultiChildUpdateTypes = __webpack_require__(15); + var ReactPerf = __webpack_require__(17); + + var setInnerHTML = __webpack_require__(18); + var setTextContent = __webpack_require__(19); + var invariant = __webpack_require__(12); + + /** + * Inserts `childNode` as a child of `parentNode` at the `index`. + * + * @param {DOMElement} parentNode Parent node in which to insert. + * @param {DOMElement} childNode Child node to insert. + * @param {number} index Index at which to insert the child. + * @internal + */ + function insertChildAt(parentNode, childNode, index) { + // By exploiting arrays returning `undefined` for an undefined index, we can + // rely exclusively on `insertBefore(node, null)` instead of also using + // `appendChild(node)`. However, using `undefined` is not allowed by all + // browsers so we must replace it with `null`. + + // fix render order error in safari + // IE8 will throw error when index out of list size. + var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index); + + parentNode.insertBefore(childNode, beforeChild); + } + + /** + * Operations for updating with DOM children. + */ + var DOMChildrenOperations = { + + dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup, + + updateTextContent: setTextContent, + + /** + * Updates a component's children by processing a series of updates. The + * update configurations are each expected to have a `parentNode` property. + * + * @param {array<object>} updates List of update configurations. + * @param {array<string>} markupList List of markup strings. + * @internal + */ + processUpdates: function (updates, markupList) { + var update; + // Mapping from parent IDs to initial child orderings. + var initialChildren = null; + // List of children that will be moved or removed. + var updatedChildren = null; + + for (var i = 0; i < updates.length; i++) { + update = updates[i]; + if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) { + var updatedIndex = update.fromIndex; + var updatedChild = update.parentNode.childNodes[updatedIndex]; + var parentID = update.parentID; + + !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined; + + initialChildren = initialChildren || {}; + initialChildren[parentID] = initialChildren[parentID] || []; + initialChildren[parentID][updatedIndex] = updatedChild; + + updatedChildren = updatedChildren || []; + updatedChildren.push(updatedChild); + } + } + + var renderedMarkup; + // markupList is either a list of markup or just a list of elements + if (markupList.length && typeof markupList[0] === 'string') { + renderedMarkup = Danger.dangerouslyRenderMarkup(markupList); + } else { + renderedMarkup = markupList; + } + + // Remove updated children first so that `toIndex` is consistent. + if (updatedChildren) { + for (var j = 0; j < updatedChildren.length; j++) { + updatedChildren[j].parentNode.removeChild(updatedChildren[j]); + } + } + + for (var k = 0; k < updates.length; k++) { + update = updates[k]; + switch (update.type) { + case ReactMultiChildUpdateTypes.INSERT_MARKUP: + insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex); + break; + case ReactMultiChildUpdateTypes.MOVE_EXISTING: + insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex); + break; + case ReactMultiChildUpdateTypes.SET_MARKUP: + setInnerHTML(update.parentNode, update.content); + break; + case ReactMultiChildUpdateTypes.TEXT_CONTENT: + setTextContent(update.parentNode, update.content); + break; + case ReactMultiChildUpdateTypes.REMOVE_NODE: + // Already removed by the for-loop above. + break; + } + } + } + + }; + + ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', { + updateTextContent: 'updateTextContent' + }); + + module.exports = DOMChildrenOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Danger + * @typechecks static-only + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var createNodesFromMarkup = __webpack_require__(9); + var emptyFunction = __webpack_require__(14); + var getMarkupWrap = __webpack_require__(13); + var invariant = __webpack_require__(12); + + var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/; + var RESULT_INDEX_ATTR = 'data-danger-index'; + + /** + * Extracts the `nodeName` from a string of markup. + * + * NOTE: Extracting the `nodeName` does not require a regular expression match + * because we make assumptions about React-generated markup (i.e. there are no + * spaces surrounding the opening tag and there is at least one attribute). + * + * @param {string} markup String of markup. + * @return {string} Node name of the supplied markup. + * @see http://jsperf.com/extract-nodename + */ + function getNodeName(markup) { + return markup.substring(1, markup.indexOf(' ')); + } + + var Danger = { + + /** + * Renders markup into an array of nodes. The markup is expected to render + * into a list of root nodes. Also, the length of `resultList` and + * `markupList` should be the same. + * + * @param {array<string>} markupList List of markup strings to render. + * @return {array<DOMElement>} List of rendered nodes. + * @internal + */ + dangerouslyRenderMarkup: function (markupList) { + !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined; + var nodeName; + var markupByNodeName = {}; + // Group markup by `nodeName` if a wrap is necessary, else by '*'. + for (var i = 0; i < markupList.length; i++) { + !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined; + nodeName = getNodeName(markupList[i]); + nodeName = getMarkupWrap(nodeName) ? nodeName : '*'; + markupByNodeName[nodeName] = markupByNodeName[nodeName] || []; + markupByNodeName[nodeName][i] = markupList[i]; + } + var resultList = []; + var resultListAssignmentCount = 0; + for (nodeName in markupByNodeName) { + if (!markupByNodeName.hasOwnProperty(nodeName)) { + continue; + } + var markupListByNodeName = markupByNodeName[nodeName]; + + // This for-in loop skips the holes of the sparse array. The order of + // iteration should follow the order of assignment, which happens to match + // numerical index order, but we don't rely on that. + var resultIndex; + for (resultIndex in markupListByNodeName) { + if (markupListByNodeName.hasOwnProperty(resultIndex)) { + var markup = markupListByNodeName[resultIndex]; + + // Push the requested markup with an additional RESULT_INDEX_ATTR + // attribute. If the markup does not start with a < character, it + // will be discarded below (with an appropriate console.error). + markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP, + // This index will be parsed back out below. + '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" '); + } + } + + // Render each group of markup with similar wrapping `nodeName`. + var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags. + ); + + for (var j = 0; j < renderNodes.length; ++j) { + var renderNode = renderNodes[j]; + if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) { + + resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR); + renderNode.removeAttribute(RESULT_INDEX_ATTR); + + !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined; + + resultList[resultIndex] = renderNode; + + // This should match resultList.length and markupList.length when + // we're done. + resultListAssignmentCount += 1; + } else if (process.env.NODE_ENV !== 'production') { + console.error('Danger: Discarding unexpected node:', renderNode); + } + } + } + + // Although resultList was populated out of order, it should now be a dense + // array. + !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined; + + !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined; + + return resultList; + }, + + /** + * Replaces a node with a string of markup at its current position within its + * parent. The markup must render into a single root node. + * + * @param {DOMElement} oldChild Child node to replace. + * @param {string} markup Markup to render in place of the child node. + * @internal + */ + dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) { + !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined; + !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined; + !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined; + + var newChild; + if (typeof markup === 'string') { + newChild = createNodesFromMarkup(markup, emptyFunction)[0]; + } else { + newChild = markup; + } + oldChild.parentNode.replaceChild(newChild, oldChild); + } + + }; + + module.exports = Danger; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 8 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ExecutionEnvironment + */ + + 'use strict'; + + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + + /** + * Simple, lightweight module assisting with the detection and context of + * Worker. Helps avoid circular dependencies and allows code to reason about + * whether or not they are in a Worker, even if they never include the main + * `ReactWorker` dependency. + */ + var ExecutionEnvironment = { + + canUseDOM: canUseDOM, + + canUseWorkers: typeof Worker !== 'undefined', + + canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent), + + canUseViewport: canUseDOM && !!window.screen, + + isInWorker: !canUseDOM // For now, this is true - might change in the future. + + }; + + module.exports = ExecutionEnvironment; + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule createNodesFromMarkup + * @typechecks + */ + + /*eslint-disable fb-www/unsafe-html*/ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var createArrayFromMixed = __webpack_require__(10); + var getMarkupWrap = __webpack_require__(13); + var invariant = __webpack_require__(12); + + /** + * Dummy container used to render all markup. + */ + var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null; + + /** + * Pattern used by `getNodeName`. + */ + var nodeNamePattern = /^\s*<(\w+)/; + + /** + * Extracts the `nodeName` of the first element in a string of markup. + * + * @param {string} markup String of markup. + * @return {?string} Node name of the supplied markup. + */ + function getNodeName(markup) { + var nodeNameMatch = markup.match(nodeNamePattern); + return nodeNameMatch && nodeNameMatch[1].toLowerCase(); + } + + /** + * Creates an array containing the nodes rendered from the supplied markup. The + * optionally supplied `handleScript` function will be invoked once for each + * <script> element that is rendered. If no `handleScript` function is supplied, + * an exception is thrown if any <script> elements are rendered. + * + * @param {string} markup A string of valid HTML markup. + * @param {?function} handleScript Invoked once for each rendered <script>. + * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes. + */ + function createNodesFromMarkup(markup, handleScript) { + var node = dummyNode; + !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined; + var nodeName = getNodeName(markup); + + var wrap = nodeName && getMarkupWrap(nodeName); + if (wrap) { + node.innerHTML = wrap[1] + markup + wrap[2]; + + var wrapDepth = wrap[0]; + while (wrapDepth--) { + node = node.lastChild; + } + } else { + node.innerHTML = markup; + } + + var scripts = node.getElementsByTagName('script'); + if (scripts.length) { + !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined; + createArrayFromMixed(scripts).forEach(handleScript); + } + + var nodes = createArrayFromMixed(node.childNodes); + while (node.lastChild) { + node.removeChild(node.lastChild); + } + return nodes; + } + + module.exports = createNodesFromMarkup; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule createArrayFromMixed + * @typechecks + */ + + 'use strict'; + + var toArray = __webpack_require__(11); + + /** + * Perform a heuristic test to determine if an object is "array-like". + * + * A monk asked Joshu, a Zen master, "Has a dog Buddha nature?" + * Joshu replied: "Mu." + * + * This function determines if its argument has "array nature": it returns + * true if the argument is an actual array, an `arguments' object, or an + * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()). + * + * It will return false for other array-like objects like Filelist. + * + * @param {*} obj + * @return {boolean} + */ + function hasArrayNature(obj) { + return( + // not null/false + !!obj && ( + // arrays are objects, NodeLists are functions in Safari + typeof obj == 'object' || typeof obj == 'function') && + // quacks like an array + 'length' in obj && + // not window + !('setInterval' in obj) && + // no DOM node should be considered an array-like + // a 'select' element has 'length' and 'item' properties on IE8 + typeof obj.nodeType != 'number' && ( + // a real array + Array.isArray(obj) || + // arguments + 'callee' in obj || + // HTMLCollection/NodeList + 'item' in obj) + ); + } + + /** + * Ensure that the argument is an array by wrapping it in an array if it is not. + * Creates a copy of the argument if it is already an array. + * + * This is mostly useful idiomatically: + * + * var createArrayFromMixed = require('createArrayFromMixed'); + * + * function takesOneOrMoreThings(things) { + * things = createArrayFromMixed(things); + * ... + * } + * + * This allows you to treat `things' as an array, but accept scalars in the API. + * + * If you need to convert an array-like object, like `arguments`, into an array + * use toArray instead. + * + * @param {*} obj + * @return {array} + */ + function createArrayFromMixed(obj) { + if (!hasArrayNature(obj)) { + return [obj]; + } else if (Array.isArray(obj)) { + return obj.slice(); + } else { + return toArray(obj); + } + } + + module.exports = createArrayFromMixed; + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule toArray + * @typechecks + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Convert array-like objects to arrays. + * + * This API assumes the caller knows the contents of the data type. For less + * well defined inputs use createArrayFromMixed. + * + * @param {object|function|filelist} obj + * @return {array} + */ + function toArray(obj) { + var length = obj.length; + + // Some browse builtin objects can report typeof 'function' (e.g. NodeList in + // old versions of Safari). + !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined; + + !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined; + + !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined; + + // Old IE doesn't give collections access to hasOwnProperty. Assume inputs + // without method will throw during the slice call and skip straight to the + // fallback. + if (obj.hasOwnProperty) { + try { + return Array.prototype.slice.call(obj); + } catch (e) { + // IE < 9 does not support Array#slice on collections objects + } + } + + // Fall back to copying key by key. This assumes all keys have a value, + // so will not preserve sparsely populated inputs. + var ret = Array(length); + for (var ii = 0; ii < length; ii++) { + ret[ii] = obj[ii]; + } + return ret; + } + + module.exports = toArray; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule invariant + */ + + 'use strict'; + + /** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + + var invariant = function (condition, format, a, b, c, d, e, f) { + if (process.env.NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + })); + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } + }; + + module.exports = invariant; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getMarkupWrap + */ + + /*eslint-disable fb-www/unsafe-html */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var invariant = __webpack_require__(12); + + /** + * Dummy container used to detect which wraps are necessary. + */ + var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null; + + /** + * Some browsers cannot use `innerHTML` to render certain elements standalone, + * so we wrap them, render the wrapped nodes, then extract the desired node. + * + * In IE8, certain elements cannot render alone, so wrap all elements ('*'). + */ + + var shouldWrap = {}; + + var selectWrap = [1, '<select multiple="true">', '</select>']; + var tableWrap = [1, '<table>', '</table>']; + var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>']; + + var svgWrap = [1, '<svg xmlns="http://www.w3.org/2000/svg">', '</svg>']; + + var markupWrap = { + '*': [1, '?<div>', '</div>'], + + 'area': [1, '<map>', '</map>'], + 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'], + 'legend': [1, '<fieldset>', '</fieldset>'], + 'param': [1, '<object>', '</object>'], + 'tr': [2, '<table><tbody>', '</tbody></table>'], + + 'optgroup': selectWrap, + 'option': selectWrap, + + 'caption': tableWrap, + 'colgroup': tableWrap, + 'tbody': tableWrap, + 'tfoot': tableWrap, + 'thead': tableWrap, + + 'td': trWrap, + 'th': trWrap + }; + + // Initialize the SVG elements since we know they'll always need to be wrapped + // consistently. If they are created inside a <div> they will be initialized in + // the wrong namespace (and will not display). + var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan']; + svgElements.forEach(function (nodeName) { + markupWrap[nodeName] = svgWrap; + shouldWrap[nodeName] = true; + }); + + /** + * Gets the markup wrap configuration for the supplied `nodeName`. + * + * NOTE: This lazily detects which wraps are necessary for the current browser. + * + * @param {string} nodeName Lowercase `nodeName`. + * @return {?array} Markup wrap configuration, if applicable. + */ + function getMarkupWrap(nodeName) { + !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined; + if (!markupWrap.hasOwnProperty(nodeName)) { + nodeName = '*'; + } + if (!shouldWrap.hasOwnProperty(nodeName)) { + if (nodeName === '*') { + dummyNode.innerHTML = '<link />'; + } else { + dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>'; + } + shouldWrap[nodeName] = !dummyNode.firstChild; + } + return shouldWrap[nodeName] ? markupWrap[nodeName] : null; + } + + module.exports = getMarkupWrap; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 14 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule emptyFunction + */ + + "use strict"; + + function makeEmptyFunction(arg) { + return function () { + return arg; + }; + } + + /** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ + function emptyFunction() {} + + emptyFunction.thatReturns = makeEmptyFunction; + emptyFunction.thatReturnsFalse = makeEmptyFunction(false); + emptyFunction.thatReturnsTrue = makeEmptyFunction(true); + emptyFunction.thatReturnsNull = makeEmptyFunction(null); + emptyFunction.thatReturnsThis = function () { + return this; + }; + emptyFunction.thatReturnsArgument = function (arg) { + return arg; + }; + + module.exports = emptyFunction; + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMultiChildUpdateTypes + */ + + 'use strict'; + + var keyMirror = __webpack_require__(16); + + /** + * When a component's children are updated, a series of update configuration + * objects are created in order to batch and serialize the required changes. + * + * Enumerates all the possible types of update configurations. + * + * @internal + */ + var ReactMultiChildUpdateTypes = keyMirror({ + INSERT_MARKUP: null, + MOVE_EXISTING: null, + REMOVE_NODE: null, + SET_MARKUP: null, + TEXT_CONTENT: null + }); + + module.exports = ReactMultiChildUpdateTypes; + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule keyMirror + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Constructs an enumeration with keys equal to their value. + * + * For example: + * + * var COLORS = keyMirror({blue: null, red: null}); + * var myColor = COLORS.blue; + * var isColorValid = !!COLORS[myColor]; + * + * The last line could not be performed if the values of the generated enum were + * not equal to their keys. + * + * Input: {key1: val1, key2: val2} + * Output: {key1: key1, key2: key2} + * + * @param {object} obj + * @return {object} + */ + var keyMirror = function (obj) { + var ret = {}; + var key; + !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined; + for (key in obj) { + if (!obj.hasOwnProperty(key)) { + continue; + } + ret[key] = key; + } + return ret; + }; + + module.exports = keyMirror; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPerf + * @typechecks static-only + */ + + 'use strict'; + + /** + * ReactPerf is a general AOP system designed to measure performance. This + * module only has the hooks: see ReactDefaultPerf for the analysis tool. + */ + var ReactPerf = { + /** + * Boolean to enable/disable measurement. Set to false by default to prevent + * accidental logging and perf loss. + */ + enableMeasure: false, + + /** + * Holds onto the measure function in use. By default, don't measure + * anything, but we'll override this if we inject a measure function. + */ + storedMeasure: _noMeasure, + + /** + * @param {object} object + * @param {string} objectName + * @param {object<string>} methodNames + */ + measureMethods: function (object, objectName, methodNames) { + if (process.env.NODE_ENV !== 'production') { + for (var key in methodNames) { + if (!methodNames.hasOwnProperty(key)) { + continue; + } + object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]); + } + } + }, + + /** + * Use this to wrap methods you want to measure. Zero overhead in production. + * + * @param {string} objName + * @param {string} fnName + * @param {function} func + * @return {function} + */ + measure: function (objName, fnName, func) { + if (process.env.NODE_ENV !== 'production') { + var measuredFunc = null; + var wrapper = function () { + if (ReactPerf.enableMeasure) { + if (!measuredFunc) { + measuredFunc = ReactPerf.storedMeasure(objName, fnName, func); + } + return measuredFunc.apply(this, arguments); + } + return func.apply(this, arguments); + }; + wrapper.displayName = objName + '_' + fnName; + return wrapper; + } + return func; + }, + + injection: { + /** + * @param {function} measure + */ + injectMeasure: function (measure) { + ReactPerf.storedMeasure = measure; + } + } + }; + + /** + * Simply passes through the measured function, without measuring it. + * + * @param {string} objName + * @param {string} fnName + * @param {function} func + * @return {function} + */ + function _noMeasure(objName, fnName, func) { + return func; + } + + module.exports = ReactPerf; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule setInnerHTML + */ + + /* globals MSApp */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var WHITESPACE_TEST = /^[ \r\n\t\f]/; + var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/; + + /** + * Set the innerHTML property of a node, ensuring that whitespace is preserved + * even in IE8. + * + * @param {DOMElement} node + * @param {string} html + * @internal + */ + var setInnerHTML = function (node, html) { + node.innerHTML = html; + }; + + // Win8 apps: Allow all html to be inserted + if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) { + setInnerHTML = function (node, html) { + MSApp.execUnsafeLocalFunction(function () { + node.innerHTML = html; + }); + }; + } + + if (ExecutionEnvironment.canUseDOM) { + // IE8: When updating a just created node with innerHTML only leading + // whitespace is removed. When updating an existing node with innerHTML + // whitespace in root TextNodes is also collapsed. + // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html + + // Feature detection; only IE8 is known to behave improperly like this. + var testElement = document.createElement('div'); + testElement.innerHTML = ' '; + if (testElement.innerHTML === '') { + setInnerHTML = function (node, html) { + // Magic theory: IE8 supposedly differentiates between added and updated + // nodes when processing innerHTML, innerHTML on updated nodes suffers + // from worse whitespace behavior. Re-adding a node like this triggers + // the initial and more favorable whitespace behavior. + // TODO: What to do on a detached node? + if (node.parentNode) { + node.parentNode.replaceChild(node, node); + } + + // We also implement a workaround for non-visible tags disappearing into + // thin air on IE8, this only happens if there is no visible text + // in-front of the non-visible tags. Piggyback on the whitespace fix + // and simply check if any non-visible tags appear in the source. + if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) { + // Recover leading whitespace by temporarily prepending any character. + // \uFEFF has the potential advantage of being zero-width/invisible. + // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode + // in hopes that this is preserved even if "\uFEFF" is transformed to + // the actual Unicode character (by Babel, for example). + // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216 + node.innerHTML = String.fromCharCode(0xFEFF) + html; + + // deleteData leaves an empty `TextNode` which offsets the index of all + // children. Definitely want to avoid this. + var textNode = node.firstChild; + if (textNode.data.length === 1) { + node.removeChild(textNode); + } else { + textNode.deleteData(0, 1); + } + } else { + node.innerHTML = html; + } + }; + } + } + + module.exports = setInnerHTML; + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule setTextContent + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + var escapeTextContentForBrowser = __webpack_require__(20); + var setInnerHTML = __webpack_require__(18); + + /** + * Set the textContent property of a node, ensuring that whitespace is preserved + * even in IE8. innerText is a poor substitute for textContent and, among many + * issues, inserts <br> instead of the literal newline chars. innerHTML behaves + * as it should. + * + * @param {DOMElement} node + * @param {string} text + * @internal + */ + var setTextContent = function (node, text) { + node.textContent = text; + }; + + if (ExecutionEnvironment.canUseDOM) { + if (!('textContent' in document.documentElement)) { + setTextContent = function (node, text) { + setInnerHTML(node, escapeTextContentForBrowser(text)); + }; + } + } + + module.exports = setTextContent; + +/***/ }, +/* 20 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule escapeTextContentForBrowser + */ + + 'use strict'; + + var ESCAPE_LOOKUP = { + '&': '&', + '>': '>', + '<': '<', + '"': '"', + '\'': ''' + }; + + var ESCAPE_REGEX = /[&><"']/g; + + function escaper(match) { + return ESCAPE_LOOKUP[match]; + } + + /** + * Escapes text to prevent scripting attacks. + * + * @param {*} text Text value to escape. + * @return {string} An escaped string. + */ + function escapeTextContentForBrowser(text) { + return ('' + text).replace(ESCAPE_REGEX, escaper); + } + + module.exports = escapeTextContentForBrowser; + +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMPropertyOperations + * @typechecks static-only + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ReactPerf = __webpack_require__(17); + + var quoteAttributeValueForBrowser = __webpack_require__(23); + var warning = __webpack_require__(24); + + // Simplified subset + var VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\w\.\-]*$/; + var illegalAttributeNameCache = {}; + var validatedAttributeNameCache = {}; + + function isAttributeNameSafe(attributeName) { + if (validatedAttributeNameCache.hasOwnProperty(attributeName)) { + return true; + } + if (illegalAttributeNameCache.hasOwnProperty(attributeName)) { + return false; + } + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { + validatedAttributeNameCache[attributeName] = true; + return true; + } + illegalAttributeNameCache[attributeName] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined; + return false; + } + + function shouldIgnoreValue(propertyInfo, value) { + return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false; + } + + if (process.env.NODE_ENV !== 'production') { + var reactProps = { + children: true, + dangerouslySetInnerHTML: true, + key: true, + ref: true + }; + var warnedProperties = {}; + + var warnUnknownProperty = function (name) { + if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) { + return; + } + + warnedProperties[name] = true; + var lowerCasedName = name.toLowerCase(); + + // data-* attributes should be lowercase; suggest the lowercase version + var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null; + + // For now, only warn when we have a suggested correction. This prevents + // logging too much when using transferPropsTo. + process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined; + }; + } + + /** + * Operations for dealing with DOM properties. + */ + var DOMPropertyOperations = { + + /** + * Creates markup for the ID property. + * + * @param {string} id Unescaped ID. + * @return {string} Markup string. + */ + createMarkupForID: function (id) { + return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id); + }, + + setAttributeForID: function (node, id) { + node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id); + }, + + /** + * Creates markup for a property. + * + * @param {string} name + * @param {*} value + * @return {?string} Markup string, or null if the property was invalid. + */ + createMarkupForProperty: function (name, value) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + if (shouldIgnoreValue(propertyInfo, value)) { + return ''; + } + var attributeName = propertyInfo.attributeName; + if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + return attributeName + '=""'; + } + return attributeName + '=' + quoteAttributeValueForBrowser(value); + } else if (DOMProperty.isCustomAttribute(name)) { + if (value == null) { + return ''; + } + return name + '=' + quoteAttributeValueForBrowser(value); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + return null; + }, + + /** + * Creates markup for a custom property. + * + * @param {string} name + * @param {*} value + * @return {string} Markup string, or empty string if the property was invalid. + */ + createMarkupForCustomAttribute: function (name, value) { + if (!isAttributeNameSafe(name) || value == null) { + return ''; + } + return name + '=' + quoteAttributeValueForBrowser(value); + }, + + /** + * Sets the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + * @param {*} value + */ + setValueForProperty: function (node, name, value) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, value); + } else if (shouldIgnoreValue(propertyInfo, value)) { + this.deleteValueForProperty(node, name); + } else if (propertyInfo.mustUseAttribute) { + var attributeName = propertyInfo.attributeName; + var namespace = propertyInfo.attributeNamespace; + // `setAttribute` with objects becomes only `[object]` in IE8/9, + // ('' + value) makes it output the correct toString()-value. + if (namespace) { + node.setAttributeNS(namespace, attributeName, '' + value); + } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + node.setAttribute(attributeName, ''); + } else { + node.setAttribute(attributeName, '' + value); + } + } else { + var propName = propertyInfo.propertyName; + // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the + // property type before comparing; only `value` does and is string. + if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) { + // Contrary to `setAttribute`, object properties are properly + // `toString`ed by IE8/9. + node[propName] = value; + } + } + } else if (DOMProperty.isCustomAttribute(name)) { + DOMPropertyOperations.setValueForAttribute(node, name, value); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + }, + + setValueForAttribute: function (node, name, value) { + if (!isAttributeNameSafe(name)) { + return; + } + if (value == null) { + node.removeAttribute(name); + } else { + node.setAttribute(name, '' + value); + } + }, + + /** + * Deletes the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + */ + deleteValueForProperty: function (node, name) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, undefined); + } else if (propertyInfo.mustUseAttribute) { + node.removeAttribute(propertyInfo.attributeName); + } else { + var propName = propertyInfo.propertyName; + var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName); + if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) { + node[propName] = defaultValue; + } + } + } else if (DOMProperty.isCustomAttribute(name)) { + node.removeAttribute(name); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + } + + }; + + ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', { + setValueForProperty: 'setValueForProperty', + setValueForAttribute: 'setValueForAttribute', + deleteValueForProperty: 'deleteValueForProperty' + }); + + module.exports = DOMPropertyOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMProperty + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + function checkMask(value, bitmask) { + return (value & bitmask) === bitmask; + } + + var DOMPropertyInjection = { + /** + * Mapping from normalized, camelcased property names to a configuration that + * specifies how the associated DOM property should be accessed or rendered. + */ + MUST_USE_ATTRIBUTE: 0x1, + MUST_USE_PROPERTY: 0x2, + HAS_SIDE_EFFECTS: 0x4, + HAS_BOOLEAN_VALUE: 0x8, + HAS_NUMERIC_VALUE: 0x10, + HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10, + HAS_OVERLOADED_BOOLEAN_VALUE: 0x40, + + /** + * Inject some specialized knowledge about the DOM. This takes a config object + * with the following properties: + * + * isCustomAttribute: function that given an attribute name will return true + * if it can be inserted into the DOM verbatim. Useful for data-* or aria-* + * attributes where it's impossible to enumerate all of the possible + * attribute names, + * + * Properties: object mapping DOM property name to one of the + * DOMPropertyInjection constants or null. If your attribute isn't in here, + * it won't get written to the DOM. + * + * DOMAttributeNames: object mapping React attribute name to the DOM + * attribute name. Attribute names not specified use the **lowercase** + * normalized name. + * + * DOMAttributeNamespaces: object mapping React attribute name to the DOM + * attribute namespace URL. (Attribute names not specified use no namespace.) + * + * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties. + * Property names not specified use the normalized name. + * + * DOMMutationMethods: Properties that require special mutation methods. If + * `value` is undefined, the mutation method should unset the property. + * + * @param {object} domPropertyConfig the config as described above. + */ + injectDOMPropertyConfig: function (domPropertyConfig) { + var Injection = DOMPropertyInjection; + var Properties = domPropertyConfig.Properties || {}; + var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {}; + var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {}; + var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {}; + var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {}; + + if (domPropertyConfig.isCustomAttribute) { + DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute); + } + + for (var propName in Properties) { + !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined; + + var lowerCased = propName.toLowerCase(); + var propConfig = Properties[propName]; + + var propertyInfo = { + attributeName: lowerCased, + attributeNamespace: null, + propertyName: propName, + mutationMethod: null, + + mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE), + mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY), + hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS), + hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE), + hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE), + hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE), + hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE) + }; + + !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined; + !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined; + !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + DOMProperty.getPossibleStandardName[lowerCased] = propName; + } + + if (DOMAttributeNames.hasOwnProperty(propName)) { + var attributeName = DOMAttributeNames[propName]; + propertyInfo.attributeName = attributeName; + if (process.env.NODE_ENV !== 'production') { + DOMProperty.getPossibleStandardName[attributeName] = propName; + } + } + + if (DOMAttributeNamespaces.hasOwnProperty(propName)) { + propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName]; + } + + if (DOMPropertyNames.hasOwnProperty(propName)) { + propertyInfo.propertyName = DOMPropertyNames[propName]; + } + + if (DOMMutationMethods.hasOwnProperty(propName)) { + propertyInfo.mutationMethod = DOMMutationMethods[propName]; + } + + DOMProperty.properties[propName] = propertyInfo; + } + } + }; + var defaultValueCache = {}; + + /** + * DOMProperty exports lookup objects that can be used like functions: + * + * > DOMProperty.isValid['id'] + * true + * > DOMProperty.isValid['foobar'] + * undefined + * + * Although this may be confusing, it performs better in general. + * + * @see http://jsperf.com/key-exists + * @see http://jsperf.com/key-missing + */ + var DOMProperty = { + + ID_ATTRIBUTE_NAME: 'data-reactid', + + /** + * Map from property "standard name" to an object with info about how to set + * the property in the DOM. Each object contains: + * + * attributeName: + * Used when rendering markup or with `*Attribute()`. + * attributeNamespace + * propertyName: + * Used on DOM node instances. (This includes properties that mutate due to + * external factors.) + * mutationMethod: + * If non-null, used instead of the property or `setAttribute()` after + * initial render. + * mustUseAttribute: + * Whether the property must be accessed and mutated using `*Attribute()`. + * (This includes anything that fails `<propName> in <element>`.) + * mustUseProperty: + * Whether the property must be accessed and mutated as an object property. + * hasSideEffects: + * Whether or not setting a value causes side effects such as triggering + * resources to be loaded or text selection changes. If true, we read from + * the DOM before updating to ensure that the value is only set if it has + * changed. + * hasBooleanValue: + * Whether the property should be removed when set to a falsey value. + * hasNumericValue: + * Whether the property must be numeric or parse as a numeric and should be + * removed when set to a falsey value. + * hasPositiveNumericValue: + * Whether the property must be positive numeric or parse as a positive + * numeric and should be removed when set to a falsey value. + * hasOverloadedBooleanValue: + * Whether the property can be used as a flag as well as with a value. + * Removed when strictly equal to false; present without a value when + * strictly equal to true; present with a value otherwise. + */ + properties: {}, + + /** + * Mapping from lowercase property names to the properly cased version, used + * to warn in the case of missing properties. Available only in __DEV__. + * @type {Object} + */ + getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null, + + /** + * All of the isCustomAttribute() functions that have been injected. + */ + _isCustomAttributeFunctions: [], + + /** + * Checks whether a property name is a custom attribute. + * @method + */ + isCustomAttribute: function (attributeName) { + for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) { + var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i]; + if (isCustomAttributeFn(attributeName)) { + return true; + } + } + return false; + }, + + /** + * Returns the default property value for a DOM property (i.e., not an + * attribute). Most default values are '' or false, but not all. Worse yet, + * some (in particular, `type`) vary depending on the type of element. + * + * TODO: Is it better to grab all the possible properties when creating an + * element to avoid having to create the same element twice? + */ + getDefaultValueForProperty: function (nodeName, prop) { + var nodeDefaults = defaultValueCache[nodeName]; + var testElement; + if (!nodeDefaults) { + defaultValueCache[nodeName] = nodeDefaults = {}; + } + if (!(prop in nodeDefaults)) { + testElement = document.createElement(nodeName); + nodeDefaults[prop] = testElement[prop]; + } + return nodeDefaults[prop]; + }, + + injection: DOMPropertyInjection + }; + + module.exports = DOMProperty; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule quoteAttributeValueForBrowser + */ + + 'use strict'; + + var escapeTextContentForBrowser = __webpack_require__(20); + + /** + * Escapes attribute value to prevent scripting attacks. + * + * @param {*} value Value to escape. + * @return {string} An escaped string. + */ + function quoteAttributeValueForBrowser(value) { + return '"' + escapeTextContentForBrowser(value) + '"'; + } + + module.exports = quoteAttributeValueForBrowser; + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule warning + */ + + 'use strict'; + + var emptyFunction = __webpack_require__(14); + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + + var warning = emptyFunction; + + if (process.env.NODE_ENV !== 'production') { + warning = function (condition, format) { + for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + } + }; + } + + module.exports = warning; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponentBrowserEnvironment + */ + + 'use strict'; + + var ReactDOMIDOperations = __webpack_require__(26); + var ReactMount = __webpack_require__(27); + + /** + * Abstracts away all functionality of the reconciler that requires knowledge of + * the browser context. TODO: These callers should be refactored to avoid the + * need for this injection. + */ + var ReactComponentBrowserEnvironment = { + + processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates, + + replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID, + + /** + * If a particular environment requires that some resources be cleaned up, + * specify this in the injected Mixin. In the DOM, we would likely want to + * purge any cached node ID lookups. + * + * @private + */ + unmountIDFromEnvironment: function (rootNodeID) { + ReactMount.purgeID(rootNodeID); + } + + }; + + module.exports = ReactComponentBrowserEnvironment; + +/***/ }, +/* 26 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMIDOperations + * @typechecks static-only + */ + + 'use strict'; + + var DOMChildrenOperations = __webpack_require__(6); + var DOMPropertyOperations = __webpack_require__(21); + var ReactMount = __webpack_require__(27); + var ReactPerf = __webpack_require__(17); + + var invariant = __webpack_require__(12); + + /** + * Errors for properties that should not be updated with `updatePropertyByID()`. + * + * @type {object} + * @private + */ + var INVALID_PROPERTY_ERRORS = { + dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.', + style: '`style` must be set using `updateStylesByID()`.' + }; + + /** + * Operations used to process updates to DOM nodes. + */ + var ReactDOMIDOperations = { + + /** + * Updates a DOM node with new property values. This should only be used to + * update DOM properties in `DOMProperty`. + * + * @param {string} id ID of the node to update. + * @param {string} name A valid property name, see `DOMProperty`. + * @param {*} value New value of the property. + * @internal + */ + updatePropertyByID: function (id, name, value) { + var node = ReactMount.getNode(id); + !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined; + + // If we're updating to null or undefined, we should remove the property + // from the DOM node instead of inadvertantly setting to a string. This + // brings us in line with the same behavior we have on initial render. + if (value != null) { + DOMPropertyOperations.setValueForProperty(node, name, value); + } else { + DOMPropertyOperations.deleteValueForProperty(node, name); + } + }, + + /** + * Replaces a DOM node that exists in the document with markup. + * + * @param {string} id ID of child to be replaced. + * @param {string} markup Dangerous markup to inject in place of child. + * @internal + * @see {Danger.dangerouslyReplaceNodeWithMarkup} + */ + dangerouslyReplaceNodeWithMarkupByID: function (id, markup) { + var node = ReactMount.getNode(id); + DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup); + }, + + /** + * Updates a component's children by processing a series of updates. + * + * @param {array<object>} updates List of update configurations. + * @param {array<string>} markup List of markup strings. + * @internal + */ + dangerouslyProcessChildrenUpdates: function (updates, markup) { + for (var i = 0; i < updates.length; i++) { + updates[i].parentNode = ReactMount.getNode(updates[i].parentID); + } + DOMChildrenOperations.processUpdates(updates, markup); + } + }; + + ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', { + dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID', + dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates' + }); + + module.exports = ReactDOMIDOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMount + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactCurrentOwner = __webpack_require__(4); + var ReactDOMFeatureFlags = __webpack_require__(40); + var ReactElement = __webpack_require__(41); + var ReactEmptyComponentRegistry = __webpack_require__(43); + var ReactInstanceHandles = __webpack_require__(44); + var ReactInstanceMap = __webpack_require__(46); + var ReactMarkupChecksum = __webpack_require__(47); + var ReactPerf = __webpack_require__(17); + var ReactReconciler = __webpack_require__(49); + var ReactUpdateQueue = __webpack_require__(52); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var emptyObject = __webpack_require__(57); + var containsNode = __webpack_require__(58); + var instantiateReactComponent = __webpack_require__(61); + var invariant = __webpack_require__(12); + var setInnerHTML = __webpack_require__(18); + var shouldUpdateReactComponent = __webpack_require__(66); + var validateDOMNesting = __webpack_require__(69); + var warning = __webpack_require__(24); + + var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME; + var nodeCache = {}; + + var ELEMENT_NODE_TYPE = 1; + var DOC_NODE_TYPE = 9; + var DOCUMENT_FRAGMENT_NODE_TYPE = 11; + + var ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2); + + /** Mapping from reactRootID to React component instance. */ + var instancesByReactRootID = {}; + + /** Mapping from reactRootID to `container` nodes. */ + var containersByReactRootID = {}; + + if (process.env.NODE_ENV !== 'production') { + /** __DEV__-only mapping from reactRootID to root elements. */ + var rootElementsByReactRootID = {}; + } + + // Used to store breadth-first search state in findComponentRoot. + var findComponentRootReusableArray = []; + + /** + * Finds the index of the first character + * that's not common between the two given strings. + * + * @return {number} the index of the character where the strings diverge + */ + function firstDifferenceIndex(string1, string2) { + var minLen = Math.min(string1.length, string2.length); + for (var i = 0; i < minLen; i++) { + if (string1.charAt(i) !== string2.charAt(i)) { + return i; + } + } + return string1.length === string2.length ? -1 : minLen; + } + + /** + * @param {DOMElement|DOMDocument} container DOM element that may contain + * a React component + * @return {?*} DOM element that may have the reactRoot ID, or null. + */ + function getReactRootElementInContainer(container) { + if (!container) { + return null; + } + + if (container.nodeType === DOC_NODE_TYPE) { + return container.documentElement; + } else { + return container.firstChild; + } + } + + /** + * @param {DOMElement} container DOM element that may contain a React component. + * @return {?string} A "reactRoot" ID, if a React component is rendered. + */ + function getReactRootID(container) { + var rootElement = getReactRootElementInContainer(container); + return rootElement && ReactMount.getID(rootElement); + } + + /** + * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form + * element can return its control whose name or ID equals ATTR_NAME. All + * DOM nodes support `getAttributeNode` but this can also get called on + * other objects so just return '' if we're given something other than a + * DOM node (such as window). + * + * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node. + * @return {string} ID of the supplied `domNode`. + */ + function getID(node) { + var id = internalGetID(node); + if (id) { + if (nodeCache.hasOwnProperty(id)) { + var cached = nodeCache[id]; + if (cached !== node) { + !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined; + + nodeCache[id] = node; + } + } else { + nodeCache[id] = node; + } + } + + return id; + } + + function internalGetID(node) { + // If node is something like a window, document, or text node, none of + // which support attributes or a .getAttribute method, gracefully return + // the empty string, as if the attribute were missing. + return node && node.getAttribute && node.getAttribute(ATTR_NAME) || ''; + } + + /** + * Sets the React-specific ID of the given node. + * + * @param {DOMElement} node The DOM node whose ID will be set. + * @param {string} id The value of the ID attribute. + */ + function setID(node, id) { + var oldID = internalGetID(node); + if (oldID !== id) { + delete nodeCache[oldID]; + } + node.setAttribute(ATTR_NAME, id); + nodeCache[id] = node; + } + + /** + * Finds the node with the supplied React-generated DOM ID. + * + * @param {string} id A React-generated DOM ID. + * @return {DOMElement} DOM node with the suppled `id`. + * @internal + */ + function getNode(id) { + if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { + nodeCache[id] = ReactMount.findReactNodeByID(id); + } + return nodeCache[id]; + } + + /** + * Finds the node with the supplied public React instance. + * + * @param {*} instance A public React instance. + * @return {?DOMElement} DOM node with the suppled `id`. + * @internal + */ + function getNodeFromInstance(instance) { + var id = ReactInstanceMap.get(instance)._rootNodeID; + if (ReactEmptyComponentRegistry.isNullComponentID(id)) { + return null; + } + if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { + nodeCache[id] = ReactMount.findReactNodeByID(id); + } + return nodeCache[id]; + } + + /** + * A node is "valid" if it is contained by a currently mounted container. + * + * This means that the node does not have to be contained by a document in + * order to be considered valid. + * + * @param {?DOMElement} node The candidate DOM node. + * @param {string} id The expected ID of the node. + * @return {boolean} Whether the node is contained by a mounted container. + */ + function isValid(node, id) { + if (node) { + !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined; + + var container = ReactMount.findReactContainerForID(id); + if (container && containsNode(container, node)) { + return true; + } + } + + return false; + } + + /** + * Causes the cache to forget about one React-specific ID. + * + * @param {string} id The ID to forget. + */ + function purgeID(id) { + delete nodeCache[id]; + } + + var deepestNodeSoFar = null; + function findDeepestCachedAncestorImpl(ancestorID) { + var ancestor = nodeCache[ancestorID]; + if (ancestor && isValid(ancestor, ancestorID)) { + deepestNodeSoFar = ancestor; + } else { + // This node isn't populated in the cache, so presumably none of its + // descendants are. Break out of the loop. + return false; + } + } + + /** + * Return the deepest cached node whose ID is a prefix of `targetID`. + */ + function findDeepestCachedAncestor(targetID) { + deepestNodeSoFar = null; + ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl); + + var foundNode = deepestNodeSoFar; + deepestNodeSoFar = null; + return foundNode; + } + + /** + * Mounts this component and inserts it into the DOM. + * + * @param {ReactComponent} componentInstance The instance to mount. + * @param {string} rootID DOM ID of the root node. + * @param {DOMElement} container DOM element to mount into. + * @param {ReactReconcileTransaction} transaction + * @param {boolean} shouldReuseMarkup If true, do not insert markup + */ + function mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) { + if (ReactDOMFeatureFlags.useCreateElement) { + context = assign({}, context); + if (container.nodeType === DOC_NODE_TYPE) { + context[ownerDocumentContextKey] = container; + } else { + context[ownerDocumentContextKey] = container.ownerDocument; + } + } + if (process.env.NODE_ENV !== 'production') { + if (context === emptyObject) { + context = {}; + } + var tag = container.nodeName.toLowerCase(); + context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null); + } + var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context); + componentInstance._renderedComponent._topLevelWrapper = componentInstance; + ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction); + } + + /** + * Batched mount. + * + * @param {ReactComponent} componentInstance The instance to mount. + * @param {string} rootID DOM ID of the root node. + * @param {DOMElement} container DOM element to mount into. + * @param {boolean} shouldReuseMarkup If true, do not insert markup + */ + function batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) { + var transaction = ReactUpdates.ReactReconcileTransaction.getPooled( + /* forceHTML */shouldReuseMarkup); + transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context); + ReactUpdates.ReactReconcileTransaction.release(transaction); + } + + /** + * Unmounts a component and removes it from the DOM. + * + * @param {ReactComponent} instance React component instance. + * @param {DOMElement} container DOM element to unmount from. + * @final + * @internal + * @see {ReactMount.unmountComponentAtNode} + */ + function unmountComponentFromNode(instance, container) { + ReactReconciler.unmountComponent(instance); + + if (container.nodeType === DOC_NODE_TYPE) { + container = container.documentElement; + } + + // http://jsperf.com/emptying-a-node + while (container.lastChild) { + container.removeChild(container.lastChild); + } + } + + /** + * True if the supplied DOM node has a direct React-rendered child that is + * not a React root element. Useful for warning in `render`, + * `unmountComponentAtNode`, etc. + * + * @param {?DOMElement} node The candidate DOM node. + * @return {boolean} True if the DOM element contains a direct child that was + * rendered by React but is not a root element. + * @internal + */ + function hasNonRootReactChild(node) { + var reactRootID = getReactRootID(node); + return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false; + } + + /** + * Returns the first (deepest) ancestor of a node which is rendered by this copy + * of React. + */ + function findFirstReactDOMImpl(node) { + // This node might be from another React instance, so we make sure not to + // examine the node cache here + for (; node && node.parentNode !== node; node = node.parentNode) { + if (node.nodeType !== 1) { + // Not a DOMElement, therefore not a React component + continue; + } + var nodeID = internalGetID(node); + if (!nodeID) { + continue; + } + var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID); + + // If containersByReactRootID contains the container we find by crawling up + // the tree, we know that this instance of React rendered the node. + // nb. isValid's strategy (with containsNode) does not work because render + // trees may be nested and we don't want a false positive in that case. + var current = node; + var lastID; + do { + lastID = internalGetID(current); + current = current.parentNode; + if (current == null) { + // The passed-in node has been detached from the container it was + // originally rendered into. + return null; + } + } while (lastID !== reactRootID); + + if (current === containersByReactRootID[reactRootID]) { + return node; + } + } + return null; + } + + /** + * Temporary (?) hack so that we can store all top-level pending updates on + * composites instead of having to worry about different types of components + * here. + */ + var TopLevelWrapper = function () {}; + TopLevelWrapper.prototype.isReactComponent = {}; + if (process.env.NODE_ENV !== 'production') { + TopLevelWrapper.displayName = 'TopLevelWrapper'; + } + TopLevelWrapper.prototype.render = function () { + // this.props is actually a ReactElement + return this.props; + }; + + /** + * Mounting is the process of initializing a React component by creating its + * representative DOM elements and inserting them into a supplied `container`. + * Any prior content inside `container` is destroyed in the process. + * + * ReactMount.render( + * component, + * document.getElementById('container') + * ); + * + * <div id="container"> <-- Supplied `container`. + * <div data-reactid=".3"> <-- Rendered reactRoot of React + * // ... component. + * </div> + * </div> + * + * Inside of `container`, the first element rendered is the "reactRoot". + */ + var ReactMount = { + + TopLevelWrapper: TopLevelWrapper, + + /** Exposed for debugging purposes **/ + _instancesByReactRootID: instancesByReactRootID, + + /** + * This is a hook provided to support rendering React components while + * ensuring that the apparent scroll position of its `container` does not + * change. + * + * @param {DOMElement} container The `container` being rendered into. + * @param {function} renderCallback This must be called once to do the render. + */ + scrollMonitor: function (container, renderCallback) { + renderCallback(); + }, + + /** + * Take a component that's already mounted into the DOM and replace its props + * @param {ReactComponent} prevComponent component instance already in the DOM + * @param {ReactElement} nextElement component instance to render + * @param {DOMElement} container container to render into + * @param {?function} callback function triggered on completion + */ + _updateRootComponent: function (prevComponent, nextElement, container, callback) { + ReactMount.scrollMonitor(container, function () { + ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback); + } + }); + + if (process.env.NODE_ENV !== 'production') { + // Record the root element in case it later gets transplanted. + rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container); + } + + return prevComponent; + }, + + /** + * Register a component into the instance map and starts scroll value + * monitoring + * @param {ReactComponent} nextComponent component instance to render + * @param {DOMElement} container container to render into + * @return {string} reactRoot ID prefix + */ + _registerComponent: function (nextComponent, container) { + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined; + + ReactBrowserEventEmitter.ensureScrollValueMonitoring(); + + var reactRootID = ReactMount.registerContainer(container); + instancesByReactRootID[reactRootID] = nextComponent; + return reactRootID; + }, + + /** + * Render a new component into the DOM. + * @param {ReactElement} nextElement element to render + * @param {DOMElement} container container to render into + * @param {boolean} shouldReuseMarkup if we should skip the markup insertion + * @return {ReactComponent} nextComponent + */ + _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) { + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined; + + var componentInstance = instantiateReactComponent(nextElement, null); + var reactRootID = ReactMount._registerComponent(componentInstance, container); + + // The initial render is synchronous but any updates that happen during + // rendering, in componentWillMount or componentDidMount, will be batched + // according to the current batching strategy. + + ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context); + + if (process.env.NODE_ENV !== 'production') { + // Record the root element in case it later gets transplanted. + rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container); + } + + return componentInstance; + }, + + /** + * Renders a React component into the DOM in the supplied `container`. + * + * If the React component was previously rendered into `container`, this will + * perform an update on it and only mutate the DOM as necessary to reflect the + * latest React component. + * + * @param {ReactComponent} parentComponent The conceptual parent of this render tree. + * @param {ReactElement} nextElement Component element to render. + * @param {DOMElement} container DOM element to render into. + * @param {?function} callback function triggered on completion + * @return {ReactComponent} Component instance rendered in `container`. + */ + renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) { + !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined; + return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback); + }, + + _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) { + !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : + // Check if it quacks like an element + nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined; + + process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined; + + var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement); + + var prevComponent = instancesByReactRootID[getReactRootID(container)]; + + if (prevComponent) { + var prevWrappedElement = prevComponent._currentElement; + var prevElement = prevWrappedElement.props; + if (shouldUpdateReactComponent(prevElement, nextElement)) { + var publicInst = prevComponent._renderedComponent.getPublicInstance(); + var updatedCallback = callback && function () { + callback.call(publicInst); + }; + ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback); + return publicInst; + } else { + ReactMount.unmountComponentAtNode(container); + } + } + + var reactRootElement = getReactRootElementInContainer(container); + var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement); + var containerHasNonRootReactChild = hasNonRootReactChild(container); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined; + + if (!containerHasReactMarkup || reactRootElement.nextSibling) { + var rootElementSibling = reactRootElement; + while (rootElementSibling) { + if (internalGetID(rootElementSibling)) { + process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined; + break; + } + rootElementSibling = rootElementSibling.nextSibling; + } + } + } + + var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild; + var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance(); + if (callback) { + callback.call(component); + } + return component; + }, + + /** + * Renders a React component into the DOM in the supplied `container`. + * + * If the React component was previously rendered into `container`, this will + * perform an update on it and only mutate the DOM as necessary to reflect the + * latest React component. + * + * @param {ReactElement} nextElement Component element to render. + * @param {DOMElement} container DOM element to render into. + * @param {?function} callback function triggered on completion + * @return {ReactComponent} Component instance rendered in `container`. + */ + render: function (nextElement, container, callback) { + return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback); + }, + + /** + * Registers a container node into which React components will be rendered. + * This also creates the "reactRoot" ID that will be assigned to the element + * rendered within. + * + * @param {DOMElement} container DOM element to register as a container. + * @return {string} The "reactRoot" ID of elements rendered within. + */ + registerContainer: function (container) { + var reactRootID = getReactRootID(container); + if (reactRootID) { + // If one exists, make sure it is a valid "reactRoot" ID. + reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID); + } + if (!reactRootID) { + // No valid "reactRoot" ID found, create one. + reactRootID = ReactInstanceHandles.createReactRootID(); + } + containersByReactRootID[reactRootID] = container; + return reactRootID; + }, + + /** + * Unmounts and destroys the React component rendered in the `container`. + * + * @param {DOMElement} container DOM element containing a React component. + * @return {boolean} True if a component was found in and unmounted from + * `container` + */ + unmountComponentAtNode: function (container) { + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. (Strictly speaking, unmounting won't cause a + // render but we still don't expect to be in a render call here.) + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined; + + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined; + + var reactRootID = getReactRootID(container); + var component = instancesByReactRootID[reactRootID]; + if (!component) { + // Check if the node being unmounted was rendered by React, but isn't a + // root node. + var containerHasNonRootReactChild = hasNonRootReactChild(container); + + // Check if the container itself is a React root node. + var containerID = internalGetID(container); + var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined; + } + + return false; + } + ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container); + delete instancesByReactRootID[reactRootID]; + delete containersByReactRootID[reactRootID]; + if (process.env.NODE_ENV !== 'production') { + delete rootElementsByReactRootID[reactRootID]; + } + return true; + }, + + /** + * Finds the container DOM element that contains React component to which the + * supplied DOM `id` belongs. + * + * @param {string} id The ID of an element rendered by a React component. + * @return {?DOMElement} DOM element that contains the `id`. + */ + findReactContainerForID: function (id) { + var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id); + var container = containersByReactRootID[reactRootID]; + + if (process.env.NODE_ENV !== 'production') { + var rootElement = rootElementsByReactRootID[reactRootID]; + if (rootElement && rootElement.parentNode !== container) { + process.env.NODE_ENV !== 'production' ? warning( + // Call internalGetID here because getID calls isValid which calls + // findReactContainerForID (this function). + internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined; + var containerChild = container.firstChild; + if (containerChild && reactRootID === internalGetID(containerChild)) { + // If the container has a new child with the same ID as the old + // root element, then rootElementsByReactRootID[reactRootID] is + // just stale and needs to be updated. The case that deserves a + // warning is when the container is empty. + rootElementsByReactRootID[reactRootID] = containerChild; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined; + } + } + } + + return container; + }, + + /** + * Finds an element rendered by React with the supplied ID. + * + * @param {string} id ID of a DOM node in the React component. + * @return {DOMElement} Root DOM node of the React component. + */ + findReactNodeByID: function (id) { + var reactRoot = ReactMount.findReactContainerForID(id); + return ReactMount.findComponentRoot(reactRoot, id); + }, + + /** + * Traverses up the ancestors of the supplied node to find a node that is a + * DOM representation of a React component rendered by this copy of React. + * + * @param {*} node + * @return {?DOMEventTarget} + * @internal + */ + getFirstReactDOM: function (node) { + return findFirstReactDOMImpl(node); + }, + + /** + * Finds a node with the supplied `targetID` inside of the supplied + * `ancestorNode`. Exploits the ID naming scheme to perform the search + * quickly. + * + * @param {DOMEventTarget} ancestorNode Search from this root. + * @pararm {string} targetID ID of the DOM representation of the component. + * @return {DOMEventTarget} DOM node with the supplied `targetID`. + * @internal + */ + findComponentRoot: function (ancestorNode, targetID) { + var firstChildren = findComponentRootReusableArray; + var childIndex = 0; + + var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode; + + if (process.env.NODE_ENV !== 'production') { + // This will throw on the next line; give an early warning + process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\'t find the root component node for data-reactid value ' + '`%s`. If you\'re seeing this message, it probably means that ' + 'you\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined; + } + + firstChildren[0] = deepestAncestor.firstChild; + firstChildren.length = 1; + + while (childIndex < firstChildren.length) { + var child = firstChildren[childIndex++]; + var targetChild; + + while (child) { + var childID = ReactMount.getID(child); + if (childID) { + // Even if we find the node we're looking for, we finish looping + // through its siblings to ensure they're cached so that we don't have + // to revisit this node again. Otherwise, we make n^2 calls to getID + // when visiting the many children of a single node in order. + + if (targetID === childID) { + targetChild = child; + } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) { + // If we find a child whose ID is an ancestor of the given ID, + // then we can be sure that we only want to search the subtree + // rooted at this child, so we can throw out the rest of the + // search state. + firstChildren.length = childIndex = 0; + firstChildren.push(child.firstChild); + } + } else { + // If this child had no ID, then there's a chance that it was + // injected automatically by the browser, as when a `<table>` + // element sprouts an extra `<tbody>` child as a side effect of + // `.innerHTML` parsing. Optimistically continue down this + // branch, but not before examining the other siblings. + firstChildren.push(child.firstChild); + } + + child = child.nextSibling; + } + + if (targetChild) { + // Emptying firstChildren/findComponentRootReusableArray is + // not necessary for correctness, but it helps the GC reclaim + // any nodes that were left at the end of the search. + firstChildren.length = 0; + + return targetChild; + } + } + + firstChildren.length = 0; + + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined; + }, + + _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) { + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined; + + if (shouldReuseMarkup) { + var rootElement = getReactRootElementInContainer(container); + if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) { + return; + } else { + var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + + var rootMarkup = rootElement.outerHTML; + rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum); + + var normalizedMarkup = markup; + if (process.env.NODE_ENV !== 'production') { + // because rootMarkup is retrieved from the DOM, various normalizations + // will have occurred which will not be present in `markup`. Here, + // insert markup into a <div> or <iframe> depending on the container + // type to perform the same normalizations before comparing. + var normalizer; + if (container.nodeType === ELEMENT_NODE_TYPE) { + normalizer = document.createElement('div'); + normalizer.innerHTML = markup; + normalizedMarkup = normalizer.innerHTML; + } else { + normalizer = document.createElement('iframe'); + document.body.appendChild(normalizer); + normalizer.contentDocument.write(markup); + normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML; + document.body.removeChild(normalizer); + } + } + + var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup); + var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20); + + !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : undefined; + } + } + } + + !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined; + + if (transaction.useCreateElement) { + while (container.lastChild) { + container.removeChild(container.lastChild); + } + container.appendChild(markup); + } else { + setInnerHTML(container, markup); + } + }, + + ownerDocumentContextKey: ownerDocumentContextKey, + + /** + * React ID utilities. + */ + + getReactRootID: getReactRootID, + + getID: getID, + + setID: setID, + + getNode: getNode, + + getNodeFromInstance: getNodeFromInstance, + + isValid: isValid, + + purgeID: purgeID + }; + + ReactPerf.measureMethods(ReactMount, 'ReactMount', { + _renderNewRootComponent: '_renderNewRootComponent', + _mountImageIntoNode: '_mountImageIntoNode' + }); + + module.exports = ReactMount; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 28 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactBrowserEventEmitter + * @typechecks static-only + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPluginHub = __webpack_require__(30); + var EventPluginRegistry = __webpack_require__(31); + var ReactEventEmitterMixin = __webpack_require__(36); + var ReactPerf = __webpack_require__(17); + var ViewportMetrics = __webpack_require__(37); + + var assign = __webpack_require__(38); + var isEventSupported = __webpack_require__(39); + + /** + * Summary of `ReactBrowserEventEmitter` event handling: + * + * - Top-level delegation is used to trap most native browser events. This + * may only occur in the main thread and is the responsibility of + * ReactEventListener, which is injected and can therefore support pluggable + * event sources. This is the only work that occurs in the main thread. + * + * - We normalize and de-duplicate events to account for browser quirks. This + * may be done in the worker thread. + * + * - Forward these native events (with the associated top-level type used to + * trap it) to `EventPluginHub`, which in turn will ask plugins if they want + * to extract any synthetic events. + * + * - The `EventPluginHub` will then process each event by annotating them with + * "dispatches", a sequence of listeners and IDs that care about that event. + * + * - The `EventPluginHub` then dispatches the events. + * + * Overview of React and the event system: + * + * +------------+ . + * | DOM | . + * +------------+ . + * | . + * v . + * +------------+ . + * | ReactEvent | . + * | Listener | . + * +------------+ . +-----------+ + * | . +--------+|SimpleEvent| + * | . | |Plugin | + * +-----|------+ . v +-----------+ + * | | | . +--------------+ +------------+ + * | +-----------.--->|EventPluginHub| | Event | + * | | . | | +-----------+ | Propagators| + * | ReactEvent | . | | |TapEvent | |------------| + * | Emitter | . | |<---+|Plugin | |other plugin| + * | | . | | +-----------+ | utilities | + * | +-----------.--->| | +------------+ + * | | | . +--------------+ + * +-----|------+ . ^ +-----------+ + * | . | |Enter/Leave| + * + . +-------+|Plugin | + * +-------------+ . +-----------+ + * | application | . + * |-------------| . + * | | . + * | | . + * +-------------+ . + * . + * React Core . General Purpose Event Plugin System + */ + + var alreadyListeningTo = {}; + var isMonitoringScrollValue = false; + var reactTopListenersCounter = 0; + + // For events like 'submit' which don't consistently bubble (which we trap at a + // lower node than `document`), binding at `document` would cause duplicate + // events so we don't include them here + var topEventMapping = { + topAbort: 'abort', + topBlur: 'blur', + topCanPlay: 'canplay', + topCanPlayThrough: 'canplaythrough', + topChange: 'change', + topClick: 'click', + topCompositionEnd: 'compositionend', + topCompositionStart: 'compositionstart', + topCompositionUpdate: 'compositionupdate', + topContextMenu: 'contextmenu', + topCopy: 'copy', + topCut: 'cut', + topDoubleClick: 'dblclick', + topDrag: 'drag', + topDragEnd: 'dragend', + topDragEnter: 'dragenter', + topDragExit: 'dragexit', + topDragLeave: 'dragleave', + topDragOver: 'dragover', + topDragStart: 'dragstart', + topDrop: 'drop', + topDurationChange: 'durationchange', + topEmptied: 'emptied', + topEncrypted: 'encrypted', + topEnded: 'ended', + topError: 'error', + topFocus: 'focus', + topInput: 'input', + topKeyDown: 'keydown', + topKeyPress: 'keypress', + topKeyUp: 'keyup', + topLoadedData: 'loadeddata', + topLoadedMetadata: 'loadedmetadata', + topLoadStart: 'loadstart', + topMouseDown: 'mousedown', + topMouseMove: 'mousemove', + topMouseOut: 'mouseout', + topMouseOver: 'mouseover', + topMouseUp: 'mouseup', + topPaste: 'paste', + topPause: 'pause', + topPlay: 'play', + topPlaying: 'playing', + topProgress: 'progress', + topRateChange: 'ratechange', + topScroll: 'scroll', + topSeeked: 'seeked', + topSeeking: 'seeking', + topSelectionChange: 'selectionchange', + topStalled: 'stalled', + topSuspend: 'suspend', + topTextInput: 'textInput', + topTimeUpdate: 'timeupdate', + topTouchCancel: 'touchcancel', + topTouchEnd: 'touchend', + topTouchMove: 'touchmove', + topTouchStart: 'touchstart', + topVolumeChange: 'volumechange', + topWaiting: 'waiting', + topWheel: 'wheel' + }; + + /** + * To ensure no conflicts with other potential React instances on the page + */ + var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2); + + function getListeningForDocument(mountAt) { + // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty` + // directly. + if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) { + mountAt[topListenersIDKey] = reactTopListenersCounter++; + alreadyListeningTo[mountAt[topListenersIDKey]] = {}; + } + return alreadyListeningTo[mountAt[topListenersIDKey]]; + } + + /** + * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For + * example: + * + * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction); + * + * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'. + * + * @internal + */ + var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, { + + /** + * Injectable event backend + */ + ReactEventListener: null, + + injection: { + /** + * @param {object} ReactEventListener + */ + injectReactEventListener: function (ReactEventListener) { + ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel); + ReactBrowserEventEmitter.ReactEventListener = ReactEventListener; + } + }, + + /** + * Sets whether or not any created callbacks should be enabled. + * + * @param {boolean} enabled True if callbacks should be enabled. + */ + setEnabled: function (enabled) { + if (ReactBrowserEventEmitter.ReactEventListener) { + ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled); + } + }, + + /** + * @return {boolean} True if callbacks are enabled. + */ + isEnabled: function () { + return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled()); + }, + + /** + * We listen for bubbled touch events on the document object. + * + * Firefox v8.01 (and possibly others) exhibited strange behavior when + * mounting `onmousemove` events at some node that was not the document + * element. The symptoms were that if your mouse is not moving over something + * contained within that mount point (for example on the background) the + * top-level listeners for `onmousemove` won't be called. However, if you + * register the `mousemove` on the document object, then it will of course + * catch all `mousemove`s. This along with iOS quirks, justifies restricting + * top-level listeners to the document object only, at least for these + * movement types of events and possibly all events. + * + * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html + * + * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but + * they bubble to document. + * + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @param {object} contentDocumentHandle Document which owns the container + */ + listenTo: function (registrationName, contentDocumentHandle) { + var mountAt = contentDocumentHandle; + var isListening = getListeningForDocument(mountAt); + var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName]; + + var topLevelTypes = EventConstants.topLevelTypes; + for (var i = 0; i < dependencies.length; i++) { + var dependency = dependencies[i]; + if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) { + if (dependency === topLevelTypes.topWheel) { + if (isEventSupported('wheel')) { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt); + } else if (isEventSupported('mousewheel')) { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt); + } else { + // Firefox needs to capture a different mouse scroll event. + // @see http://www.quirksmode.org/dom/events/tests/scroll.html + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt); + } + } else if (dependency === topLevelTypes.topScroll) { + + if (isEventSupported('scroll', true)) { + ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt); + } else { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE); + } + } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) { + + if (isEventSupported('focus', true)) { + ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt); + ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt); + } else if (isEventSupported('focusin')) { + // IE has `focusin` and `focusout` events which bubble. + // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt); + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt); + } + + // to make sure blur and focus event listeners are only attached once + isListening[topLevelTypes.topBlur] = true; + isListening[topLevelTypes.topFocus] = true; + } else if (topEventMapping.hasOwnProperty(dependency)) { + ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt); + } + + isListening[dependency] = true; + } + } + }, + + trapBubbledEvent: function (topLevelType, handlerBaseName, handle) { + return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle); + }, + + trapCapturedEvent: function (topLevelType, handlerBaseName, handle) { + return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle); + }, + + /** + * Listens to window scroll and resize events. We cache scroll values so that + * application code can access them without triggering reflows. + * + * NOTE: Scroll events do not bubble. + * + * @see http://www.quirksmode.org/dom/events/scroll.html + */ + ensureScrollValueMonitoring: function () { + if (!isMonitoringScrollValue) { + var refresh = ViewportMetrics.refreshScrollValues; + ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh); + isMonitoringScrollValue = true; + } + }, + + eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs, + + registrationNameModules: EventPluginHub.registrationNameModules, + + putListener: EventPluginHub.putListener, + + getListener: EventPluginHub.getListener, + + deleteListener: EventPluginHub.deleteListener, + + deleteAllListeners: EventPluginHub.deleteAllListeners + + }); + + ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', { + putListener: 'putListener', + deleteListener: 'deleteListener' + }); + + module.exports = ReactBrowserEventEmitter; + +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventConstants + */ + + 'use strict'; + + var keyMirror = __webpack_require__(16); + + var PropagationPhases = keyMirror({ bubbled: null, captured: null }); + + /** + * Types of raw signals from the browser caught at the top level. + */ + var topLevelTypes = keyMirror({ + topAbort: null, + topBlur: null, + topCanPlay: null, + topCanPlayThrough: null, + topChange: null, + topClick: null, + topCompositionEnd: null, + topCompositionStart: null, + topCompositionUpdate: null, + topContextMenu: null, + topCopy: null, + topCut: null, + topDoubleClick: null, + topDrag: null, + topDragEnd: null, + topDragEnter: null, + topDragExit: null, + topDragLeave: null, + topDragOver: null, + topDragStart: null, + topDrop: null, + topDurationChange: null, + topEmptied: null, + topEncrypted: null, + topEnded: null, + topError: null, + topFocus: null, + topInput: null, + topKeyDown: null, + topKeyPress: null, + topKeyUp: null, + topLoad: null, + topLoadedData: null, + topLoadedMetadata: null, + topLoadStart: null, + topMouseDown: null, + topMouseMove: null, + topMouseOut: null, + topMouseOver: null, + topMouseUp: null, + topPaste: null, + topPause: null, + topPlay: null, + topPlaying: null, + topProgress: null, + topRateChange: null, + topReset: null, + topScroll: null, + topSeeked: null, + topSeeking: null, + topSelectionChange: null, + topStalled: null, + topSubmit: null, + topSuspend: null, + topTextInput: null, + topTimeUpdate: null, + topTouchCancel: null, + topTouchEnd: null, + topTouchMove: null, + topTouchStart: null, + topVolumeChange: null, + topWaiting: null, + topWheel: null + }); + + var EventConstants = { + topLevelTypes: topLevelTypes, + PropagationPhases: PropagationPhases + }; + + module.exports = EventConstants; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPluginHub + */ + + 'use strict'; + + var EventPluginRegistry = __webpack_require__(31); + var EventPluginUtils = __webpack_require__(32); + var ReactErrorUtils = __webpack_require__(33); + + var accumulateInto = __webpack_require__(34); + var forEachAccumulated = __webpack_require__(35); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Internal store for event listeners + */ + var listenerBank = {}; + + /** + * Internal queue of events that have accumulated their dispatches and are + * waiting to have their dispatches executed. + */ + var eventQueue = null; + + /** + * Dispatches an event and releases it back into the pool, unless persistent. + * + * @param {?object} event Synthetic event to be dispatched. + * @param {boolean} simulated If the event is simulated (changes exn behavior) + * @private + */ + var executeDispatchesAndRelease = function (event, simulated) { + if (event) { + EventPluginUtils.executeDispatchesInOrder(event, simulated); + + if (!event.isPersistent()) { + event.constructor.release(event); + } + } + }; + var executeDispatchesAndReleaseSimulated = function (e) { + return executeDispatchesAndRelease(e, true); + }; + var executeDispatchesAndReleaseTopLevel = function (e) { + return executeDispatchesAndRelease(e, false); + }; + + /** + * - `InstanceHandle`: [required] Module that performs logical traversals of DOM + * hierarchy given ids of the logical DOM elements involved. + */ + var InstanceHandle = null; + + function validateInstanceHandle() { + var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave; + process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined; + } + + /** + * This is a unified interface for event plugins to be installed and configured. + * + * Event plugins can implement the following properties: + * + * `extractEvents` {function(string, DOMEventTarget, string, object): *} + * Required. When a top-level event is fired, this method is expected to + * extract synthetic events that will in turn be queued and dispatched. + * + * `eventTypes` {object} + * Optional, plugins that fire events must publish a mapping of registration + * names that are used to register listeners. Values of this mapping must + * be objects that contain `registrationName` or `phasedRegistrationNames`. + * + * `executeDispatch` {function(object, function, string)} + * Optional, allows plugins to override how an event gets dispatched. By + * default, the listener is simply invoked. + * + * Each plugin that is injected into `EventsPluginHub` is immediately operable. + * + * @public + */ + var EventPluginHub = { + + /** + * Methods for injecting dependencies. + */ + injection: { + + /** + * @param {object} InjectedMount + * @public + */ + injectMount: EventPluginUtils.injection.injectMount, + + /** + * @param {object} InjectedInstanceHandle + * @public + */ + injectInstanceHandle: function (InjectedInstanceHandle) { + InstanceHandle = InjectedInstanceHandle; + if (process.env.NODE_ENV !== 'production') { + validateInstanceHandle(); + } + }, + + getInstanceHandle: function () { + if (process.env.NODE_ENV !== 'production') { + validateInstanceHandle(); + } + return InstanceHandle; + }, + + /** + * @param {array} InjectedEventPluginOrder + * @public + */ + injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder, + + /** + * @param {object} injectedNamesToPlugins Map from names to plugin modules. + */ + injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName + + }, + + eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs, + + registrationNameModules: EventPluginRegistry.registrationNameModules, + + /** + * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent. + * + * @param {string} id ID of the DOM element. + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @param {?function} listener The callback to store. + */ + putListener: function (id, registrationName, listener) { + !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined; + + var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {}); + bankForRegistrationName[id] = listener; + + var PluginModule = EventPluginRegistry.registrationNameModules[registrationName]; + if (PluginModule && PluginModule.didPutListener) { + PluginModule.didPutListener(id, registrationName, listener); + } + }, + + /** + * @param {string} id ID of the DOM element. + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @return {?function} The stored callback. + */ + getListener: function (id, registrationName) { + var bankForRegistrationName = listenerBank[registrationName]; + return bankForRegistrationName && bankForRegistrationName[id]; + }, + + /** + * Deletes a listener from the registration bank. + * + * @param {string} id ID of the DOM element. + * @param {string} registrationName Name of listener (e.g. `onClick`). + */ + deleteListener: function (id, registrationName) { + var PluginModule = EventPluginRegistry.registrationNameModules[registrationName]; + if (PluginModule && PluginModule.willDeleteListener) { + PluginModule.willDeleteListener(id, registrationName); + } + + var bankForRegistrationName = listenerBank[registrationName]; + // TODO: This should never be null -- when is it? + if (bankForRegistrationName) { + delete bankForRegistrationName[id]; + } + }, + + /** + * Deletes all listeners for the DOM element with the supplied ID. + * + * @param {string} id ID of the DOM element. + */ + deleteAllListeners: function (id) { + for (var registrationName in listenerBank) { + if (!listenerBank[registrationName][id]) { + continue; + } + + var PluginModule = EventPluginRegistry.registrationNameModules[registrationName]; + if (PluginModule && PluginModule.willDeleteListener) { + PluginModule.willDeleteListener(id, registrationName); + } + + delete listenerBank[registrationName][id]; + } + }, + + /** + * Allows registered plugins an opportunity to extract events from top-level + * native browser events. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @internal + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var events; + var plugins = EventPluginRegistry.plugins; + for (var i = 0; i < plugins.length; i++) { + // Not every plugin in the ordering may be loaded at runtime. + var possiblePlugin = plugins[i]; + if (possiblePlugin) { + var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget); + if (extractedEvents) { + events = accumulateInto(events, extractedEvents); + } + } + } + return events; + }, + + /** + * Enqueues a synthetic event that should be dispatched when + * `processEventQueue` is invoked. + * + * @param {*} events An accumulation of synthetic events. + * @internal + */ + enqueueEvents: function (events) { + if (events) { + eventQueue = accumulateInto(eventQueue, events); + } + }, + + /** + * Dispatches all synthetic events on the event queue. + * + * @internal + */ + processEventQueue: function (simulated) { + // Set `eventQueue` to null before processing it so that we can tell if more + // events get enqueued while processing. + var processingEventQueue = eventQueue; + eventQueue = null; + if (simulated) { + forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated); + } else { + forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel); + } + !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined; + // This would be a good time to rethrow if any of the event handlers threw. + ReactErrorUtils.rethrowCaughtError(); + }, + + /** + * These are needed for tests only. Do not use! + */ + __purge: function () { + listenerBank = {}; + }, + + __getListenerBank: function () { + return listenerBank; + } + + }; + + module.exports = EventPluginHub; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPluginRegistry + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Injectable ordering of event plugins. + */ + var EventPluginOrder = null; + + /** + * Injectable mapping from names to event plugin modules. + */ + var namesToPlugins = {}; + + /** + * Recomputes the plugin list using the injected plugins and plugin ordering. + * + * @private + */ + function recomputePluginOrdering() { + if (!EventPluginOrder) { + // Wait until an `EventPluginOrder` is injected. + return; + } + for (var pluginName in namesToPlugins) { + var PluginModule = namesToPlugins[pluginName]; + var pluginIndex = EventPluginOrder.indexOf(pluginName); + !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined; + if (EventPluginRegistry.plugins[pluginIndex]) { + continue; + } + !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined; + EventPluginRegistry.plugins[pluginIndex] = PluginModule; + var publishedEvents = PluginModule.eventTypes; + for (var eventName in publishedEvents) { + !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined; + } + } + } + + /** + * Publishes an event so that it can be dispatched by the supplied plugin. + * + * @param {object} dispatchConfig Dispatch configuration for the event. + * @param {object} PluginModule Plugin publishing the event. + * @return {boolean} True if the event was successfully published. + * @private + */ + function publishEventForPlugin(dispatchConfig, PluginModule, eventName) { + !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined; + EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig; + + var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames; + if (phasedRegistrationNames) { + for (var phaseName in phasedRegistrationNames) { + if (phasedRegistrationNames.hasOwnProperty(phaseName)) { + var phasedRegistrationName = phasedRegistrationNames[phaseName]; + publishRegistrationName(phasedRegistrationName, PluginModule, eventName); + } + } + return true; + } else if (dispatchConfig.registrationName) { + publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName); + return true; + } + return false; + } + + /** + * Publishes a registration name that is used to identify dispatched events and + * can be used with `EventPluginHub.putListener` to register listeners. + * + * @param {string} registrationName Registration name to add. + * @param {object} PluginModule Plugin publishing the event. + * @private + */ + function publishRegistrationName(registrationName, PluginModule, eventName) { + !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined; + EventPluginRegistry.registrationNameModules[registrationName] = PluginModule; + EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies; + } + + /** + * Registers plugins so that they can extract and dispatch events. + * + * @see {EventPluginHub} + */ + var EventPluginRegistry = { + + /** + * Ordered list of injected plugins. + */ + plugins: [], + + /** + * Mapping from event name to dispatch config + */ + eventNameDispatchConfigs: {}, + + /** + * Mapping from registration name to plugin module + */ + registrationNameModules: {}, + + /** + * Mapping from registration name to event name + */ + registrationNameDependencies: {}, + + /** + * Injects an ordering of plugins (by plugin name). This allows the ordering + * to be decoupled from injection of the actual plugins so that ordering is + * always deterministic regardless of packaging, on-the-fly injection, etc. + * + * @param {array} InjectedEventPluginOrder + * @internal + * @see {EventPluginHub.injection.injectEventPluginOrder} + */ + injectEventPluginOrder: function (InjectedEventPluginOrder) { + !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined; + // Clone the ordering so it cannot be dynamically mutated. + EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder); + recomputePluginOrdering(); + }, + + /** + * Injects plugins to be used by `EventPluginHub`. The plugin names must be + * in the ordering injected by `injectEventPluginOrder`. + * + * Plugins can be injected as part of page initialization or on-the-fly. + * + * @param {object} injectedNamesToPlugins Map from names to plugin modules. + * @internal + * @see {EventPluginHub.injection.injectEventPluginsByName} + */ + injectEventPluginsByName: function (injectedNamesToPlugins) { + var isOrderingDirty = false; + for (var pluginName in injectedNamesToPlugins) { + if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) { + continue; + } + var PluginModule = injectedNamesToPlugins[pluginName]; + if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) { + !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined; + namesToPlugins[pluginName] = PluginModule; + isOrderingDirty = true; + } + } + if (isOrderingDirty) { + recomputePluginOrdering(); + } + }, + + /** + * Looks up the plugin for the supplied event. + * + * @param {object} event A synthetic event. + * @return {?object} The plugin that created the supplied event. + * @internal + */ + getPluginModuleForEvent: function (event) { + var dispatchConfig = event.dispatchConfig; + if (dispatchConfig.registrationName) { + return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null; + } + for (var phase in dispatchConfig.phasedRegistrationNames) { + if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) { + continue; + } + var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]]; + if (PluginModule) { + return PluginModule; + } + } + return null; + }, + + /** + * Exposed for unit testing. + * @private + */ + _resetEventPlugins: function () { + EventPluginOrder = null; + for (var pluginName in namesToPlugins) { + if (namesToPlugins.hasOwnProperty(pluginName)) { + delete namesToPlugins[pluginName]; + } + } + EventPluginRegistry.plugins.length = 0; + + var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs; + for (var eventName in eventNameDispatchConfigs) { + if (eventNameDispatchConfigs.hasOwnProperty(eventName)) { + delete eventNameDispatchConfigs[eventName]; + } + } + + var registrationNameModules = EventPluginRegistry.registrationNameModules; + for (var registrationName in registrationNameModules) { + if (registrationNameModules.hasOwnProperty(registrationName)) { + delete registrationNameModules[registrationName]; + } + } + } + + }; + + module.exports = EventPluginRegistry; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPluginUtils + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var ReactErrorUtils = __webpack_require__(33); + + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Injected dependencies: + */ + + /** + * - `Mount`: [required] Module that can convert between React dom IDs and + * actual node references. + */ + var injection = { + Mount: null, + injectMount: function (InjectedMount) { + injection.Mount = InjectedMount; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined; + } + } + }; + + var topLevelTypes = EventConstants.topLevelTypes; + + function isEndish(topLevelType) { + return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel; + } + + function isMoveish(topLevelType) { + return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove; + } + function isStartish(topLevelType) { + return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart; + } + + var validateEventDispatches; + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches = function (event) { + var dispatchListeners = event._dispatchListeners; + var dispatchIDs = event._dispatchIDs; + + var listenersIsArr = Array.isArray(dispatchListeners); + var idsIsArr = Array.isArray(dispatchIDs); + var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0; + var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0; + + process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined; + }; + } + + /** + * Dispatch the event to the listener. + * @param {SyntheticEvent} event SyntheticEvent to handle + * @param {boolean} simulated If the event is simulated (changes exn behavior) + * @param {function} listener Application-level callback + * @param {string} domID DOM id to pass to the callback. + */ + function executeDispatch(event, simulated, listener, domID) { + var type = event.type || 'unknown-event'; + event.currentTarget = injection.Mount.getNode(domID); + if (simulated) { + ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID); + } else { + ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID); + } + event.currentTarget = null; + } + + /** + * Standard/simple iteration through an event's collected dispatches. + */ + function executeDispatchesInOrder(event, simulated) { + var dispatchListeners = event._dispatchListeners; + var dispatchIDs = event._dispatchIDs; + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches(event); + } + if (Array.isArray(dispatchListeners)) { + for (var i = 0; i < dispatchListeners.length; i++) { + if (event.isPropagationStopped()) { + break; + } + // Listeners and IDs are two parallel arrays that are always in sync. + executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]); + } + } else if (dispatchListeners) { + executeDispatch(event, simulated, dispatchListeners, dispatchIDs); + } + event._dispatchListeners = null; + event._dispatchIDs = null; + } + + /** + * Standard/simple iteration through an event's collected dispatches, but stops + * at the first dispatch execution returning true, and returns that id. + * + * @return {?string} id of the first dispatch execution who's listener returns + * true, or null if no listener returned true. + */ + function executeDispatchesInOrderStopAtTrueImpl(event) { + var dispatchListeners = event._dispatchListeners; + var dispatchIDs = event._dispatchIDs; + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches(event); + } + if (Array.isArray(dispatchListeners)) { + for (var i = 0; i < dispatchListeners.length; i++) { + if (event.isPropagationStopped()) { + break; + } + // Listeners and IDs are two parallel arrays that are always in sync. + if (dispatchListeners[i](event, dispatchIDs[i])) { + return dispatchIDs[i]; + } + } + } else if (dispatchListeners) { + if (dispatchListeners(event, dispatchIDs)) { + return dispatchIDs; + } + } + return null; + } + + /** + * @see executeDispatchesInOrderStopAtTrueImpl + */ + function executeDispatchesInOrderStopAtTrue(event) { + var ret = executeDispatchesInOrderStopAtTrueImpl(event); + event._dispatchIDs = null; + event._dispatchListeners = null; + return ret; + } + + /** + * Execution of a "direct" dispatch - there must be at most one dispatch + * accumulated on the event or it is considered an error. It doesn't really make + * sense for an event with multiple dispatches (bubbled) to keep track of the + * return values at each dispatch execution, but it does tend to make sense when + * dealing with "direct" dispatches. + * + * @return {*} The return value of executing the single dispatch. + */ + function executeDirectDispatch(event) { + if (process.env.NODE_ENV !== 'production') { + validateEventDispatches(event); + } + var dispatchListener = event._dispatchListeners; + var dispatchID = event._dispatchIDs; + !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined; + var res = dispatchListener ? dispatchListener(event, dispatchID) : null; + event._dispatchListeners = null; + event._dispatchIDs = null; + return res; + } + + /** + * @param {SyntheticEvent} event + * @return {boolean} True iff number of dispatches accumulated is greater than 0. + */ + function hasDispatches(event) { + return !!event._dispatchListeners; + } + + /** + * General utilities that are useful in creating custom Event Plugins. + */ + var EventPluginUtils = { + isEndish: isEndish, + isMoveish: isMoveish, + isStartish: isStartish, + + executeDirectDispatch: executeDirectDispatch, + executeDispatchesInOrder: executeDispatchesInOrder, + executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue, + hasDispatches: hasDispatches, + + getNode: function (id) { + return injection.Mount.getNode(id); + }, + getID: function (node) { + return injection.Mount.getID(node); + }, + + injection: injection + }; + + module.exports = EventPluginUtils; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 33 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactErrorUtils + * @typechecks + */ + + 'use strict'; + + var caughtError = null; + + /** + * Call a function while guarding against errors that happens within it. + * + * @param {?String} name of the guard to use for logging or debugging + * @param {Function} func The function to invoke + * @param {*} a First argument + * @param {*} b Second argument + */ + function invokeGuardedCallback(name, func, a, b) { + try { + return func(a, b); + } catch (x) { + if (caughtError === null) { + caughtError = x; + } + return undefined; + } + } + + var ReactErrorUtils = { + invokeGuardedCallback: invokeGuardedCallback, + + /** + * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event + * handler are sure to be rethrown by rethrowCaughtError. + */ + invokeGuardedCallbackWithCatch: invokeGuardedCallback, + + /** + * During execution of guarded functions we will capture the first error which + * we will rethrow to be handled by the top level error handler. + */ + rethrowCaughtError: function () { + if (caughtError) { + var error = caughtError; + caughtError = null; + throw error; + } + } + }; + + if (process.env.NODE_ENV !== 'production') { + /** + * To help development we can get better devtools integration by simulating a + * real browser event. + */ + if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') { + var fakeNode = document.createElement('react'); + ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) { + var boundFunc = func.bind(null, a, b); + var evtType = 'react-' + name; + fakeNode.addEventListener(evtType, boundFunc, false); + var evt = document.createEvent('Event'); + evt.initEvent(evtType, false, false); + fakeNode.dispatchEvent(evt); + fakeNode.removeEventListener(evtType, boundFunc, false); + }; + } + } + + module.exports = ReactErrorUtils; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 34 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule accumulateInto + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * + * Accumulates items that must not be null or undefined into the first one. This + * is used to conserve memory by avoiding array allocations, and thus sacrifices + * API cleanness. Since `current` can be null before being passed in and not + * null after this function, make sure to assign it back to `current`: + * + * `a = accumulateInto(a, b);` + * + * This API should be sparingly used. Try `accumulate` for something cleaner. + * + * @return {*|array<*>} An accumulation of items. + */ + + function accumulateInto(current, next) { + !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined; + if (current == null) { + return next; + } + + // Both are not empty. Warning: Never call x.concat(y) when you are not + // certain that x is an Array (x could be a string with concat method). + var currentIsArray = Array.isArray(current); + var nextIsArray = Array.isArray(next); + + if (currentIsArray && nextIsArray) { + current.push.apply(current, next); + return current; + } + + if (currentIsArray) { + current.push(next); + return current; + } + + if (nextIsArray) { + // A bit too dangerous to mutate `next`. + return [current].concat(next); + } + + return [current, next]; + } + + module.exports = accumulateInto; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 35 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule forEachAccumulated + */ + + 'use strict'; + + /** + * @param {array} arr an "accumulation" of items which is either an Array or + * a single item. Useful when paired with the `accumulate` module. This is a + * simple utility that allows us to reason about a collection of items, but + * handling the case when there is exactly one item (and we do not need to + * allocate an array). + */ + var forEachAccumulated = function (arr, cb, scope) { + if (Array.isArray(arr)) { + arr.forEach(cb, scope); + } else if (arr) { + cb.call(scope, arr); + } + }; + + module.exports = forEachAccumulated; + +/***/ }, +/* 36 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEventEmitterMixin + */ + + 'use strict'; + + var EventPluginHub = __webpack_require__(30); + + function runEventQueueInBatch(events) { + EventPluginHub.enqueueEvents(events); + EventPluginHub.processEventQueue(false); + } + + var ReactEventEmitterMixin = { + + /** + * Streams a fired top-level event to `EventPluginHub` where plugins have the + * opportunity to create `ReactEvent`s to be dispatched. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {object} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native environment event. + */ + handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget); + runEventQueueInBatch(events); + } + }; + + module.exports = ReactEventEmitterMixin; + +/***/ }, +/* 37 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ViewportMetrics + */ + + 'use strict'; + + var ViewportMetrics = { + + currentScrollLeft: 0, + + currentScrollTop: 0, + + refreshScrollValues: function (scrollPosition) { + ViewportMetrics.currentScrollLeft = scrollPosition.x; + ViewportMetrics.currentScrollTop = scrollPosition.y; + } + + }; + + module.exports = ViewportMetrics; + +/***/ }, +/* 38 */ +/***/ function(module, exports) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Object.assign + */ + + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign + + 'use strict'; + + function assign(target, sources) { + if (target == null) { + throw new TypeError('Object.assign target cannot be null or undefined'); + } + + var to = Object(target); + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { + var nextSource = arguments[nextIndex]; + if (nextSource == null) { + continue; + } + + var from = Object(nextSource); + + // We don't currently support accessors nor proxies. Therefore this + // copy cannot throw. If we ever supported this then we must handle + // exceptions and side-effects. We don't support symbols so they won't + // be transferred. + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + } + + return to; + } + + module.exports = assign; + +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isEventSupported + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var useHasFeature; + if (ExecutionEnvironment.canUseDOM) { + useHasFeature = document.implementation && document.implementation.hasFeature && + // always returns true in newer browsers as per the standard. + // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature + document.implementation.hasFeature('', '') !== true; + } + + /** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ + function isEventSupported(eventNameSuffix, capture) { + if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) { + return false; + } + + var eventName = 'on' + eventNameSuffix; + var isSupported = (eventName in document); + + if (!isSupported) { + var element = document.createElement('div'); + element.setAttribute(eventName, 'return;'); + isSupported = typeof element[eventName] === 'function'; + } + + if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') { + // This is the only way to test support for the `wheel` event in IE9+. + isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); + } + + return isSupported; + } + + module.exports = isEventSupported; + +/***/ }, +/* 40 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMFeatureFlags + */ + + 'use strict'; + + var ReactDOMFeatureFlags = { + useCreateElement: false + }; + + module.exports = ReactDOMFeatureFlags; + +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactElement + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + + var assign = __webpack_require__(38); + var canDefineProperty = __webpack_require__(42); + + // The Symbol used to tag the ReactElement type. If there is no native Symbol + // nor polyfill, then a plain number is used for performance. + var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7; + + var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true + }; + + /** + * Base constructor for all React elements. This is only used to make this + * work with a dynamic instanceof check. Nothing should live on this prototype. + * + * @param {*} type + * @param {*} key + * @param {string|object} ref + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @param {*} owner + * @param {*} props + * @internal + */ + var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allow us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + + // Record the component responsible for creating this element. + _owner: owner + }; + + if (process.env.NODE_ENV !== 'production') { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; + + // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + if (canDefineProperty) { + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); + // self and source are DEV only properties. + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); + // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + } else { + element._store.validated = false; + element._self = self; + element._source = source; + } + Object.freeze(element.props); + Object.freeze(element); + } + + return element; + }; + + ReactElement.createElement = function (type, config, children) { + var propName; + + // Reserved names are extracted + var props = {}; + + var key = null; + var ref = null; + var self = null; + var source = null; + + if (config != null) { + ref = config.ref === undefined ? null : config.ref; + key = config.key === undefined ? null : '' + config.key; + self = config.__self === undefined ? null : config.__self; + source = config.__source === undefined ? null : config.__source; + // Remaining properties are added to a new props object + for (propName in config) { + if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + var childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + props.children = childArray; + } + + // Resolve default props + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + for (propName in defaultProps) { + if (typeof props[propName] === 'undefined') { + props[propName] = defaultProps[propName]; + } + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + }; + + ReactElement.createFactory = function (type) { + var factory = ReactElement.createElement.bind(null, type); + // Expose the type on the factory and the prototype so that it can be + // easily accessed on elements. E.g. `<Foo />.type === Foo`. + // This should not be named `constructor` since this may not be the function + // that created the element, and it may not even be a constructor. + // Legacy hook TODO: Warn if this is accessed + factory.type = type; + return factory; + }; + + ReactElement.cloneAndReplaceKey = function (oldElement, newKey) { + var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); + + return newElement; + }; + + ReactElement.cloneAndReplaceProps = function (oldElement, newProps) { + var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps); + + if (process.env.NODE_ENV !== 'production') { + // If the key on the original is valid, then the clone is valid + newElement._store.validated = oldElement._store.validated; + } + + return newElement; + }; + + ReactElement.cloneElement = function (element, config, children) { + var propName; + + // Original props are copied + var props = assign({}, element.props); + + // Reserved names are extracted + var key = element.key; + var ref = element.ref; + // Self is preserved since the owner is preserved. + var self = element._self; + // Source is preserved since cloneElement is unlikely to be targeted by a + // transpiler, and the original source is probably a better indicator of the + // true owner. + var source = element._source; + + // Owner will be preserved, unless ref is overridden + var owner = element._owner; + + if (config != null) { + if (config.ref !== undefined) { + // Silently steal the ref from the parent. + ref = config.ref; + owner = ReactCurrentOwner.current; + } + if (config.key !== undefined) { + key = '' + config.key; + } + // Remaining properties override existing props + for (propName in config) { + if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + var childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + props.children = childArray; + } + + return ReactElement(element.type, key, ref, self, source, owner, props); + }; + + /** + * @param {?object} object + * @return {boolean} True if `object` is a valid component. + * @final + */ + ReactElement.isValidElement = function (object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + }; + + module.exports = ReactElement; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 42 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule canDefineProperty + */ + + 'use strict'; + + var canDefineProperty = false; + if (process.env.NODE_ENV !== 'production') { + try { + Object.defineProperty({}, 'x', { get: function () {} }); + canDefineProperty = true; + } catch (x) { + // IE will fail on defineProperty + } + } + + module.exports = canDefineProperty; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 43 */ +/***/ function(module, exports) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEmptyComponentRegistry + */ + + 'use strict'; + + // This registry keeps track of the React IDs of the components that rendered to + // `null` (in reality a placeholder such as `noscript`) + var nullComponentIDsRegistry = {}; + + /** + * @param {string} id Component's `_rootNodeID`. + * @return {boolean} True if the component is rendered to null. + */ + function isNullComponentID(id) { + return !!nullComponentIDsRegistry[id]; + } + + /** + * Mark the component as having rendered to null. + * @param {string} id Component's `_rootNodeID`. + */ + function registerNullComponentID(id) { + nullComponentIDsRegistry[id] = true; + } + + /** + * Unmark the component as having rendered to null: it renders to something now. + * @param {string} id Component's `_rootNodeID`. + */ + function deregisterNullComponentID(id) { + delete nullComponentIDsRegistry[id]; + } + + var ReactEmptyComponentRegistry = { + isNullComponentID: isNullComponentID, + registerNullComponentID: registerNullComponentID, + deregisterNullComponentID: deregisterNullComponentID + }; + + module.exports = ReactEmptyComponentRegistry; + +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInstanceHandles + * @typechecks static-only + */ + + 'use strict'; + + var ReactRootIndex = __webpack_require__(45); + + var invariant = __webpack_require__(12); + + var SEPARATOR = '.'; + var SEPARATOR_LENGTH = SEPARATOR.length; + + /** + * Maximum depth of traversals before we consider the possibility of a bad ID. + */ + var MAX_TREE_DEPTH = 10000; + + /** + * Creates a DOM ID prefix to use when mounting React components. + * + * @param {number} index A unique integer + * @return {string} React root ID. + * @internal + */ + function getReactRootIDString(index) { + return SEPARATOR + index.toString(36); + } + + /** + * Checks if a character in the supplied ID is a separator or the end. + * + * @param {string} id A React DOM ID. + * @param {number} index Index of the character to check. + * @return {boolean} True if the character is a separator or end of the ID. + * @private + */ + function isBoundary(id, index) { + return id.charAt(index) === SEPARATOR || index === id.length; + } + + /** + * Checks if the supplied string is a valid React DOM ID. + * + * @param {string} id A React DOM ID, maybe. + * @return {boolean} True if the string is a valid React DOM ID. + * @private + */ + function isValidID(id) { + return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR; + } + + /** + * Checks if the first ID is an ancestor of or equal to the second ID. + * + * @param {string} ancestorID + * @param {string} descendantID + * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`. + * @internal + */ + function isAncestorIDOf(ancestorID, descendantID) { + return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length); + } + + /** + * Gets the parent ID of the supplied React DOM ID, `id`. + * + * @param {string} id ID of a component. + * @return {string} ID of the parent, or an empty string. + * @private + */ + function getParentID(id) { + return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : ''; + } + + /** + * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the + * supplied `destinationID`. If they are equal, the ID is returned. + * + * @param {string} ancestorID ID of an ancestor node of `destinationID`. + * @param {string} destinationID ID of the destination node. + * @return {string} Next ID on the path from `ancestorID` to `destinationID`. + * @private + */ + function getNextDescendantID(ancestorID, destinationID) { + !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined; + !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined; + if (ancestorID === destinationID) { + return ancestorID; + } + // Skip over the ancestor and the immediate separator. Traverse until we hit + // another separator or we reach the end of `destinationID`. + var start = ancestorID.length + SEPARATOR_LENGTH; + var i; + for (i = start; i < destinationID.length; i++) { + if (isBoundary(destinationID, i)) { + break; + } + } + return destinationID.substr(0, i); + } + + /** + * Gets the nearest common ancestor ID of two IDs. + * + * Using this ID scheme, the nearest common ancestor ID is the longest common + * prefix of the two IDs that immediately preceded a "marker" in both strings. + * + * @param {string} oneID + * @param {string} twoID + * @return {string} Nearest common ancestor ID, or the empty string if none. + * @private + */ + function getFirstCommonAncestorID(oneID, twoID) { + var minLength = Math.min(oneID.length, twoID.length); + if (minLength === 0) { + return ''; + } + var lastCommonMarkerIndex = 0; + // Use `<=` to traverse until the "EOL" of the shorter string. + for (var i = 0; i <= minLength; i++) { + if (isBoundary(oneID, i) && isBoundary(twoID, i)) { + lastCommonMarkerIndex = i; + } else if (oneID.charAt(i) !== twoID.charAt(i)) { + break; + } + } + var longestCommonID = oneID.substr(0, lastCommonMarkerIndex); + !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined; + return longestCommonID; + } + + /** + * Traverses the parent path between two IDs (either up or down). The IDs must + * not be the same, and there must exist a parent path between them. If the + * callback returns `false`, traversal is stopped. + * + * @param {?string} start ID at which to start traversal. + * @param {?string} stop ID at which to end traversal. + * @param {function} cb Callback to invoke each ID with. + * @param {*} arg Argument to invoke the callback with. + * @param {?boolean} skipFirst Whether or not to skip the first node. + * @param {?boolean} skipLast Whether or not to skip the last node. + * @private + */ + function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) { + start = start || ''; + stop = stop || ''; + !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined; + var traverseUp = isAncestorIDOf(stop, start); + !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined; + // Traverse from `start` to `stop` one depth at a time. + var depth = 0; + var traverse = traverseUp ? getParentID : getNextDescendantID; + for (var id = start;; /* until break */id = traverse(id, stop)) { + var ret; + if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) { + ret = cb(id, traverseUp, arg); + } + if (ret === false || id === stop) { + // Only break //after// visiting `stop`. + break; + } + !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined; + } + } + + /** + * Manages the IDs assigned to DOM representations of React components. This + * uses a specific scheme in order to traverse the DOM efficiently (e.g. in + * order to simulate events). + * + * @internal + */ + var ReactInstanceHandles = { + + /** + * Constructs a React root ID + * @return {string} A React root ID. + */ + createReactRootID: function () { + return getReactRootIDString(ReactRootIndex.createReactRootIndex()); + }, + + /** + * Constructs a React ID by joining a root ID with a name. + * + * @param {string} rootID Root ID of a parent component. + * @param {string} name A component's name (as flattened children). + * @return {string} A React ID. + * @internal + */ + createReactID: function (rootID, name) { + return rootID + name; + }, + + /** + * Gets the DOM ID of the React component that is the root of the tree that + * contains the React component with the supplied DOM ID. + * + * @param {string} id DOM ID of a React component. + * @return {?string} DOM ID of the React component that is the root. + * @internal + */ + getReactRootIDFromNodeID: function (id) { + if (id && id.charAt(0) === SEPARATOR && id.length > 1) { + var index = id.indexOf(SEPARATOR, 1); + return index > -1 ? id.substr(0, index) : id; + } + return null; + }, + + /** + * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that + * should would receive a `mouseEnter` or `mouseLeave` event. + * + * NOTE: Does not invoke the callback on the nearest common ancestor because + * nothing "entered" or "left" that element. + * + * @param {string} leaveID ID being left. + * @param {string} enterID ID being entered. + * @param {function} cb Callback to invoke on each entered/left ID. + * @param {*} upArg Argument to invoke the callback with on left IDs. + * @param {*} downArg Argument to invoke the callback with on entered IDs. + * @internal + */ + traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) { + var ancestorID = getFirstCommonAncestorID(leaveID, enterID); + if (ancestorID !== leaveID) { + traverseParentPath(leaveID, ancestorID, cb, upArg, false, true); + } + if (ancestorID !== enterID) { + traverseParentPath(ancestorID, enterID, cb, downArg, true, false); + } + }, + + /** + * Simulates the traversal of a two-phase, capture/bubble event dispatch. + * + * NOTE: This traversal happens on IDs without touching the DOM. + * + * @param {string} targetID ID of the target node. + * @param {function} cb Callback to invoke. + * @param {*} arg Argument to invoke the callback with. + * @internal + */ + traverseTwoPhase: function (targetID, cb, arg) { + if (targetID) { + traverseParentPath('', targetID, cb, arg, true, false); + traverseParentPath(targetID, '', cb, arg, false, true); + } + }, + + /** + * Same as `traverseTwoPhase` but skips the `targetID`. + */ + traverseTwoPhaseSkipTarget: function (targetID, cb, arg) { + if (targetID) { + traverseParentPath('', targetID, cb, arg, true, true); + traverseParentPath(targetID, '', cb, arg, true, true); + } + }, + + /** + * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For + * example, passing `.0.$row-0.1` would result in `cb` getting called + * with `.0`, `.0.$row-0`, and `.0.$row-0.1`. + * + * NOTE: This traversal happens on IDs without touching the DOM. + * + * @param {string} targetID ID of the target node. + * @param {function} cb Callback to invoke. + * @param {*} arg Argument to invoke the callback with. + * @internal + */ + traverseAncestors: function (targetID, cb, arg) { + traverseParentPath('', targetID, cb, arg, true, false); + }, + + getFirstCommonAncestorID: getFirstCommonAncestorID, + + /** + * Exposed for unit testing. + * @private + */ + _getNextDescendantID: getNextDescendantID, + + isAncestorIDOf: isAncestorIDOf, + + SEPARATOR: SEPARATOR + + }; + + module.exports = ReactInstanceHandles; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 45 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactRootIndex + * @typechecks + */ + + 'use strict'; + + var ReactRootIndexInjection = { + /** + * @param {function} _createReactRootIndex + */ + injectCreateReactRootIndex: function (_createReactRootIndex) { + ReactRootIndex.createReactRootIndex = _createReactRootIndex; + } + }; + + var ReactRootIndex = { + createReactRootIndex: null, + injection: ReactRootIndexInjection + }; + + module.exports = ReactRootIndex; + +/***/ }, +/* 46 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInstanceMap + */ + + 'use strict'; + + /** + * `ReactInstanceMap` maintains a mapping from a public facing stateful + * instance (key) and the internal representation (value). This allows public + * methods to accept the user facing instance as an argument and map them back + * to internal methods. + */ + + // TODO: Replace this with ES6: var ReactInstanceMap = new Map(); + var ReactInstanceMap = { + + /** + * This API should be called `delete` but we'd have to make sure to always + * transform these to strings for IE support. When this transform is fully + * supported we can rename it. + */ + remove: function (key) { + key._reactInternalInstance = undefined; + }, + + get: function (key) { + return key._reactInternalInstance; + }, + + has: function (key) { + return key._reactInternalInstance !== undefined; + }, + + set: function (key, value) { + key._reactInternalInstance = value; + } + + }; + + module.exports = ReactInstanceMap; + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMarkupChecksum + */ + + 'use strict'; + + var adler32 = __webpack_require__(48); + + var TAG_END = /\/?>/; + + var ReactMarkupChecksum = { + CHECKSUM_ATTR_NAME: 'data-react-checksum', + + /** + * @param {string} markup Markup string + * @return {string} Markup string with checksum attribute attached + */ + addChecksumToMarkup: function (markup) { + var checksum = adler32(markup); + + // Add checksum (handle both parent tags and self-closing tags) + return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&'); + }, + + /** + * @param {string} markup to use + * @param {DOMElement} element root React element + * @returns {boolean} whether or not the markup is the same + */ + canReuseMarkup: function (markup, element) { + var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + existingChecksum = existingChecksum && parseInt(existingChecksum, 10); + var markupChecksum = adler32(markup); + return markupChecksum === existingChecksum; + } + }; + + module.exports = ReactMarkupChecksum; + +/***/ }, +/* 48 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule adler32 + */ + + 'use strict'; + + var MOD = 65521; + + // adler32 is not cryptographically strong, and is only used to sanity check that + // markup generated on the server matches the markup generated on the client. + // This implementation (a modified version of the SheetJS version) has been optimized + // for our use case, at the expense of conforming to the adler32 specification + // for non-ascii inputs. + function adler32(data) { + var a = 1; + var b = 0; + var i = 0; + var l = data.length; + var m = l & ~0x3; + while (i < m) { + for (; i < Math.min(i + 4096, m); i += 4) { + b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3)); + } + a %= MOD; + b %= MOD; + } + for (; i < l; i++) { + b += a += data.charCodeAt(i); + } + a %= MOD; + b %= MOD; + return a | b << 16; + } + + module.exports = adler32; + +/***/ }, +/* 49 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactReconciler + */ + + 'use strict'; + + var ReactRef = __webpack_require__(50); + + /** + * Helper to call ReactRef.attachRefs with this composite component, split out + * to avoid allocations in the transaction mount-ready queue. + */ + function attachRefs() { + ReactRef.attachRefs(this, this._currentElement); + } + + var ReactReconciler = { + + /** + * Initializes the component, renders markup, and registers event listeners. + * + * @param {ReactComponent} internalInstance + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {?string} Rendered markup to be inserted into the DOM. + * @final + * @internal + */ + mountComponent: function (internalInstance, rootID, transaction, context) { + var markup = internalInstance.mountComponent(rootID, transaction, context); + if (internalInstance._currentElement && internalInstance._currentElement.ref != null) { + transaction.getReactMountReady().enqueue(attachRefs, internalInstance); + } + return markup; + }, + + /** + * Releases any resources allocated by `mountComponent`. + * + * @final + * @internal + */ + unmountComponent: function (internalInstance) { + ReactRef.detachRefs(internalInstance, internalInstance._currentElement); + internalInstance.unmountComponent(); + }, + + /** + * Update a component using a new element. + * + * @param {ReactComponent} internalInstance + * @param {ReactElement} nextElement + * @param {ReactReconcileTransaction} transaction + * @param {object} context + * @internal + */ + receiveComponent: function (internalInstance, nextElement, transaction, context) { + var prevElement = internalInstance._currentElement; + + if (nextElement === prevElement && context === internalInstance._context) { + // Since elements are immutable after the owner is rendered, + // we can do a cheap identity compare here to determine if this is a + // superfluous reconcile. It's possible for state to be mutable but such + // change should trigger an update of the owner which would recreate + // the element. We explicitly check for the existence of an owner since + // it's possible for an element created outside a composite to be + // deeply mutated and reused. + + // TODO: Bailing out early is just a perf optimization right? + // TODO: Removing the return statement should affect correctness? + return; + } + + var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement); + + if (refsChanged) { + ReactRef.detachRefs(internalInstance, prevElement); + } + + internalInstance.receiveComponent(nextElement, transaction, context); + + if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) { + transaction.getReactMountReady().enqueue(attachRefs, internalInstance); + } + }, + + /** + * Flush any dirty changes in a component. + * + * @param {ReactComponent} internalInstance + * @param {ReactReconcileTransaction} transaction + * @internal + */ + performUpdateIfNecessary: function (internalInstance, transaction) { + internalInstance.performUpdateIfNecessary(transaction); + } + + }; + + module.exports = ReactReconciler; + +/***/ }, +/* 50 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactRef + */ + + 'use strict'; + + var ReactOwner = __webpack_require__(51); + + var ReactRef = {}; + + function attachRef(ref, component, owner) { + if (typeof ref === 'function') { + ref(component.getPublicInstance()); + } else { + // Legacy ref + ReactOwner.addComponentAsRefTo(component, ref, owner); + } + } + + function detachRef(ref, component, owner) { + if (typeof ref === 'function') { + ref(null); + } else { + // Legacy ref + ReactOwner.removeComponentAsRefFrom(component, ref, owner); + } + } + + ReactRef.attachRefs = function (instance, element) { + if (element === null || element === false) { + return; + } + var ref = element.ref; + if (ref != null) { + attachRef(ref, instance, element._owner); + } + }; + + ReactRef.shouldUpdateRefs = function (prevElement, nextElement) { + // If either the owner or a `ref` has changed, make sure the newest owner + // has stored a reference to `this`, and the previous owner (if different) + // has forgotten the reference to `this`. We use the element instead + // of the public this.props because the post processing cannot determine + // a ref. The ref conceptually lives on the element. + + // TODO: Should this even be possible? The owner cannot change because + // it's forbidden by shouldUpdateReactComponent. The ref can change + // if you swap the keys of but not the refs. Reconsider where this check + // is made. It probably belongs where the key checking and + // instantiateReactComponent is done. + + var prevEmpty = prevElement === null || prevElement === false; + var nextEmpty = nextElement === null || nextElement === false; + + return( + // This has a few false positives w/r/t empty components. + prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref + ); + }; + + ReactRef.detachRefs = function (instance, element) { + if (element === null || element === false) { + return; + } + var ref = element.ref; + if (ref != null) { + detachRef(ref, instance, element._owner); + } + }; + + module.exports = ReactRef; + +/***/ }, +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactOwner + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * ReactOwners are capable of storing references to owned components. + * + * All components are capable of //being// referenced by owner components, but + * only ReactOwner components are capable of //referencing// owned components. + * The named reference is known as a "ref". + * + * Refs are available when mounted and updated during reconciliation. + * + * var MyComponent = React.createClass({ + * render: function() { + * return ( + * <div onClick={this.handleClick}> + * <CustomComponent ref="custom" /> + * </div> + * ); + * }, + * handleClick: function() { + * this.refs.custom.handleClick(); + * }, + * componentDidMount: function() { + * this.refs.custom.initialize(); + * } + * }); + * + * Refs should rarely be used. When refs are used, they should only be done to + * control data that is not handled by React's data flow. + * + * @class ReactOwner + */ + var ReactOwner = { + + /** + * @param {?object} object + * @return {boolean} True if `object` is a valid owner. + * @final + */ + isValidOwner: function (object) { + return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function'); + }, + + /** + * Adds a component by ref to an owner component. + * + * @param {ReactComponent} component Component to reference. + * @param {string} ref Name by which to refer to the component. + * @param {ReactOwner} owner Component on which to record the ref. + * @final + * @internal + */ + addComponentAsRefTo: function (component, ref, owner) { + !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined; + owner.attachRef(ref, component); + }, + + /** + * Removes a component by ref from an owner component. + * + * @param {ReactComponent} component Component to dereference. + * @param {string} ref Name of the ref to remove. + * @param {ReactOwner} owner Component on which the ref is recorded. + * @final + * @internal + */ + removeComponentAsRefFrom: function (component, ref, owner) { + !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined; + // Check that `component` is still the current ref because we do not want to + // detach the ref if another component stole it. + if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) { + owner.detachRef(ref); + } + } + + }; + + module.exports = ReactOwner; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 52 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactUpdateQueue + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactElement = __webpack_require__(41); + var ReactInstanceMap = __webpack_require__(46); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + function enqueueUpdate(internalInstance) { + ReactUpdates.enqueueUpdate(internalInstance); + } + + function getInternalInstanceReadyForUpdate(publicInstance, callerName) { + var internalInstance = ReactInstanceMap.get(publicInstance); + if (!internalInstance) { + if (process.env.NODE_ENV !== 'production') { + // Only warn when we have a callerName. Otherwise we should be silent. + // We're probably calling from enqueueCallback. We don't want to warn + // there because we already warned for the corresponding lifecycle method. + process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined; + } + return null; + } + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined; + } + + return internalInstance; + } + + /** + * ReactUpdateQueue allows for state updates to be scheduled into a later + * reconciliation step. + */ + var ReactUpdateQueue = { + + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + if (process.env.NODE_ENV !== 'production') { + var owner = ReactCurrentOwner.current; + if (owner !== null) { + process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined; + owner._warnedAboutRefsInRender = true; + } + } + var internalInstance = ReactInstanceMap.get(publicInstance); + if (internalInstance) { + // During componentWillMount and render this will still be null but after + // that will always render to something. At least for now. So we can use + // this hack. + return !!internalInstance._renderedComponent; + } else { + return false; + } + }, + + /** + * Enqueue a callback that will be executed after all the pending updates + * have processed. + * + * @param {ReactClass} publicInstance The instance to use as `this` context. + * @param {?function} callback Called after state is updated. + * @internal + */ + enqueueCallback: function (publicInstance, callback) { + !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined; + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance); + + // Previously we would throw an error if we didn't have an internal + // instance. Since we want to make it a no-op instead, we mirror the same + // behavior we have in other enqueue* methods. + // We also need to ignore callbacks in componentWillMount. See + // enqueueUpdates. + if (!internalInstance) { + return null; + } + + if (internalInstance._pendingCallbacks) { + internalInstance._pendingCallbacks.push(callback); + } else { + internalInstance._pendingCallbacks = [callback]; + } + // TODO: The callback here is ignored when setState is called from + // componentWillMount. Either fix it or disallow doing so completely in + // favor of getInitialState. Alternatively, we can disallow + // componentWillMount during server-side rendering. + enqueueUpdate(internalInstance); + }, + + enqueueCallbackInternal: function (internalInstance, callback) { + !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(false) : undefined; + if (internalInstance._pendingCallbacks) { + internalInstance._pendingCallbacks.push(callback); + } else { + internalInstance._pendingCallbacks = [callback]; + } + enqueueUpdate(internalInstance); + }, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @internal + */ + enqueueForceUpdate: function (publicInstance) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate'); + + if (!internalInstance) { + return; + } + + internalInstance._pendingForceUpdate = true; + + enqueueUpdate(internalInstance); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState'); + + if (!internalInstance) { + return; + } + + internalInstance._pendingStateQueue = [completeState]; + internalInstance._pendingReplaceState = true; + + enqueueUpdate(internalInstance); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @internal + */ + enqueueSetState: function (publicInstance, partialState) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState'); + + if (!internalInstance) { + return; + } + + var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []); + queue.push(partialState); + + enqueueUpdate(internalInstance); + }, + + /** + * Sets a subset of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialProps Subset of the next props. + * @internal + */ + enqueueSetProps: function (publicInstance, partialProps) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps'); + if (!internalInstance) { + return; + } + ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps); + }, + + enqueueSetPropsInternal: function (internalInstance, partialProps) { + var topLevelWrapper = internalInstance._topLevelWrapper; + !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined; + + // Merge with the pending element if it exists, otherwise with existing + // element props. + var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement; + var element = wrapElement.props; + var props = assign({}, element.props, partialProps); + topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props)); + + enqueueUpdate(topLevelWrapper); + }, + + /** + * Replaces all of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} props New props. + * @internal + */ + enqueueReplaceProps: function (publicInstance, props) { + var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps'); + if (!internalInstance) { + return; + } + ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props); + }, + + enqueueReplacePropsInternal: function (internalInstance, props) { + var topLevelWrapper = internalInstance._topLevelWrapper; + !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined; + + // Merge with the pending element if it exists, otherwise with existing + // element props. + var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement; + var element = wrapElement.props; + topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props)); + + enqueueUpdate(topLevelWrapper); + }, + + enqueueElementInternal: function (internalInstance, newElement) { + internalInstance._pendingElement = newElement; + enqueueUpdate(internalInstance); + } + + }; + + module.exports = ReactUpdateQueue; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactUpdates + */ + + 'use strict'; + + var CallbackQueue = __webpack_require__(54); + var PooledClass = __webpack_require__(55); + var ReactPerf = __webpack_require__(17); + var ReactReconciler = __webpack_require__(49); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + var dirtyComponents = []; + var asapCallbackQueue = CallbackQueue.getPooled(); + var asapEnqueued = false; + + var batchingStrategy = null; + + function ensureInjected() { + !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined; + } + + var NESTED_UPDATES = { + initialize: function () { + this.dirtyComponentsLength = dirtyComponents.length; + }, + close: function () { + if (this.dirtyComponentsLength !== dirtyComponents.length) { + // Additional updates were enqueued by componentDidUpdate handlers or + // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run + // these new updates so that if A's componentDidUpdate calls setState on + // B, B will update before the callback A's updater provided when calling + // setState. + dirtyComponents.splice(0, this.dirtyComponentsLength); + flushBatchedUpdates(); + } else { + dirtyComponents.length = 0; + } + } + }; + + var UPDATE_QUEUEING = { + initialize: function () { + this.callbackQueue.reset(); + }, + close: function () { + this.callbackQueue.notifyAll(); + } + }; + + var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING]; + + function ReactUpdatesFlushTransaction() { + this.reinitializeTransaction(); + this.dirtyComponentsLength = null; + this.callbackQueue = CallbackQueue.getPooled(); + this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false); + } + + assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, { + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + }, + + destructor: function () { + this.dirtyComponentsLength = null; + CallbackQueue.release(this.callbackQueue); + this.callbackQueue = null; + ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction); + this.reconcileTransaction = null; + }, + + perform: function (method, scope, a) { + // Essentially calls `this.reconcileTransaction.perform(method, scope, a)` + // with this transaction's wrappers around it. + return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a); + } + }); + + PooledClass.addPoolingTo(ReactUpdatesFlushTransaction); + + function batchedUpdates(callback, a, b, c, d, e) { + ensureInjected(); + batchingStrategy.batchedUpdates(callback, a, b, c, d, e); + } + + /** + * Array comparator for ReactComponents by mount ordering. + * + * @param {ReactComponent} c1 first component you're comparing + * @param {ReactComponent} c2 second component you're comparing + * @return {number} Return value usable by Array.prototype.sort(). + */ + function mountOrderComparator(c1, c2) { + return c1._mountOrder - c2._mountOrder; + } + + function runBatchedUpdates(transaction) { + var len = transaction.dirtyComponentsLength; + !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined; + + // Since reconciling a component higher in the owner hierarchy usually (not + // always -- see shouldComponentUpdate()) will reconcile children, reconcile + // them before their children by sorting the array. + dirtyComponents.sort(mountOrderComparator); + + for (var i = 0; i < len; i++) { + // If a component is unmounted before pending changes apply, it will still + // be here, but we assume that it has cleared its _pendingCallbacks and + // that performUpdateIfNecessary is a noop. + var component = dirtyComponents[i]; + + // If performUpdateIfNecessary happens to enqueue any new updates, we + // shouldn't execute the callbacks until the next render happens, so + // stash the callbacks first + var callbacks = component._pendingCallbacks; + component._pendingCallbacks = null; + + ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction); + + if (callbacks) { + for (var j = 0; j < callbacks.length; j++) { + transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance()); + } + } + } + } + + var flushBatchedUpdates = function () { + // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents + // array and perform any updates enqueued by mount-ready handlers (i.e., + // componentDidUpdate) but we need to check here too in order to catch + // updates enqueued by setState callbacks and asap calls. + while (dirtyComponents.length || asapEnqueued) { + if (dirtyComponents.length) { + var transaction = ReactUpdatesFlushTransaction.getPooled(); + transaction.perform(runBatchedUpdates, null, transaction); + ReactUpdatesFlushTransaction.release(transaction); + } + + if (asapEnqueued) { + asapEnqueued = false; + var queue = asapCallbackQueue; + asapCallbackQueue = CallbackQueue.getPooled(); + queue.notifyAll(); + CallbackQueue.release(queue); + } + } + }; + flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates); + + /** + * Mark a component as needing a rerender, adding an optional callback to a + * list of functions which will be executed once the rerender occurs. + */ + function enqueueUpdate(component) { + ensureInjected(); + + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. (This is called by each top-level update + // function, like setProps, setState, forceUpdate, etc.; creation and + // destruction of top-level components is guarded in ReactMount.) + + if (!batchingStrategy.isBatchingUpdates) { + batchingStrategy.batchedUpdates(enqueueUpdate, component); + return; + } + + dirtyComponents.push(component); + } + + /** + * Enqueue a callback to be run at the end of the current batching cycle. Throws + * if no updates are currently being performed. + */ + function asap(callback, context) { + !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined; + asapCallbackQueue.enqueue(callback, context); + asapEnqueued = true; + } + + var ReactUpdatesInjection = { + injectReconcileTransaction: function (ReconcileTransaction) { + !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined; + ReactUpdates.ReactReconcileTransaction = ReconcileTransaction; + }, + + injectBatchingStrategy: function (_batchingStrategy) { + !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined; + !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined; + !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined; + batchingStrategy = _batchingStrategy; + } + }; + + var ReactUpdates = { + /** + * React references `ReactReconcileTransaction` using this property in order + * to allow dependency injection. + * + * @internal + */ + ReactReconcileTransaction: null, + + batchedUpdates: batchedUpdates, + enqueueUpdate: enqueueUpdate, + flushBatchedUpdates: flushBatchedUpdates, + injection: ReactUpdatesInjection, + asap: asap + }; + + module.exports = ReactUpdates; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule CallbackQueue + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + /** + * A specialized pseudo-event module to help keep track of components waiting to + * be notified when their DOM representations are available for use. + * + * This implements `PooledClass`, so you should never need to instantiate this. + * Instead, use `CallbackQueue.getPooled()`. + * + * @class ReactMountReady + * @implements PooledClass + * @internal + */ + function CallbackQueue() { + this._callbacks = null; + this._contexts = null; + } + + assign(CallbackQueue.prototype, { + + /** + * Enqueues a callback to be invoked when `notifyAll` is invoked. + * + * @param {function} callback Invoked when `notifyAll` is invoked. + * @param {?object} context Context to call `callback` with. + * @internal + */ + enqueue: function (callback, context) { + this._callbacks = this._callbacks || []; + this._contexts = this._contexts || []; + this._callbacks.push(callback); + this._contexts.push(context); + }, + + /** + * Invokes all enqueued callbacks and clears the queue. This is invoked after + * the DOM representation of a component has been created or updated. + * + * @internal + */ + notifyAll: function () { + var callbacks = this._callbacks; + var contexts = this._contexts; + if (callbacks) { + !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined; + this._callbacks = null; + this._contexts = null; + for (var i = 0; i < callbacks.length; i++) { + callbacks[i].call(contexts[i]); + } + callbacks.length = 0; + contexts.length = 0; + } + }, + + /** + * Resets the internal queue. + * + * @internal + */ + reset: function () { + this._callbacks = null; + this._contexts = null; + }, + + /** + * `PooledClass` looks for this. + */ + destructor: function () { + this.reset(); + } + + }); + + PooledClass.addPoolingTo(CallbackQueue); + + module.exports = CallbackQueue; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule PooledClass + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * Static poolers. Several custom versions for each potential number of + * arguments. A completely generic pooler is easy to implement, but would + * require accessing the `arguments` object. In each of these, `this` refers to + * the Class itself, not an instance. If any others are needed, simply add them + * here, or in their own files. + */ + var oneArgumentPooler = function (copyFieldsFrom) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, copyFieldsFrom); + return instance; + } else { + return new Klass(copyFieldsFrom); + } + }; + + var twoArgumentPooler = function (a1, a2) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2); + return instance; + } else { + return new Klass(a1, a2); + } + }; + + var threeArgumentPooler = function (a1, a2, a3) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2, a3); + return instance; + } else { + return new Klass(a1, a2, a3); + } + }; + + var fourArgumentPooler = function (a1, a2, a3, a4) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2, a3, a4); + return instance; + } else { + return new Klass(a1, a2, a3, a4); + } + }; + + var fiveArgumentPooler = function (a1, a2, a3, a4, a5) { + var Klass = this; + if (Klass.instancePool.length) { + var instance = Klass.instancePool.pop(); + Klass.call(instance, a1, a2, a3, a4, a5); + return instance; + } else { + return new Klass(a1, a2, a3, a4, a5); + } + }; + + var standardReleaser = function (instance) { + var Klass = this; + !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined; + instance.destructor(); + if (Klass.instancePool.length < Klass.poolSize) { + Klass.instancePool.push(instance); + } + }; + + var DEFAULT_POOL_SIZE = 10; + var DEFAULT_POOLER = oneArgumentPooler; + + /** + * Augments `CopyConstructor` to be a poolable class, augmenting only the class + * itself (statically) not adding any prototypical fields. Any CopyConstructor + * you give this may have a `poolSize` property, and will look for a + * prototypical `destructor` on instances (optional). + * + * @param {Function} CopyConstructor Constructor that can be used to reset. + * @param {Function} pooler Customizable pooler. + */ + var addPoolingTo = function (CopyConstructor, pooler) { + var NewKlass = CopyConstructor; + NewKlass.instancePool = []; + NewKlass.getPooled = pooler || DEFAULT_POOLER; + if (!NewKlass.poolSize) { + NewKlass.poolSize = DEFAULT_POOL_SIZE; + } + NewKlass.release = standardReleaser; + return NewKlass; + }; + + var PooledClass = { + addPoolingTo: addPoolingTo, + oneArgumentPooler: oneArgumentPooler, + twoArgumentPooler: twoArgumentPooler, + threeArgumentPooler: threeArgumentPooler, + fourArgumentPooler: fourArgumentPooler, + fiveArgumentPooler: fiveArgumentPooler + }; + + module.exports = PooledClass; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Transaction + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + /** + * `Transaction` creates a black box that is able to wrap any method such that + * certain invariants are maintained before and after the method is invoked + * (Even if an exception is thrown while invoking the wrapped method). Whoever + * instantiates a transaction can provide enforcers of the invariants at + * creation time. The `Transaction` class itself will supply one additional + * automatic invariant for you - the invariant that any transaction instance + * should not be run while it is already being run. You would typically create a + * single instance of a `Transaction` for reuse multiple times, that potentially + * is used to wrap several different methods. Wrappers are extremely simple - + * they only require implementing two methods. + * + * <pre> + * wrappers (injected at creation time) + * + + + * | | + * +-----------------|--------|--------------+ + * | v | | + * | +---------------+ | | + * | +--| wrapper1 |---|----+ | + * | | +---------------+ v | | + * | | +-------------+ | | + * | | +----| wrapper2 |--------+ | + * | | | +-------------+ | | | + * | | | | | | + * | v v v v | wrapper + * | +---+ +---+ +---------+ +---+ +---+ | invariants + * perform(anyMethod) | | | | | | | | | | | | maintained + * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|--------> + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * | | | | | | | | | | | | + * | +---+ +---+ +---------+ +---+ +---+ | + * | initialize close | + * +-----------------------------------------+ + * </pre> + * + * Use cases: + * - Preserving the input selection ranges before/after reconciliation. + * Restoring selection even in the event of an unexpected error. + * - Deactivating events while rearranging the DOM, preventing blurs/focuses, + * while guaranteeing that afterwards, the event system is reactivated. + * - Flushing a queue of collected DOM mutations to the main UI thread after a + * reconciliation takes place in a worker thread. + * - Invoking any collected `componentDidUpdate` callbacks after rendering new + * content. + * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue + * to preserve the `scrollTop` (an automatic scroll aware DOM). + * - (Future use case): Layout calculations before and after DOM updates. + * + * Transactional plugin API: + * - A module that has an `initialize` method that returns any precomputation. + * - and a `close` method that accepts the precomputation. `close` is invoked + * when the wrapped process is completed, or has failed. + * + * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules + * that implement `initialize` and `close`. + * @return {Transaction} Single transaction for reuse in thread. + * + * @class Transaction + */ + var Mixin = { + /** + * Sets up this instance so that it is prepared for collecting metrics. Does + * so such that this setup method may be used on an instance that is already + * initialized, in a way that does not consume additional memory upon reuse. + * That can be useful if you decide to make your subclass of this mixin a + * "PooledClass". + */ + reinitializeTransaction: function () { + this.transactionWrappers = this.getTransactionWrappers(); + if (this.wrapperInitData) { + this.wrapperInitData.length = 0; + } else { + this.wrapperInitData = []; + } + this._isInTransaction = false; + }, + + _isInTransaction: false, + + /** + * @abstract + * @return {Array<TransactionWrapper>} Array of transaction wrappers. + */ + getTransactionWrappers: null, + + isInTransaction: function () { + return !!this._isInTransaction; + }, + + /** + * Executes the function within a safety window. Use this for the top level + * methods that result in large amounts of computation/mutations that would + * need to be safety checked. The optional arguments helps prevent the need + * to bind in many cases. + * + * @param {function} method Member of scope to call. + * @param {Object} scope Scope to invoke from. + * @param {Object?=} a Argument to pass to the method. + * @param {Object?=} b Argument to pass to the method. + * @param {Object?=} c Argument to pass to the method. + * @param {Object?=} d Argument to pass to the method. + * @param {Object?=} e Argument to pass to the method. + * @param {Object?=} f Argument to pass to the method. + * + * @return {*} Return value from `method`. + */ + perform: function (method, scope, a, b, c, d, e, f) { + !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined; + var errorThrown; + var ret; + try { + this._isInTransaction = true; + // Catching errors makes debugging more difficult, so we start with + // errorThrown set to true before setting it to false after calling + // close -- if it's still set to true in the finally block, it means + // one of these calls threw. + errorThrown = true; + this.initializeAll(0); + ret = method.call(scope, a, b, c, d, e, f); + errorThrown = false; + } finally { + try { + if (errorThrown) { + // If `method` throws, prefer to show that stack trace over any thrown + // by invoking `closeAll`. + try { + this.closeAll(0); + } catch (err) {} + } else { + // Since `method` didn't throw, we don't want to silence the exception + // here. + this.closeAll(0); + } + } finally { + this._isInTransaction = false; + } + } + return ret; + }, + + initializeAll: function (startIndex) { + var transactionWrappers = this.transactionWrappers; + for (var i = startIndex; i < transactionWrappers.length; i++) { + var wrapper = transactionWrappers[i]; + try { + // Catching errors makes debugging more difficult, so we start with the + // OBSERVED_ERROR state before overwriting it with the real return value + // of initialize -- if it's still set to OBSERVED_ERROR in the finally + // block, it means wrapper.initialize threw. + this.wrapperInitData[i] = Transaction.OBSERVED_ERROR; + this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null; + } finally { + if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) { + // The initializer for wrapper i threw an error; initialize the + // remaining wrappers but silence any exceptions from them to ensure + // that the first error is the one to bubble up. + try { + this.initializeAll(i + 1); + } catch (err) {} + } + } + } + }, + + /** + * Invokes each of `this.transactionWrappers.close[i]` functions, passing into + * them the respective return values of `this.transactionWrappers.init[i]` + * (`close`rs that correspond to initializers that failed will not be + * invoked). + */ + closeAll: function (startIndex) { + !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined; + var transactionWrappers = this.transactionWrappers; + for (var i = startIndex; i < transactionWrappers.length; i++) { + var wrapper = transactionWrappers[i]; + var initData = this.wrapperInitData[i]; + var errorThrown; + try { + // Catching errors makes debugging more difficult, so we start with + // errorThrown set to true before setting it to false after calling + // close -- if it's still set to true in the finally block, it means + // wrapper.close threw. + errorThrown = true; + if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) { + wrapper.close.call(this, initData); + } + errorThrown = false; + } finally { + if (errorThrown) { + // The closer for wrapper i threw an error; close the remaining + // wrappers but silence any exceptions from them to ensure that the + // first error is the one to bubble up. + try { + this.closeAll(i + 1); + } catch (e) {} + } + } + } + this.wrapperInitData.length = 0; + } + }; + + var Transaction = { + + Mixin: Mixin, + + /** + * Token to look for to determine if an error occurred. + */ + OBSERVED_ERROR: {} + + }; + + module.exports = Transaction; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 57 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule emptyObject + */ + + 'use strict'; + + var emptyObject = {}; + + if (process.env.NODE_ENV !== 'production') { + Object.freeze(emptyObject); + } + + module.exports = emptyObject; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 58 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule containsNode + * @typechecks + */ + + 'use strict'; + + var isTextNode = __webpack_require__(59); + + /*eslint-disable no-bitwise */ + + /** + * Checks if a given DOM node contains or is another DOM node. + * + * @param {?DOMNode} outerNode Outer DOM node. + * @param {?DOMNode} innerNode Inner DOM node. + * @return {boolean} True if `outerNode` contains or is `innerNode`. + */ + function containsNode(_x, _x2) { + var _again = true; + + _function: while (_again) { + var outerNode = _x, + innerNode = _x2; + _again = false; + + if (!outerNode || !innerNode) { + return false; + } else if (outerNode === innerNode) { + return true; + } else if (isTextNode(outerNode)) { + return false; + } else if (isTextNode(innerNode)) { + _x = outerNode; + _x2 = innerNode.parentNode; + _again = true; + continue _function; + } else if (outerNode.contains) { + return outerNode.contains(innerNode); + } else if (outerNode.compareDocumentPosition) { + return !!(outerNode.compareDocumentPosition(innerNode) & 16); + } else { + return false; + } + } + } + + module.exports = containsNode; + +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isTextNode + * @typechecks + */ + + 'use strict'; + + var isNode = __webpack_require__(60); + + /** + * @param {*} object The object to check. + * @return {boolean} Whether or not the object is a DOM text node. + */ + function isTextNode(object) { + return isNode(object) && object.nodeType == 3; + } + + module.exports = isTextNode; + +/***/ }, +/* 60 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isNode + * @typechecks + */ + + /** + * @param {*} object The object to check. + * @return {boolean} Whether or not the object is a DOM node. + */ + 'use strict'; + + function isNode(object) { + return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string')); + } + + module.exports = isNode; + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule instantiateReactComponent + * @typechecks static-only + */ + + 'use strict'; + + var ReactCompositeComponent = __webpack_require__(62); + var ReactEmptyComponent = __webpack_require__(67); + var ReactNativeComponent = __webpack_require__(68); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + // To avoid a cyclic dependency, we create the final class in this module + var ReactCompositeComponentWrapper = function () {}; + assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, { + _instantiateReactComponent: instantiateReactComponent + }); + + function getDeclarationErrorAddendum(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + /** + * Check if the type reference is a known internal type. I.e. not a user + * provided composite type. + * + * @param {function} type + * @return {boolean} Returns true if this is a valid internal type. + */ + function isInternalComponentType(type) { + return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function'; + } + + /** + * Given a ReactNode, create an instance that will actually be mounted. + * + * @param {ReactNode} node + * @return {object} A new instance of the element's constructor. + * @protected + */ + function instantiateReactComponent(node) { + var instance; + + if (node === null || node === false) { + instance = new ReactEmptyComponent(instantiateReactComponent); + } else if (typeof node === 'object') { + var element = node; + !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined; + + // Special case string values + if (typeof element.type === 'string') { + instance = ReactNativeComponent.createInternalComponent(element); + } else if (isInternalComponentType(element.type)) { + // This is temporarily available for custom components that are not string + // representations. I.e. ART. Once those are updated to use the string + // representation, we can drop this code path. + instance = new element.type(element); + } else { + instance = new ReactCompositeComponentWrapper(); + } + } else if (typeof node === 'string' || typeof node === 'number') { + instance = ReactNativeComponent.createInstanceForText(node); + } else { + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined; + } + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined; + } + + // Sets up the instance. This can probably just move into the constructor now. + instance.construct(node); + + // These two fields are used by the DOM and ART diffing algorithms + // respectively. Instead of using expandos on components, we should be + // storing the state needed by the diffing algorithms elsewhere. + instance._mountIndex = 0; + instance._mountImage = null; + + if (process.env.NODE_ENV !== 'production') { + instance._isOwnerNecessary = false; + instance._warnedAboutRefsInRender = false; + } + + // Internal instances should fully constructed at this point, so they should + // not get any new fields added to them at this point. + if (process.env.NODE_ENV !== 'production') { + if (Object.preventExtensions) { + Object.preventExtensions(instance); + } + } + + return instance; + } + + module.exports = instantiateReactComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 62 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactCompositeComponent + */ + + 'use strict'; + + var ReactComponentEnvironment = __webpack_require__(63); + var ReactCurrentOwner = __webpack_require__(4); + var ReactElement = __webpack_require__(41); + var ReactInstanceMap = __webpack_require__(46); + var ReactPerf = __webpack_require__(17); + var ReactPropTypeLocations = __webpack_require__(64); + var ReactPropTypeLocationNames = __webpack_require__(65); + var ReactReconciler = __webpack_require__(49); + var ReactUpdateQueue = __webpack_require__(52); + + var assign = __webpack_require__(38); + var emptyObject = __webpack_require__(57); + var invariant = __webpack_require__(12); + var shouldUpdateReactComponent = __webpack_require__(66); + var warning = __webpack_require__(24); + + function getDeclarationErrorAddendum(component) { + var owner = component._currentElement._owner || null; + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + function StatelessComponent(Component) {} + StatelessComponent.prototype.render = function () { + var Component = ReactInstanceMap.get(this)._currentElement.type; + return Component(this.props, this.context, this.updater); + }; + + /** + * ------------------ The Life-Cycle of a Composite Component ------------------ + * + * - constructor: Initialization of state. The instance is now retained. + * - componentWillMount + * - render + * - [children's constructors] + * - [children's componentWillMount and render] + * - [children's componentDidMount] + * - componentDidMount + * + * Update Phases: + * - componentWillReceiveProps (only called if parent updated) + * - shouldComponentUpdate + * - componentWillUpdate + * - render + * - [children's constructors or receive props phases] + * - componentDidUpdate + * + * - componentWillUnmount + * - [children's componentWillUnmount] + * - [children destroyed] + * - (destroyed): The instance is now blank, released by React and ready for GC. + * + * ----------------------------------------------------------------------------- + */ + + /** + * An incrementing ID assigned to each component when it is mounted. This is + * used to enforce the order in which `ReactUpdates` updates dirty components. + * + * @private + */ + var nextMountID = 1; + + /** + * @lends {ReactCompositeComponent.prototype} + */ + var ReactCompositeComponentMixin = { + + /** + * Base constructor for all composite component. + * + * @param {ReactElement} element + * @final + * @internal + */ + construct: function (element) { + this._currentElement = element; + this._rootNodeID = null; + this._instance = null; + + // See ReactUpdateQueue + this._pendingElement = null; + this._pendingStateQueue = null; + this._pendingReplaceState = false; + this._pendingForceUpdate = false; + + this._renderedComponent = null; + + this._context = null; + this._mountOrder = 0; + this._topLevelWrapper = null; + + // See ReactUpdates and ReactUpdateQueue. + this._pendingCallbacks = null; + }, + + /** + * Initializes the component, renders markup, and registers event listeners. + * + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {?string} Rendered markup to be inserted into the DOM. + * @final + * @internal + */ + mountComponent: function (rootID, transaction, context) { + this._context = context; + this._mountOrder = nextMountID++; + this._rootNodeID = rootID; + + var publicProps = this._processProps(this._currentElement.props); + var publicContext = this._processContext(context); + + var Component = this._currentElement.type; + + // Initialize the public class + var inst; + var renderedElement; + + // This is a way to detect if Component is a stateless arrow function + // component, which is not newable. It might not be 100% reliable but is + // something we can do until we start detecting that Component extends + // React.Component. We already assume that typeof Component === 'function'. + var canInstantiate = ('prototype' in Component); + + if (canInstantiate) { + if (process.env.NODE_ENV !== 'production') { + ReactCurrentOwner.current = this; + try { + inst = new Component(publicProps, publicContext, ReactUpdateQueue); + } finally { + ReactCurrentOwner.current = null; + } + } else { + inst = new Component(publicProps, publicContext, ReactUpdateQueue); + } + } + + if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) { + renderedElement = inst; + inst = new StatelessComponent(Component); + } + + if (process.env.NODE_ENV !== 'production') { + // This will throw later in _renderValidatedComponent, but add an early + // warning now to help debugging + if (inst.render == null) { + process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\'t a React component.', Component.displayName || Component.name || 'Component') : undefined; + } else { + // We support ES6 inheriting from React.Component, the module pattern, + // and stateless components, but not ES6 classes that don't extend + process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined; + } + } + + // These should be set up in the constructor, but as a convenience for + // simpler class abstractions, we set them up after the fact. + inst.props = publicProps; + inst.context = publicContext; + inst.refs = emptyObject; + inst.updater = ReactUpdateQueue; + + this._instance = inst; + + // Store a reference from the instance back to the internal representation + ReactInstanceMap.set(inst, this); + + if (process.env.NODE_ENV !== 'production') { + // Since plain JS classes are defined without any special initialization + // logic, we can not catch common errors early. Therefore, we have to + // catch them here, at initialization time, instead. + process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined; + } + + var initialState = inst.state; + if (initialState === undefined) { + inst.state = initialState = null; + } + !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined; + + this._pendingStateQueue = null; + this._pendingReplaceState = false; + this._pendingForceUpdate = false; + + if (inst.componentWillMount) { + inst.componentWillMount(); + // When mounting, calls to `setState` by `componentWillMount` will set + // `this._pendingStateQueue` without triggering a re-render. + if (this._pendingStateQueue) { + inst.state = this._processPendingState(inst.props, inst.context); + } + } + + // If not a stateless component, we now render + if (renderedElement === undefined) { + renderedElement = this._renderValidatedComponent(); + } + + this._renderedComponent = this._instantiateReactComponent(renderedElement); + + var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context)); + if (inst.componentDidMount) { + transaction.getReactMountReady().enqueue(inst.componentDidMount, inst); + } + + return markup; + }, + + /** + * Releases any resources allocated by `mountComponent`. + * + * @final + * @internal + */ + unmountComponent: function () { + var inst = this._instance; + + if (inst.componentWillUnmount) { + inst.componentWillUnmount(); + } + + ReactReconciler.unmountComponent(this._renderedComponent); + this._renderedComponent = null; + this._instance = null; + + // Reset pending fields + // Even if this component is scheduled for another update in ReactUpdates, + // it would still be ignored because these fields are reset. + this._pendingStateQueue = null; + this._pendingReplaceState = false; + this._pendingForceUpdate = false; + this._pendingCallbacks = null; + this._pendingElement = null; + + // These fields do not really need to be reset since this object is no + // longer accessible. + this._context = null; + this._rootNodeID = null; + this._topLevelWrapper = null; + + // Delete the reference from the instance to this internal representation + // which allow the internals to be properly cleaned up even if the user + // leaks a reference to the public instance. + ReactInstanceMap.remove(inst); + + // Some existing components rely on inst.props even after they've been + // destroyed (in event handlers). + // TODO: inst.props = null; + // TODO: inst.state = null; + // TODO: inst.context = null; + }, + + /** + * Filters the context object to only contain keys specified in + * `contextTypes` + * + * @param {object} context + * @return {?object} + * @private + */ + _maskContext: function (context) { + var maskedContext = null; + var Component = this._currentElement.type; + var contextTypes = Component.contextTypes; + if (!contextTypes) { + return emptyObject; + } + maskedContext = {}; + for (var contextName in contextTypes) { + maskedContext[contextName] = context[contextName]; + } + return maskedContext; + }, + + /** + * Filters the context object to only contain keys specified in + * `contextTypes`, and asserts that they are valid. + * + * @param {object} context + * @return {?object} + * @private + */ + _processContext: function (context) { + var maskedContext = this._maskContext(context); + if (process.env.NODE_ENV !== 'production') { + var Component = this._currentElement.type; + if (Component.contextTypes) { + this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context); + } + } + return maskedContext; + }, + + /** + * @param {object} currentContext + * @return {object} + * @private + */ + _processChildContext: function (currentContext) { + var Component = this._currentElement.type; + var inst = this._instance; + var childContext = inst.getChildContext && inst.getChildContext(); + if (childContext) { + !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined; + if (process.env.NODE_ENV !== 'production') { + this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext); + } + for (var name in childContext) { + !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined; + } + return assign({}, currentContext, childContext); + } + return currentContext; + }, + + /** + * Processes props by setting default values for unspecified props and + * asserting that the props are valid. Does not mutate its argument; returns + * a new props object with defaults merged in. + * + * @param {object} newProps + * @return {object} + * @private + */ + _processProps: function (newProps) { + if (process.env.NODE_ENV !== 'production') { + var Component = this._currentElement.type; + if (Component.propTypes) { + this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop); + } + } + return newProps; + }, + + /** + * Assert that the props are valid + * + * @param {object} propTypes Map of prop name to a ReactPropType + * @param {object} props + * @param {string} location e.g. "prop", "context", "child context" + * @private + */ + _checkPropTypes: function (propTypes, props, location) { + // TODO: Stop validating prop types here and only use the element + // validation. + var componentName = this.getName(); + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error; + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined; + error = propTypes[propName](props, propName, componentName, location); + } catch (ex) { + error = ex; + } + if (error instanceof Error) { + // We may want to extend this logic for similar errors in + // top-level render calls, so I'm abstracting it away into + // a function to minimize refactoring in the future + var addendum = getDeclarationErrorAddendum(this); + + if (location === ReactPropTypeLocations.prop) { + // Preface gives us something to blacklist in warning module + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined; + } + } + } + } + }, + + receiveComponent: function (nextElement, transaction, nextContext) { + var prevElement = this._currentElement; + var prevContext = this._context; + + this._pendingElement = null; + + this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext); + }, + + /** + * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate` + * is set, update the component. + * + * @param {ReactReconcileTransaction} transaction + * @internal + */ + performUpdateIfNecessary: function (transaction) { + if (this._pendingElement != null) { + ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context); + } + + if (this._pendingStateQueue !== null || this._pendingForceUpdate) { + this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context); + } + }, + + /** + * Perform an update to a mounted component. The componentWillReceiveProps and + * shouldComponentUpdate methods are called, then (assuming the update isn't + * skipped) the remaining update lifecycle methods are called and the DOM + * representation is updated. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @param {ReactElement} prevParentElement + * @param {ReactElement} nextParentElement + * @internal + * @overridable + */ + updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) { + var inst = this._instance; + + var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext); + var nextProps; + + // Distinguish between a props update versus a simple state update + if (prevParentElement === nextParentElement) { + // Skip checking prop types again -- we don't read inst.props to avoid + // warning for DOM component props in this upgrade + nextProps = nextParentElement.props; + } else { + nextProps = this._processProps(nextParentElement.props); + // An update here will schedule an update but immediately set + // _pendingStateQueue which will ensure that any state updates gets + // immediately reconciled instead of waiting for the next batch. + + if (inst.componentWillReceiveProps) { + inst.componentWillReceiveProps(nextProps, nextContext); + } + } + + var nextState = this._processPendingState(nextProps, nextContext); + + var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined; + } + + if (shouldUpdate) { + this._pendingForceUpdate = false; + // Will set `this.props`, `this.state` and `this.context`. + this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext); + } else { + // If it's determined that a component should not update, we still want + // to set props and state but we shortcut the rest of the update. + this._currentElement = nextParentElement; + this._context = nextUnmaskedContext; + inst.props = nextProps; + inst.state = nextState; + inst.context = nextContext; + } + }, + + _processPendingState: function (props, context) { + var inst = this._instance; + var queue = this._pendingStateQueue; + var replace = this._pendingReplaceState; + this._pendingReplaceState = false; + this._pendingStateQueue = null; + + if (!queue) { + return inst.state; + } + + if (replace && queue.length === 1) { + return queue[0]; + } + + var nextState = assign({}, replace ? queue[0] : inst.state); + for (var i = replace ? 1 : 0; i < queue.length; i++) { + var partial = queue[i]; + assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial); + } + + return nextState; + }, + + /** + * Merges new props and state, notifies delegate methods of update and + * performs update. + * + * @param {ReactElement} nextElement Next element + * @param {object} nextProps Next public object to set as properties. + * @param {?object} nextState Next object to set as state. + * @param {?object} nextContext Next public object to set as context. + * @param {ReactReconcileTransaction} transaction + * @param {?object} unmaskedContext + * @private + */ + _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) { + var inst = this._instance; + + var hasComponentDidUpdate = Boolean(inst.componentDidUpdate); + var prevProps; + var prevState; + var prevContext; + if (hasComponentDidUpdate) { + prevProps = inst.props; + prevState = inst.state; + prevContext = inst.context; + } + + if (inst.componentWillUpdate) { + inst.componentWillUpdate(nextProps, nextState, nextContext); + } + + this._currentElement = nextElement; + this._context = unmaskedContext; + inst.props = nextProps; + inst.state = nextState; + inst.context = nextContext; + + this._updateRenderedComponent(transaction, unmaskedContext); + + if (hasComponentDidUpdate) { + transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst); + } + }, + + /** + * Call the component's `render` method and update the DOM accordingly. + * + * @param {ReactReconcileTransaction} transaction + * @internal + */ + _updateRenderedComponent: function (transaction, context) { + var prevComponentInstance = this._renderedComponent; + var prevRenderedElement = prevComponentInstance._currentElement; + var nextRenderedElement = this._renderValidatedComponent(); + if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) { + ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context)); + } else { + // These two IDs are actually the same! But nothing should rely on that. + var thisID = this._rootNodeID; + var prevComponentID = prevComponentInstance._rootNodeID; + ReactReconciler.unmountComponent(prevComponentInstance); + + this._renderedComponent = this._instantiateReactComponent(nextRenderedElement); + var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context)); + this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup); + } + }, + + /** + * @protected + */ + _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) { + ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup); + }, + + /** + * @protected + */ + _renderValidatedComponentWithoutOwnerOrContext: function () { + var inst = this._instance; + var renderedComponent = inst.render(); + if (process.env.NODE_ENV !== 'production') { + // We allow auto-mocks to proceed as if they're returning null. + if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + renderedComponent = null; + } + } + + return renderedComponent; + }, + + /** + * @private + */ + _renderValidatedComponent: function () { + var renderedComponent; + ReactCurrentOwner.current = this; + try { + renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext(); + } finally { + ReactCurrentOwner.current = null; + } + !( + // TODO: An `isValidNode` function would probably be more appropriate + renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined; + return renderedComponent; + }, + + /** + * Lazily allocates the refs object and stores `component` as `ref`. + * + * @param {string} ref Reference name. + * @param {component} component Component to store as `ref`. + * @final + * @private + */ + attachRef: function (ref, component) { + var inst = this.getPublicInstance(); + !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined; + var publicComponentInstance = component.getPublicInstance(); + if (process.env.NODE_ENV !== 'production') { + var componentName = component && component.getName ? component.getName() : 'a component'; + process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref "%s" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined; + } + var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs; + refs[ref] = publicComponentInstance; + }, + + /** + * Detaches a reference name. + * + * @param {string} ref Name to dereference. + * @final + * @private + */ + detachRef: function (ref) { + var refs = this.getPublicInstance().refs; + delete refs[ref]; + }, + + /** + * Get a text description of the component that can be used to identify it + * in error messages. + * @return {string} The name or null. + * @internal + */ + getName: function () { + var type = this._currentElement.type; + var constructor = this._instance && this._instance.constructor; + return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null; + }, + + /** + * Get the publicly accessible representation of this component - i.e. what + * is exposed by refs and returned by render. Can be null for stateless + * components. + * + * @return {ReactComponent} the public component instance. + * @internal + */ + getPublicInstance: function () { + var inst = this._instance; + if (inst instanceof StatelessComponent) { + return null; + } + return inst; + }, + + // Stub + _instantiateReactComponent: null + + }; + + ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', { + mountComponent: 'mountComponent', + updateComponent: 'updateComponent', + _renderValidatedComponent: '_renderValidatedComponent' + }); + + var ReactCompositeComponent = { + + Mixin: ReactCompositeComponentMixin + + }; + + module.exports = ReactCompositeComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 63 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponentEnvironment + */ + + 'use strict'; + + var invariant = __webpack_require__(12); + + var injected = false; + + var ReactComponentEnvironment = { + + /** + * Optionally injectable environment dependent cleanup hook. (server vs. + * browser etc). Example: A browser system caches DOM nodes based on component + * ID and must remove that cache entry when this instance is unmounted. + */ + unmountIDFromEnvironment: null, + + /** + * Optionally injectable hook for swapping out mount images in the middle of + * the tree. + */ + replaceNodeWithMarkupByID: null, + + /** + * Optionally injectable hook for processing a queue of child updates. Will + * later move into MultiChildComponents. + */ + processChildrenUpdates: null, + + injection: { + injectEnvironment: function (environment) { + !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined; + ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment; + ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID; + ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates; + injected = true; + } + } + + }; + + module.exports = ReactComponentEnvironment; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPropTypeLocations + */ + + 'use strict'; + + var keyMirror = __webpack_require__(16); + + var ReactPropTypeLocations = keyMirror({ + prop: null, + context: null, + childContext: null + }); + + module.exports = ReactPropTypeLocations; + +/***/ }, +/* 65 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPropTypeLocationNames + */ + + 'use strict'; + + var ReactPropTypeLocationNames = {}; + + if (process.env.NODE_ENV !== 'production') { + ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; + } + + module.exports = ReactPropTypeLocationNames; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 66 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule shouldUpdateReactComponent + * @typechecks static-only + */ + + 'use strict'; + + /** + * Given a `prevElement` and `nextElement`, determines if the existing + * instance should be updated as opposed to being destroyed or replaced by a new + * instance. Both arguments are elements. This ensures that this logic can + * operate on stateless trees without any backing instance. + * + * @param {?object} prevElement + * @param {?object} nextElement + * @return {boolean} True if the existing instance should be updated. + * @protected + */ + function shouldUpdateReactComponent(prevElement, nextElement) { + var prevEmpty = prevElement === null || prevElement === false; + var nextEmpty = nextElement === null || nextElement === false; + if (prevEmpty || nextEmpty) { + return prevEmpty === nextEmpty; + } + + var prevType = typeof prevElement; + var nextType = typeof nextElement; + if (prevType === 'string' || prevType === 'number') { + return nextType === 'string' || nextType === 'number'; + } else { + return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key; + } + return false; + } + + module.exports = shouldUpdateReactComponent; + +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEmptyComponent + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactEmptyComponentRegistry = __webpack_require__(43); + var ReactReconciler = __webpack_require__(49); + + var assign = __webpack_require__(38); + + var placeholderElement; + + var ReactEmptyComponentInjection = { + injectEmptyComponent: function (component) { + placeholderElement = ReactElement.createElement(component); + } + }; + + var ReactEmptyComponent = function (instantiate) { + this._currentElement = null; + this._rootNodeID = null; + this._renderedComponent = instantiate(placeholderElement); + }; + assign(ReactEmptyComponent.prototype, { + construct: function (element) {}, + mountComponent: function (rootID, transaction, context) { + ReactEmptyComponentRegistry.registerNullComponentID(rootID); + this._rootNodeID = rootID; + return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context); + }, + receiveComponent: function () {}, + unmountComponent: function (rootID, transaction, context) { + ReactReconciler.unmountComponent(this._renderedComponent); + ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID); + this._rootNodeID = null; + this._renderedComponent = null; + } + }); + + ReactEmptyComponent.injection = ReactEmptyComponentInjection; + + module.exports = ReactEmptyComponent; + +/***/ }, +/* 68 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactNativeComponent + */ + + 'use strict'; + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + var autoGenerateWrapperClass = null; + var genericComponentClass = null; + // This registry keeps track of wrapper classes around native tags. + var tagToComponentClass = {}; + var textComponentClass = null; + + var ReactNativeComponentInjection = { + // This accepts a class that receives the tag string. This is a catch all + // that can render any kind of tag. + injectGenericComponentClass: function (componentClass) { + genericComponentClass = componentClass; + }, + // This accepts a text component class that takes the text string to be + // rendered as props. + injectTextComponentClass: function (componentClass) { + textComponentClass = componentClass; + }, + // This accepts a keyed object with classes as values. Each key represents a + // tag. That particular tag will use this class instead of the generic one. + injectComponentClasses: function (componentClasses) { + assign(tagToComponentClass, componentClasses); + } + }; + + /** + * Get a composite component wrapper class for a specific tag. + * + * @param {ReactElement} element The tag for which to get the class. + * @return {function} The React class constructor function. + */ + function getComponentClassForElement(element) { + if (typeof element.type === 'function') { + return element.type; + } + var tag = element.type; + var componentClass = tagToComponentClass[tag]; + if (componentClass == null) { + tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag); + } + return componentClass; + } + + /** + * Get a native internal component class for a specific tag. + * + * @param {ReactElement} element The element to create. + * @return {function} The internal class constructor function. + */ + function createInternalComponent(element) { + !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined; + return new genericComponentClass(element.type, element.props); + } + + /** + * @param {ReactText} text + * @return {ReactComponent} + */ + function createInstanceForText(text) { + return new textComponentClass(text); + } + + /** + * @param {ReactComponent} component + * @return {boolean} + */ + function isTextComponent(component) { + return component instanceof textComponentClass; + } + + var ReactNativeComponent = { + getComponentClassForElement: getComponentClassForElement, + createInternalComponent: createInternalComponent, + createInstanceForText: createInstanceForText, + isTextComponent: isTextComponent, + injection: ReactNativeComponentInjection + }; + + module.exports = ReactNativeComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 69 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule validateDOMNesting + */ + + 'use strict'; + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + var warning = __webpack_require__(24); + + var validateDOMNesting = emptyFunction; + + if (process.env.NODE_ENV !== 'production') { + // This validation code was written based on the HTML5 parsing spec: + // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope + // + // Note: this does not catch all invalid nesting, nor does it try to (as it's + // not clear what practical benefit doing so provides); instead, we warn only + // for cases where the parser will give a parse tree differing from what React + // intended. For example, <b><div></div></b> is invalid but we don't warn + // because it still parses correctly; we do warn for other cases like nested + // <p> tags where the beginning of the second element implicitly closes the + // first, causing a confusing mess. + + // https://html.spec.whatwg.org/multipage/syntax.html#special + var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; + + // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope + var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', + + // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point + // TODO: Distinguish by namespace here -- for <title>, including it here + // errs on the side of fewer warnings + 'foreignObject', 'desc', 'title']; + + // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope + var buttonScopeTags = inScopeTags.concat(['button']); + + // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags + var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt']; + + var emptyAncestorInfo = { + parentTag: null, + + formTag: null, + aTagInScope: null, + buttonTagInScope: null, + nobrTagInScope: null, + pTagInButtonScope: null, + + listItemTagAutoclosing: null, + dlItemTagAutoclosing: null + }; + + var updatedAncestorInfo = function (oldInfo, tag, instance) { + var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo); + var info = { tag: tag, instance: instance }; + + if (inScopeTags.indexOf(tag) !== -1) { + ancestorInfo.aTagInScope = null; + ancestorInfo.buttonTagInScope = null; + ancestorInfo.nobrTagInScope = null; + } + if (buttonScopeTags.indexOf(tag) !== -1) { + ancestorInfo.pTagInButtonScope = null; + } + + // See rules for 'li', 'dd', 'dt' start tags in + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody + if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') { + ancestorInfo.listItemTagAutoclosing = null; + ancestorInfo.dlItemTagAutoclosing = null; + } + + ancestorInfo.parentTag = info; + + if (tag === 'form') { + ancestorInfo.formTag = info; + } + if (tag === 'a') { + ancestorInfo.aTagInScope = info; + } + if (tag === 'button') { + ancestorInfo.buttonTagInScope = info; + } + if (tag === 'nobr') { + ancestorInfo.nobrTagInScope = info; + } + if (tag === 'p') { + ancestorInfo.pTagInButtonScope = info; + } + if (tag === 'li') { + ancestorInfo.listItemTagAutoclosing = info; + } + if (tag === 'dd' || tag === 'dt') { + ancestorInfo.dlItemTagAutoclosing = info; + } + + return ancestorInfo; + }; + + /** + * Returns whether + */ + var isTagValidWithParent = function (tag, parentTag) { + // First, let's check if we're in an unusual parsing mode... + switch (parentTag) { + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect + case 'select': + return tag === 'option' || tag === 'optgroup' || tag === '#text'; + case 'optgroup': + return tag === 'option' || tag === '#text'; + // Strictly speaking, seeing an <option> doesn't mean we're in a <select> + // but + case 'option': + return tag === '#text'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption + // No special behavior since these rules fall back to "in body" mode for + // all except special table nodes which cause bad parsing behavior anyway. + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr + case 'tr': + return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody + case 'tbody': + case 'thead': + case 'tfoot': + return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup + case 'colgroup': + return tag === 'col' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable + case 'table': + return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead + case 'head': + return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template'; + + // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element + case 'html': + return tag === 'head' || tag === 'body'; + } + + // Probably in the "in body" parsing mode, so we outlaw only tag combos + // where the parsing rules cause implicit opens or closes to be added. + // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody + switch (tag) { + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6'; + + case 'rp': + case 'rt': + return impliedEndTags.indexOf(parentTag) === -1; + + case 'caption': + case 'col': + case 'colgroup': + case 'frame': + case 'head': + case 'tbody': + case 'td': + case 'tfoot': + case 'th': + case 'thead': + case 'tr': + // These tags are only valid with a few parents that have special child + // parsing rules -- if we're down here, then none of those matched and + // so we allow it only if we don't know what the parent is, as all other + // cases are invalid. + return parentTag == null; + } + + return true; + }; + + /** + * Returns whether + */ + var findInvalidAncestorForTag = function (tag, ancestorInfo) { + switch (tag) { + case 'address': + case 'article': + case 'aside': + case 'blockquote': + case 'center': + case 'details': + case 'dialog': + case 'dir': + case 'div': + case 'dl': + case 'fieldset': + case 'figcaption': + case 'figure': + case 'footer': + case 'header': + case 'hgroup': + case 'main': + case 'menu': + case 'nav': + case 'ol': + case 'p': + case 'section': + case 'summary': + case 'ul': + + case 'pre': + case 'listing': + + case 'table': + + case 'hr': + + case 'xmp': + + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + return ancestorInfo.pTagInButtonScope; + + case 'form': + return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope; + + case 'li': + return ancestorInfo.listItemTagAutoclosing; + + case 'dd': + case 'dt': + return ancestorInfo.dlItemTagAutoclosing; + + case 'button': + return ancestorInfo.buttonTagInScope; + + case 'a': + // Spec says something about storing a list of markers, but it sounds + // equivalent to this check. + return ancestorInfo.aTagInScope; + + case 'nobr': + return ancestorInfo.nobrTagInScope; + } + + return null; + }; + + /** + * Given a ReactCompositeComponent instance, return a list of its recursive + * owners, starting at the root and ending with the instance itself. + */ + var findOwnerStack = function (instance) { + if (!instance) { + return []; + } + + var stack = []; + /*eslint-disable space-after-keywords */ + do { + /*eslint-enable space-after-keywords */ + stack.push(instance); + } while (instance = instance._currentElement._owner); + stack.reverse(); + return stack; + }; + + var didWarn = {}; + + validateDOMNesting = function (childTag, childInstance, ancestorInfo) { + ancestorInfo = ancestorInfo || emptyAncestorInfo; + var parentInfo = ancestorInfo.parentTag; + var parentTag = parentInfo && parentInfo.tag; + + var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo; + var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo); + var problematic = invalidParent || invalidAncestor; + + if (problematic) { + var ancestorTag = problematic.tag; + var ancestorInstance = problematic.instance; + + var childOwner = childInstance && childInstance._currentElement._owner; + var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner; + + var childOwners = findOwnerStack(childOwner); + var ancestorOwners = findOwnerStack(ancestorOwner); + + var minStackLen = Math.min(childOwners.length, ancestorOwners.length); + var i; + + var deepestCommon = -1; + for (i = 0; i < minStackLen; i++) { + if (childOwners[i] === ancestorOwners[i]) { + deepestCommon = i; + } else { + break; + } + } + + var UNKNOWN = '(unknown)'; + var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) { + return inst.getName() || UNKNOWN; + }); + var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) { + return inst.getName() || UNKNOWN; + }); + var ownerInfo = [].concat( + // If the parent and child instances have a common owner ancestor, start + // with that -- otherwise we just start with the parent's owners. + deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag, + // If we're warning about an invalid (non-parent) ancestry, add '...' + invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > '); + + var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo; + if (didWarn[warnKey]) { + return; + } + didWarn[warnKey] = true; + + if (invalidParent) { + var info = ''; + if (ancestorTag === 'table' && childTag === 'tr') { + info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.'; + } + process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined; + } + } + }; + + validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2); + + validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo; + + // For testing + validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) { + ancestorInfo = ancestorInfo || emptyAncestorInfo; + var parentInfo = ancestorInfo.parentTag; + var parentTag = parentInfo && parentInfo.tag; + return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo); + }; + } + + module.exports = validateDOMNesting; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 70 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultInjection + */ + + 'use strict'; + + var BeforeInputEventPlugin = __webpack_require__(71); + var ChangeEventPlugin = __webpack_require__(79); + var ClientReactRootIndex = __webpack_require__(82); + var DefaultEventPluginOrder = __webpack_require__(83); + var EnterLeaveEventPlugin = __webpack_require__(84); + var ExecutionEnvironment = __webpack_require__(8); + var HTMLDOMPropertyConfig = __webpack_require__(88); + var ReactBrowserComponentMixin = __webpack_require__(89); + var ReactComponentBrowserEnvironment = __webpack_require__(25); + var ReactDefaultBatchingStrategy = __webpack_require__(91); + var ReactDOMComponent = __webpack_require__(92); + var ReactDOMTextComponent = __webpack_require__(5); + var ReactEventListener = __webpack_require__(117); + var ReactInjection = __webpack_require__(120); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMount = __webpack_require__(27); + var ReactReconcileTransaction = __webpack_require__(124); + var SelectEventPlugin = __webpack_require__(129); + var ServerReactRootIndex = __webpack_require__(130); + var SimpleEventPlugin = __webpack_require__(131); + var SVGDOMPropertyConfig = __webpack_require__(140); + + var alreadyInjected = false; + + function inject() { + if (alreadyInjected) { + // TODO: This is currently true because these injections are shared between + // the client and the server package. They should be built independently + // and not share any injection state. Then this problem will be solved. + return; + } + alreadyInjected = true; + + ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener); + + /** + * Inject modules for resolving DOM hierarchy and plugin ordering. + */ + ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder); + ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles); + ReactInjection.EventPluginHub.injectMount(ReactMount); + + /** + * Some important event plugins included by default (without having to require + * them). + */ + ReactInjection.EventPluginHub.injectEventPluginsByName({ + SimpleEventPlugin: SimpleEventPlugin, + EnterLeaveEventPlugin: EnterLeaveEventPlugin, + ChangeEventPlugin: ChangeEventPlugin, + SelectEventPlugin: SelectEventPlugin, + BeforeInputEventPlugin: BeforeInputEventPlugin + }); + + ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent); + + ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent); + + ReactInjection.Class.injectMixin(ReactBrowserComponentMixin); + + ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig); + ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig); + + ReactInjection.EmptyComponent.injectEmptyComponent('noscript'); + + ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction); + ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy); + + ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex); + + ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment); + + if (process.env.NODE_ENV !== 'production') { + var url = ExecutionEnvironment.canUseDOM && window.location.href || ''; + if (/[?&]react_perf\b/.test(url)) { + var ReactDefaultPerf = __webpack_require__(141); + ReactDefaultPerf.start(); + } + } + } + + module.exports = { + inject: inject + }; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 71 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015 Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule BeforeInputEventPlugin + * @typechecks static-only + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPropagators = __webpack_require__(72); + var ExecutionEnvironment = __webpack_require__(8); + var FallbackCompositionState = __webpack_require__(73); + var SyntheticCompositionEvent = __webpack_require__(75); + var SyntheticInputEvent = __webpack_require__(77); + + var keyOf = __webpack_require__(78); + + var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space + var START_KEYCODE = 229; + + var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window; + + var documentMode = null; + if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) { + documentMode = document.documentMode; + } + + // Webkit offers a very useful `textInput` event that can be used to + // directly represent `beforeInput`. The IE `textinput` event is not as + // useful, so we don't use it. + var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto(); + + // In IE9+, we have access to composition events, but the data supplied + // by the native compositionend event may be incorrect. Japanese ideographic + // spaces, for instance (\u3000) are not recorded correctly. + var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11); + + /** + * Opera <= 12 includes TextEvent in window, but does not fire + * text input events. Rely on keypress instead. + */ + function isPresto() { + var opera = window.opera; + return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12; + } + + var SPACEBAR_CODE = 32; + var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); + + var topLevelTypes = EventConstants.topLevelTypes; + + // Events and their corresponding property names. + var eventTypes = { + beforeInput: { + phasedRegistrationNames: { + bubbled: keyOf({ onBeforeInput: null }), + captured: keyOf({ onBeforeInputCapture: null }) + }, + dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste] + }, + compositionEnd: { + phasedRegistrationNames: { + bubbled: keyOf({ onCompositionEnd: null }), + captured: keyOf({ onCompositionEndCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] + }, + compositionStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onCompositionStart: null }), + captured: keyOf({ onCompositionStartCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] + }, + compositionUpdate: { + phasedRegistrationNames: { + bubbled: keyOf({ onCompositionUpdate: null }), + captured: keyOf({ onCompositionUpdateCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown] + } + }; + + // Track whether we've ever handled a keypress on the space key. + var hasSpaceKeypress = false; + + /** + * Return whether a native keypress event is assumed to be a command. + * This is required because Firefox fires `keypress` events for key commands + * (cut, copy, select-all, etc.) even though no character is inserted. + */ + function isKeypressCommand(nativeEvent) { + return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && + // ctrlKey && altKey is equivalent to AltGr, and is not a command. + !(nativeEvent.ctrlKey && nativeEvent.altKey); + } + + /** + * Translate native top level events into event types. + * + * @param {string} topLevelType + * @return {object} + */ + function getCompositionEventType(topLevelType) { + switch (topLevelType) { + case topLevelTypes.topCompositionStart: + return eventTypes.compositionStart; + case topLevelTypes.topCompositionEnd: + return eventTypes.compositionEnd; + case topLevelTypes.topCompositionUpdate: + return eventTypes.compositionUpdate; + } + } + + /** + * Does our fallback best-guess model think this event signifies that + * composition has begun? + * + * @param {string} topLevelType + * @param {object} nativeEvent + * @return {boolean} + */ + function isFallbackCompositionStart(topLevelType, nativeEvent) { + return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE; + } + + /** + * Does our fallback mode think that this event is the end of composition? + * + * @param {string} topLevelType + * @param {object} nativeEvent + * @return {boolean} + */ + function isFallbackCompositionEnd(topLevelType, nativeEvent) { + switch (topLevelType) { + case topLevelTypes.topKeyUp: + // Command keys insert or clear IME input. + return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1; + case topLevelTypes.topKeyDown: + // Expect IME keyCode on each keydown. If we get any other + // code we must have exited earlier. + return nativeEvent.keyCode !== START_KEYCODE; + case topLevelTypes.topKeyPress: + case topLevelTypes.topMouseDown: + case topLevelTypes.topBlur: + // Events are not possible without cancelling IME. + return true; + default: + return false; + } + } + + /** + * Google Input Tools provides composition data via a CustomEvent, + * with the `data` property populated in the `detail` object. If this + * is available on the event object, use it. If not, this is a plain + * composition event and we have nothing special to extract. + * + * @param {object} nativeEvent + * @return {?string} + */ + function getDataFromCustomEvent(nativeEvent) { + var detail = nativeEvent.detail; + if (typeof detail === 'object' && 'data' in detail) { + return detail.data; + } + return null; + } + + // Track the current IME composition fallback object, if any. + var currentComposition = null; + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {?object} A SyntheticCompositionEvent. + */ + function extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var eventType; + var fallbackData; + + if (canUseCompositionEvent) { + eventType = getCompositionEventType(topLevelType); + } else if (!currentComposition) { + if (isFallbackCompositionStart(topLevelType, nativeEvent)) { + eventType = eventTypes.compositionStart; + } + } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) { + eventType = eventTypes.compositionEnd; + } + + if (!eventType) { + return null; + } + + if (useFallbackCompositionData) { + // The current composition is stored statically and must not be + // overwritten while composition continues. + if (!currentComposition && eventType === eventTypes.compositionStart) { + currentComposition = FallbackCompositionState.getPooled(topLevelTarget); + } else if (eventType === eventTypes.compositionEnd) { + if (currentComposition) { + fallbackData = currentComposition.getData(); + } + } + } + + var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget); + + if (fallbackData) { + // Inject data generated from fallback path into the synthetic event. + // This matches the property of native CompositionEventInterface. + event.data = fallbackData; + } else { + var customData = getDataFromCustomEvent(nativeEvent); + if (customData !== null) { + event.data = customData; + } + } + + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + } + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {object} nativeEvent Native browser event. + * @return {?string} The string corresponding to this `beforeInput` event. + */ + function getNativeBeforeInputChars(topLevelType, nativeEvent) { + switch (topLevelType) { + case topLevelTypes.topCompositionEnd: + return getDataFromCustomEvent(nativeEvent); + case topLevelTypes.topKeyPress: + /** + * If native `textInput` events are available, our goal is to make + * use of them. However, there is a special case: the spacebar key. + * In Webkit, preventing default on a spacebar `textInput` event + * cancels character insertion, but it *also* causes the browser + * to fall back to its default spacebar behavior of scrolling the + * page. + * + * Tracking at: + * https://code.google.com/p/chromium/issues/detail?id=355103 + * + * To avoid this issue, use the keypress event as if no `textInput` + * event is available. + */ + var which = nativeEvent.which; + if (which !== SPACEBAR_CODE) { + return null; + } + + hasSpaceKeypress = true; + return SPACEBAR_CHAR; + + case topLevelTypes.topTextInput: + // Record the characters to be added to the DOM. + var chars = nativeEvent.data; + + // If it's a spacebar character, assume that we have already handled + // it at the keypress level and bail immediately. Android Chrome + // doesn't give us keycodes, so we need to blacklist it. + if (chars === SPACEBAR_CHAR && hasSpaceKeypress) { + return null; + } + + return chars; + + default: + // For other native event types, do nothing. + return null; + } + } + + /** + * For browsers that do not provide the `textInput` event, extract the + * appropriate string to use for SyntheticInputEvent. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {object} nativeEvent Native browser event. + * @return {?string} The fallback string for this `beforeInput` event. + */ + function getFallbackBeforeInputChars(topLevelType, nativeEvent) { + // If we are currently composing (IME) and using a fallback to do so, + // try to extract the composed characters from the fallback object. + if (currentComposition) { + if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) { + var chars = currentComposition.getData(); + FallbackCompositionState.release(currentComposition); + currentComposition = null; + return chars; + } + return null; + } + + switch (topLevelType) { + case topLevelTypes.topPaste: + // If a paste event occurs after a keypress, throw out the input + // chars. Paste events should not lead to BeforeInput events. + return null; + case topLevelTypes.topKeyPress: + /** + * As of v27, Firefox may fire keypress events even when no character + * will be inserted. A few possibilities: + * + * - `which` is `0`. Arrow keys, Esc key, etc. + * + * - `which` is the pressed key code, but no char is available. + * Ex: 'AltGr + d` in Polish. There is no modified character for + * this key combination and no character is inserted into the + * document, but FF fires the keypress for char code `100` anyway. + * No `input` event will occur. + * + * - `which` is the pressed key code, but a command combination is + * being used. Ex: `Cmd+C`. No character is inserted, and no + * `input` event will occur. + */ + if (nativeEvent.which && !isKeypressCommand(nativeEvent)) { + return String.fromCharCode(nativeEvent.which); + } + return null; + case topLevelTypes.topCompositionEnd: + return useFallbackCompositionData ? null : nativeEvent.data; + default: + return null; + } + } + + /** + * Extract a SyntheticInputEvent for `beforeInput`, based on either native + * `textInput` or fallback behavior. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {?object} A SyntheticInputEvent. + */ + function extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var chars; + + if (canUseTextInputEvent) { + chars = getNativeBeforeInputChars(topLevelType, nativeEvent); + } else { + chars = getFallbackBeforeInputChars(topLevelType, nativeEvent); + } + + // If no characters are being inserted, no BeforeInput event should + // be fired. + if (!chars) { + return null; + } + + var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget); + + event.data = chars; + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + } + + /** + * Create an `onBeforeInput` event to match + * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents. + * + * This event plugin is based on the native `textInput` event + * available in Chrome, Safari, Opera, and IE. This event fires after + * `onKeyPress` and `onCompositionEnd`, but before `onInput`. + * + * `beforeInput` is spec'd but not implemented in any browsers, and + * the `input` event does not provide any useful information about what has + * actually been added, contrary to the spec. Thus, `textInput` is the best + * available event to identify the characters that have actually been inserted + * into the target node. + * + * This plugin is also responsible for emitting `composition` events, thus + * allowing us to share composition fallback code for both `beforeInput` and + * `composition` event types. + */ + var BeforeInputEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)]; + } + }; + + module.exports = BeforeInputEventPlugin; + +/***/ }, +/* 72 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EventPropagators + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPluginHub = __webpack_require__(30); + + var warning = __webpack_require__(24); + + var accumulateInto = __webpack_require__(34); + var forEachAccumulated = __webpack_require__(35); + + var PropagationPhases = EventConstants.PropagationPhases; + var getListener = EventPluginHub.getListener; + + /** + * Some event types have a notion of different registration names for different + * "phases" of propagation. This finds listeners by a given phase. + */ + function listenerAtPhase(id, event, propagationPhase) { + var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase]; + return getListener(id, registrationName); + } + + /** + * Tags a `SyntheticEvent` with dispatched listeners. Creating this function + * here, allows us to not have to bind or create functions for each event. + * Mutating the event's members allows us to not have to create a wrapping + * "dispatch" object that pairs the event with the listener. + */ + function accumulateDirectionalDispatches(domID, upwards, event) { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined; + } + var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured; + var listener = listenerAtPhase(domID, event, phase); + if (listener) { + event._dispatchListeners = accumulateInto(event._dispatchListeners, listener); + event._dispatchIDs = accumulateInto(event._dispatchIDs, domID); + } + } + + /** + * Collect dispatches (must be entirely collected before dispatching - see unit + * tests). Lazily allocate the array to conserve memory. We must loop through + * each event and perform the traversal for each one. We cannot perform a + * single traversal for the entire collection of events because each event may + * have a different target. + */ + function accumulateTwoPhaseDispatchesSingle(event) { + if (event && event.dispatchConfig.phasedRegistrationNames) { + EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event); + } + } + + /** + * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID. + */ + function accumulateTwoPhaseDispatchesSingleSkipTarget(event) { + if (event && event.dispatchConfig.phasedRegistrationNames) { + EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event); + } + } + + /** + * Accumulates without regard to direction, does not look for phased + * registration names. Same as `accumulateDirectDispatchesSingle` but without + * requiring that the `dispatchMarker` be the same as the dispatched ID. + */ + function accumulateDispatches(id, ignoredDirection, event) { + if (event && event.dispatchConfig.registrationName) { + var registrationName = event.dispatchConfig.registrationName; + var listener = getListener(id, registrationName); + if (listener) { + event._dispatchListeners = accumulateInto(event._dispatchListeners, listener); + event._dispatchIDs = accumulateInto(event._dispatchIDs, id); + } + } + } + + /** + * Accumulates dispatches on an `SyntheticEvent`, but only for the + * `dispatchMarker`. + * @param {SyntheticEvent} event + */ + function accumulateDirectDispatchesSingle(event) { + if (event && event.dispatchConfig.registrationName) { + accumulateDispatches(event.dispatchMarker, null, event); + } + } + + function accumulateTwoPhaseDispatches(events) { + forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle); + } + + function accumulateTwoPhaseDispatchesSkipTarget(events) { + forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget); + } + + function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) { + EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter); + } + + function accumulateDirectDispatches(events) { + forEachAccumulated(events, accumulateDirectDispatchesSingle); + } + + /** + * A small set of propagation patterns, each of which will accept a small amount + * of information, and generate a set of "dispatch ready event objects" - which + * are sets of events that have already been annotated with a set of dispatched + * listener functions/ids. The API is designed this way to discourage these + * propagation strategies from actually executing the dispatches, since we + * always want to collect the entire set of dispatches before executing event a + * single one. + * + * @constructor EventPropagators + */ + var EventPropagators = { + accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches, + accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget, + accumulateDirectDispatches: accumulateDirectDispatches, + accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches + }; + + module.exports = EventPropagators; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 73 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule FallbackCompositionState + * @typechecks static-only + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + + var assign = __webpack_require__(38); + var getTextContentAccessor = __webpack_require__(74); + + /** + * This helper class stores information about text content of a target node, + * allowing comparison of content before and after a given event. + * + * Identify the node where selection currently begins, then observe + * both its text content and its current position in the DOM. Since the + * browser may natively replace the target node during composition, we can + * use its position to find its replacement. + * + * @param {DOMEventTarget} root + */ + function FallbackCompositionState(root) { + this._root = root; + this._startText = this.getText(); + this._fallbackText = null; + } + + assign(FallbackCompositionState.prototype, { + destructor: function () { + this._root = null; + this._startText = null; + this._fallbackText = null; + }, + + /** + * Get current text of input. + * + * @return {string} + */ + getText: function () { + if ('value' in this._root) { + return this._root.value; + } + return this._root[getTextContentAccessor()]; + }, + + /** + * Determine the differing substring between the initially stored + * text content and the current content. + * + * @return {string} + */ + getData: function () { + if (this._fallbackText) { + return this._fallbackText; + } + + var start; + var startValue = this._startText; + var startLength = startValue.length; + var end; + var endValue = this.getText(); + var endLength = endValue.length; + + for (start = 0; start < startLength; start++) { + if (startValue[start] !== endValue[start]) { + break; + } + } + + var minEnd = startLength - start; + for (end = 1; end <= minEnd; end++) { + if (startValue[startLength - end] !== endValue[endLength - end]) { + break; + } + } + + var sliceTail = end > 1 ? 1 - end : undefined; + this._fallbackText = endValue.slice(start, sliceTail); + return this._fallbackText; + } + }); + + PooledClass.addPoolingTo(FallbackCompositionState); + + module.exports = FallbackCompositionState; + +/***/ }, +/* 74 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getTextContentAccessor + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var contentKey = null; + + /** + * Gets the key used to access text content on a DOM node. + * + * @return {?string} Key used to access text content. + * @internal + */ + function getTextContentAccessor() { + if (!contentKey && ExecutionEnvironment.canUseDOM) { + // Prefer textContent to innerText because many browsers support both but + // SVG <text> elements don't support innerText even when <div> does. + contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText'; + } + return contentKey; + } + + module.exports = getTextContentAccessor; + +/***/ }, +/* 75 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticCompositionEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + /** + * @interface Event + * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents + */ + var CompositionEventInterface = { + data: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface); + + module.exports = SyntheticCompositionEvent; + +/***/ }, +/* 76 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticEvent + * @typechecks static-only + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + var warning = __webpack_require__(24); + + /** + * @interface Event + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var EventInterface = { + type: null, + // currentTarget is set when dispatching; no use in copying it here + currentTarget: emptyFunction.thatReturnsNull, + eventPhase: null, + bubbles: null, + cancelable: null, + timeStamp: function (event) { + return event.timeStamp || Date.now(); + }, + defaultPrevented: null, + isTrusted: null + }; + + /** + * Synthetic events are dispatched by event plugins, typically in response to a + * top-level event delegation handler. + * + * These systems should generally use pooling to reduce the frequency of garbage + * collection. The system should check `isPersistent` to determine whether the + * event should be released into the pool after being dispatched. Users that + * need a persisted event should invoke `persist`. + * + * Synthetic events (and subclasses) implement the DOM Level 3 Events API by + * normalizing browser quirks. Subclasses do not necessarily have to implement a + * DOM interface; custom application-specific events can also subclass this. + * + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + */ + function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + this.dispatchConfig = dispatchConfig; + this.dispatchMarker = dispatchMarker; + this.nativeEvent = nativeEvent; + this.target = nativeEventTarget; + this.currentTarget = nativeEventTarget; + + var Interface = this.constructor.Interface; + for (var propName in Interface) { + if (!Interface.hasOwnProperty(propName)) { + continue; + } + var normalize = Interface[propName]; + if (normalize) { + this[propName] = normalize(nativeEvent); + } else { + this[propName] = nativeEvent[propName]; + } + } + + var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false; + if (defaultPrevented) { + this.isDefaultPrevented = emptyFunction.thatReturnsTrue; + } else { + this.isDefaultPrevented = emptyFunction.thatReturnsFalse; + } + this.isPropagationStopped = emptyFunction.thatReturnsFalse; + } + + assign(SyntheticEvent.prototype, { + + preventDefault: function () { + this.defaultPrevented = true; + var event = this.nativeEvent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined; + } + if (!event) { + return; + } + + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + this.isDefaultPrevented = emptyFunction.thatReturnsTrue; + }, + + stopPropagation: function () { + var event = this.nativeEvent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\'re ' + 'seeing this, you\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined; + } + if (!event) { + return; + } + + if (event.stopPropagation) { + event.stopPropagation(); + } else { + event.cancelBubble = true; + } + this.isPropagationStopped = emptyFunction.thatReturnsTrue; + }, + + /** + * We release all dispatched `SyntheticEvent`s after each event loop, adding + * them back into the pool. This allows a way to hold onto a reference that + * won't be added back into the pool. + */ + persist: function () { + this.isPersistent = emptyFunction.thatReturnsTrue; + }, + + /** + * Checks if this event should be released back into the pool. + * + * @return {boolean} True if this should not be released, false otherwise. + */ + isPersistent: emptyFunction.thatReturnsFalse, + + /** + * `PooledClass` looks for `destructor` on each instance it releases. + */ + destructor: function () { + var Interface = this.constructor.Interface; + for (var propName in Interface) { + this[propName] = null; + } + this.dispatchConfig = null; + this.dispatchMarker = null; + this.nativeEvent = null; + } + + }); + + SyntheticEvent.Interface = EventInterface; + + /** + * Helper to reduce boilerplate when creating subclasses. + * + * @param {function} Class + * @param {?object} Interface + */ + SyntheticEvent.augmentClass = function (Class, Interface) { + var Super = this; + + var prototype = Object.create(Super.prototype); + assign(prototype, Class.prototype); + Class.prototype = prototype; + Class.prototype.constructor = Class; + + Class.Interface = assign({}, Super.Interface, Interface); + Class.augmentClass = Super.augmentClass; + + PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler); + }; + + PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler); + + module.exports = SyntheticEvent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 77 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticInputEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + /** + * @interface Event + * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105 + * /#events-inputevents + */ + var InputEventInterface = { + data: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface); + + module.exports = SyntheticInputEvent; + +/***/ }, +/* 78 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule keyOf + */ + + /** + * Allows extraction of a minified key. Let's the build system minify keys + * without losing the ability to dynamically use key strings as values + * themselves. Pass in an object with a single key/val pair and it will return + * you the string key of that single record. Suppose you want to grab the + * value for a key 'className' inside of an object. Key/val minification may + * have aliased that key to be 'xa12'. keyOf({className: null}) will return + * 'xa12' in that case. Resolve keys you want to use once at startup time, then + * reuse those resolutions. + */ + "use strict"; + + var keyOf = function (oneKeyObj) { + var key; + for (key in oneKeyObj) { + if (!oneKeyObj.hasOwnProperty(key)) { + continue; + } + return key; + } + return null; + }; + + module.exports = keyOf; + +/***/ }, +/* 79 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ChangeEventPlugin + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPluginHub = __webpack_require__(30); + var EventPropagators = __webpack_require__(72); + var ExecutionEnvironment = __webpack_require__(8); + var ReactUpdates = __webpack_require__(53); + var SyntheticEvent = __webpack_require__(76); + + var getEventTarget = __webpack_require__(80); + var isEventSupported = __webpack_require__(39); + var isTextInputElement = __webpack_require__(81); + var keyOf = __webpack_require__(78); + + var topLevelTypes = EventConstants.topLevelTypes; + + var eventTypes = { + change: { + phasedRegistrationNames: { + bubbled: keyOf({ onChange: null }), + captured: keyOf({ onChangeCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange] + } + }; + + /** + * For IE shims + */ + var activeElement = null; + var activeElementID = null; + var activeElementValue = null; + var activeElementValueProp = null; + + /** + * SECTION: handle `change` event + */ + function shouldUseChangeEvent(elem) { + var nodeName = elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName === 'select' || nodeName === 'input' && elem.type === 'file'; + } + + var doesChangeEventBubble = false; + if (ExecutionEnvironment.canUseDOM) { + // See `handleChange` comment below + doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8); + } + + function manualDispatchChangeEvent(nativeEvent) { + var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent)); + EventPropagators.accumulateTwoPhaseDispatches(event); + + // If change and propertychange bubbled, we'd just bind to it like all the + // other events and have it go through ReactBrowserEventEmitter. Since it + // doesn't, we manually listen for the events and so we have to enqueue and + // process the abstract event manually. + // + // Batching is necessary here in order to ensure that all event handlers run + // before the next rerender (including event handlers attached to ancestor + // elements instead of directly on the input). Without this, controlled + // components don't work properly in conjunction with event bubbling because + // the component is rerendered and the value reverted before all the event + // handlers can run. See https://github.com/facebook/react/issues/708. + ReactUpdates.batchedUpdates(runEventInBatch, event); + } + + function runEventInBatch(event) { + EventPluginHub.enqueueEvents(event); + EventPluginHub.processEventQueue(false); + } + + function startWatchingForChangeEventIE8(target, targetID) { + activeElement = target; + activeElementID = targetID; + activeElement.attachEvent('onchange', manualDispatchChangeEvent); + } + + function stopWatchingForChangeEventIE8() { + if (!activeElement) { + return; + } + activeElement.detachEvent('onchange', manualDispatchChangeEvent); + activeElement = null; + activeElementID = null; + } + + function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topChange) { + return topLevelTargetID; + } + } + function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topFocus) { + // stopWatching() should be a noop here but we call it just in case we + // missed a blur event somehow. + stopWatchingForChangeEventIE8(); + startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID); + } else if (topLevelType === topLevelTypes.topBlur) { + stopWatchingForChangeEventIE8(); + } + } + + /** + * SECTION: handle `input` event + */ + var isInputEventSupported = false; + if (ExecutionEnvironment.canUseDOM) { + // IE9 claims to support the input event but fails to trigger it when + // deleting text, so we ignore its input events + isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9); + } + + /** + * (For old IE.) Replacement getter/setter for the `value` property that gets + * set on the active element. + */ + var newValueProp = { + get: function () { + return activeElementValueProp.get.call(this); + }, + set: function (val) { + // Cast to a string so we can do equality checks. + activeElementValue = '' + val; + activeElementValueProp.set.call(this, val); + } + }; + + /** + * (For old IE.) Starts tracking propertychange events on the passed-in element + * and override the value property so that we can distinguish user events from + * value changes in JS. + */ + function startWatchingForValueChange(target, targetID) { + activeElement = target; + activeElementID = targetID; + activeElementValue = target.value; + activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value'); + + // Not guarded in a canDefineProperty check: IE8 supports defineProperty only + // on DOM elements + Object.defineProperty(activeElement, 'value', newValueProp); + activeElement.attachEvent('onpropertychange', handlePropertyChange); + } + + /** + * (For old IE.) Removes the event listeners from the currently-tracked element, + * if any exists. + */ + function stopWatchingForValueChange() { + if (!activeElement) { + return; + } + + // delete restores the original property definition + delete activeElement.value; + activeElement.detachEvent('onpropertychange', handlePropertyChange); + + activeElement = null; + activeElementID = null; + activeElementValue = null; + activeElementValueProp = null; + } + + /** + * (For old IE.) Handles a propertychange event, sending a `change` event if + * the value of the active element has changed. + */ + function handlePropertyChange(nativeEvent) { + if (nativeEvent.propertyName !== 'value') { + return; + } + var value = nativeEvent.srcElement.value; + if (value === activeElementValue) { + return; + } + activeElementValue = value; + + manualDispatchChangeEvent(nativeEvent); + } + + /** + * If a `change` event should be fired, returns the target's ID. + */ + function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topInput) { + // In modern browsers (i.e., not IE8 or IE9), the input event is exactly + // what we want so fall through here and trigger an abstract event + return topLevelTargetID; + } + } + + // For IE8 and IE9. + function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topFocus) { + // In IE8, we can capture almost all .value changes by adding a + // propertychange handler and looking for events with propertyName + // equal to 'value' + // In IE9, propertychange fires for most input events but is buggy and + // doesn't fire when text is deleted, but conveniently, selectionchange + // appears to fire in all of the remaining cases so we catch those and + // forward the event if the value has changed + // In either case, we don't want to call the event handler if the value + // is changed from JS so we redefine a setter for `.value` that updates + // our activeElementValue variable, allowing us to ignore those changes + // + // stopWatching() should be a noop here but we call it just in case we + // missed a blur event somehow. + stopWatchingForValueChange(); + startWatchingForValueChange(topLevelTarget, topLevelTargetID); + } else if (topLevelType === topLevelTypes.topBlur) { + stopWatchingForValueChange(); + } + } + + // For IE8 and IE9. + function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) { + // On the selectionchange event, the target is just document which isn't + // helpful for us so just check activeElement instead. + // + // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire + // propertychange on the first input event after setting `value` from a + // script and fires only keydown, keypress, keyup. Catching keyup usually + // gets it and catching keydown lets us fire an event for the first + // keystroke if user does a key repeat (it'll be a little delayed: right + // before the second keystroke). Other input methods (e.g., paste) seem to + // fire selectionchange normally. + if (activeElement && activeElement.value !== activeElementValue) { + activeElementValue = activeElement.value; + return activeElementID; + } + } + } + + /** + * SECTION: handle `click` event + */ + function shouldUseClickEvent(elem) { + // Use the `click` event to detect changes to checkbox and radio inputs. + // This approach works across all browsers, whereas `change` does not fire + // until `blur` in IE8. + return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio'); + } + + function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) { + if (topLevelType === topLevelTypes.topClick) { + return topLevelTargetID; + } + } + + /** + * This plugin creates an `onChange` event that normalizes change events + * across form elements. This event fires at a time when it's possible to + * change the element's value without seeing a flicker. + * + * Supported elements are: + * - input (see `isTextInputElement`) + * - textarea + * - select + */ + var ChangeEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + + var getTargetIDFunc, handleEventFunc; + if (shouldUseChangeEvent(topLevelTarget)) { + if (doesChangeEventBubble) { + getTargetIDFunc = getTargetIDForChangeEvent; + } else { + handleEventFunc = handleEventsForChangeEventIE8; + } + } else if (isTextInputElement(topLevelTarget)) { + if (isInputEventSupported) { + getTargetIDFunc = getTargetIDForInputEvent; + } else { + getTargetIDFunc = getTargetIDForInputEventIE; + handleEventFunc = handleEventsForInputEventIE; + } + } else if (shouldUseClickEvent(topLevelTarget)) { + getTargetIDFunc = getTargetIDForClickEvent; + } + + if (getTargetIDFunc) { + var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID); + if (targetID) { + var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget); + event.type = 'change'; + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + } + } + + if (handleEventFunc) { + handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID); + } + } + + }; + + module.exports = ChangeEventPlugin; + +/***/ }, +/* 80 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventTarget + * @typechecks static-only + */ + + 'use strict'; + + /** + * Gets the target node from a native browser event by accounting for + * inconsistencies in browser DOM APIs. + * + * @param {object} nativeEvent Native browser event. + * @return {DOMEventTarget} Target node. + */ + function getEventTarget(nativeEvent) { + var target = nativeEvent.target || nativeEvent.srcElement || window; + // Safari may fire events on text nodes (Node.TEXT_NODE is 3). + // @see http://www.quirksmode.org/js/events_properties.html + return target.nodeType === 3 ? target.parentNode : target; + } + + module.exports = getEventTarget; + +/***/ }, +/* 81 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule isTextInputElement + */ + + 'use strict'; + + /** + * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + */ + var supportedInputTypes = { + 'color': true, + 'date': true, + 'datetime': true, + 'datetime-local': true, + 'email': true, + 'month': true, + 'number': true, + 'password': true, + 'range': true, + 'search': true, + 'tel': true, + 'text': true, + 'time': true, + 'url': true, + 'week': true + }; + + function isTextInputElement(elem) { + var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea'); + } + + module.exports = isTextInputElement; + +/***/ }, +/* 82 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ClientReactRootIndex + * @typechecks + */ + + 'use strict'; + + var nextReactRootIndex = 0; + + var ClientReactRootIndex = { + createReactRootIndex: function () { + return nextReactRootIndex++; + } + }; + + module.exports = ClientReactRootIndex; + +/***/ }, +/* 83 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DefaultEventPluginOrder + */ + + 'use strict'; + + var keyOf = __webpack_require__(78); + + /** + * Module that is injectable into `EventPluginHub`, that specifies a + * deterministic ordering of `EventPlugin`s. A convenient way to reason about + * plugins, without having to package every one of them. This is better than + * having plugins be ordered in the same order that they are injected because + * that ordering would be influenced by the packaging order. + * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that + * preventing default on events is convenient in `SimpleEventPlugin` handlers. + */ + var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })]; + + module.exports = DefaultEventPluginOrder; + +/***/ }, +/* 84 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule EnterLeaveEventPlugin + * @typechecks static-only + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPropagators = __webpack_require__(72); + var SyntheticMouseEvent = __webpack_require__(85); + + var ReactMount = __webpack_require__(27); + var keyOf = __webpack_require__(78); + + var topLevelTypes = EventConstants.topLevelTypes; + var getFirstReactDOM = ReactMount.getFirstReactDOM; + + var eventTypes = { + mouseEnter: { + registrationName: keyOf({ onMouseEnter: null }), + dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver] + }, + mouseLeave: { + registrationName: keyOf({ onMouseLeave: null }), + dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver] + } + }; + + var extractedEvents = [null, null]; + + var EnterLeaveEventPlugin = { + + eventTypes: eventTypes, + + /** + * For almost every interaction we care about, there will be both a top-level + * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that + * we do not extract duplicate events. However, moving the mouse into the + * browser from outside will not fire a `mouseout` event. In this case, we use + * the `mouseover` top-level event. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) { + return null; + } + if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) { + // Must not be a mouse in or mouse out - ignoring. + return null; + } + + var win; + if (topLevelTarget.window === topLevelTarget) { + // `topLevelTarget` is probably a window object. + win = topLevelTarget; + } else { + // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. + var doc = topLevelTarget.ownerDocument; + if (doc) { + win = doc.defaultView || doc.parentWindow; + } else { + win = window; + } + } + + var from; + var to; + var fromID = ''; + var toID = ''; + if (topLevelType === topLevelTypes.topMouseOut) { + from = topLevelTarget; + fromID = topLevelTargetID; + to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement); + if (to) { + toID = ReactMount.getID(to); + } else { + to = win; + } + to = to || win; + } else { + from = win; + to = topLevelTarget; + toID = topLevelTargetID; + } + + if (from === to) { + // Nothing pertains to our managed components. + return null; + } + + var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget); + leave.type = 'mouseleave'; + leave.target = from; + leave.relatedTarget = to; + + var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget); + enter.type = 'mouseenter'; + enter.target = to; + enter.relatedTarget = from; + + EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID); + + extractedEvents[0] = leave; + extractedEvents[1] = enter; + + return extractedEvents; + } + + }; + + module.exports = EnterLeaveEventPlugin; + +/***/ }, +/* 85 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticMouseEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + var ViewportMetrics = __webpack_require__(37); + + var getEventModifierState = __webpack_require__(87); + + /** + * @interface MouseEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var MouseEventInterface = { + screenX: null, + screenY: null, + clientX: null, + clientY: null, + ctrlKey: null, + shiftKey: null, + altKey: null, + metaKey: null, + getModifierState: getEventModifierState, + button: function (event) { + // Webkit, Firefox, IE9+ + // which: 1 2 3 + // button: 0 1 2 (standard) + var button = event.button; + if ('which' in event) { + return button; + } + // IE<9 + // which: undefined + // button: 0 0 0 + // button: 1 4 2 (onmouseup) + return button === 2 ? 2 : button === 4 ? 1 : 0; + }, + buttons: null, + relatedTarget: function (event) { + return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement); + }, + // "Proprietary" Interface. + pageX: function (event) { + return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft; + }, + pageY: function (event) { + return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface); + + module.exports = SyntheticMouseEvent; + +/***/ }, +/* 86 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticUIEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + var getEventTarget = __webpack_require__(80); + + /** + * @interface UIEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var UIEventInterface = { + view: function (event) { + if (event.view) { + return event.view; + } + + var target = getEventTarget(event); + if (target != null && target.window === target) { + // target is a window object + return target; + } + + var doc = target.ownerDocument; + // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. + if (doc) { + return doc.defaultView || doc.parentWindow; + } else { + return window; + } + }, + detail: function (event) { + return event.detail || 0; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ + function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface); + + module.exports = SyntheticUIEvent; + +/***/ }, +/* 87 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventModifierState + * @typechecks static-only + */ + + 'use strict'; + + /** + * Translation from modifier key to the associated property in the event. + * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers + */ + + var modifierKeyToProp = { + 'Alt': 'altKey', + 'Control': 'ctrlKey', + 'Meta': 'metaKey', + 'Shift': 'shiftKey' + }; + + // IE8 does not implement getModifierState so we simply map it to the only + // modifier keys exposed by the event itself, does not support Lock-keys. + // Currently, all major browsers except Chrome seems to support Lock-keys. + function modifierStateGetter(keyArg) { + var syntheticEvent = this; + var nativeEvent = syntheticEvent.nativeEvent; + if (nativeEvent.getModifierState) { + return nativeEvent.getModifierState(keyArg); + } + var keyProp = modifierKeyToProp[keyArg]; + return keyProp ? !!nativeEvent[keyProp] : false; + } + + function getEventModifierState(nativeEvent) { + return modifierStateGetter; + } + + module.exports = getEventModifierState; + +/***/ }, +/* 88 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule HTMLDOMPropertyConfig + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ExecutionEnvironment = __webpack_require__(8); + + var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE; + var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY; + var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE; + var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS; + var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE; + var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE; + var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE; + + var hasSVG; + if (ExecutionEnvironment.canUseDOM) { + var implementation = document.implementation; + hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1'); + } + + var HTMLDOMPropertyConfig = { + isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/), + Properties: { + /** + * Standard Properties + */ + accept: null, + acceptCharset: null, + accessKey: null, + action: null, + allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + allowTransparency: MUST_USE_ATTRIBUTE, + alt: null, + async: HAS_BOOLEAN_VALUE, + autoComplete: null, + // autoFocus is polyfilled/normalized by AutoFocusUtils + // autoFocus: HAS_BOOLEAN_VALUE, + autoPlay: HAS_BOOLEAN_VALUE, + capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + cellPadding: null, + cellSpacing: null, + charSet: MUST_USE_ATTRIBUTE, + challenge: MUST_USE_ATTRIBUTE, + checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + classID: MUST_USE_ATTRIBUTE, + // To set className on SVG elements, it's necessary to use .setAttribute; + // this works on HTML elements too in all browsers except IE8. Conveniently, + // IE8 doesn't support SVG and so we can simply use the attribute in + // browsers that support SVG and the property in browsers that don't, + // regardless of whether the element is HTML or SVG. + className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY, + cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, + colSpan: null, + content: null, + contentEditable: null, + contextMenu: MUST_USE_ATTRIBUTE, + controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + coords: null, + crossOrigin: null, + data: null, // For `<object />` acts as `src`. + dateTime: MUST_USE_ATTRIBUTE, + 'default': HAS_BOOLEAN_VALUE, + defer: HAS_BOOLEAN_VALUE, + dir: null, + disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + download: HAS_OVERLOADED_BOOLEAN_VALUE, + draggable: null, + encType: null, + form: MUST_USE_ATTRIBUTE, + formAction: MUST_USE_ATTRIBUTE, + formEncType: MUST_USE_ATTRIBUTE, + formMethod: MUST_USE_ATTRIBUTE, + formNoValidate: HAS_BOOLEAN_VALUE, + formTarget: MUST_USE_ATTRIBUTE, + frameBorder: MUST_USE_ATTRIBUTE, + headers: null, + height: MUST_USE_ATTRIBUTE, + hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + high: null, + href: null, + hrefLang: null, + htmlFor: null, + httpEquiv: null, + icon: null, + id: MUST_USE_PROPERTY, + inputMode: MUST_USE_ATTRIBUTE, + integrity: null, + is: MUST_USE_ATTRIBUTE, + keyParams: MUST_USE_ATTRIBUTE, + keyType: MUST_USE_ATTRIBUTE, + kind: null, + label: null, + lang: null, + list: MUST_USE_ATTRIBUTE, + loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + low: null, + manifest: MUST_USE_ATTRIBUTE, + marginHeight: null, + marginWidth: null, + max: null, + maxLength: MUST_USE_ATTRIBUTE, + media: MUST_USE_ATTRIBUTE, + mediaGroup: null, + method: null, + min: null, + minLength: MUST_USE_ATTRIBUTE, + multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + name: null, + nonce: MUST_USE_ATTRIBUTE, + noValidate: HAS_BOOLEAN_VALUE, + open: HAS_BOOLEAN_VALUE, + optimum: null, + pattern: null, + placeholder: null, + poster: null, + preload: null, + radioGroup: null, + readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + rel: null, + required: HAS_BOOLEAN_VALUE, + reversed: HAS_BOOLEAN_VALUE, + role: MUST_USE_ATTRIBUTE, + rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, + rowSpan: null, + sandbox: null, + scope: null, + scoped: HAS_BOOLEAN_VALUE, + scrolling: null, + seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + shape: null, + size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, + sizes: MUST_USE_ATTRIBUTE, + span: HAS_POSITIVE_NUMERIC_VALUE, + spellCheck: null, + src: null, + srcDoc: MUST_USE_PROPERTY, + srcLang: null, + srcSet: MUST_USE_ATTRIBUTE, + start: HAS_NUMERIC_VALUE, + step: null, + style: null, + summary: null, + tabIndex: null, + target: null, + title: null, + type: null, + useMap: null, + value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS, + width: MUST_USE_ATTRIBUTE, + wmode: MUST_USE_ATTRIBUTE, + wrap: null, + + /** + * RDFa Properties + */ + about: MUST_USE_ATTRIBUTE, + datatype: MUST_USE_ATTRIBUTE, + inlist: MUST_USE_ATTRIBUTE, + prefix: MUST_USE_ATTRIBUTE, + // property is also supported for OpenGraph in meta tags. + property: MUST_USE_ATTRIBUTE, + resource: MUST_USE_ATTRIBUTE, + 'typeof': MUST_USE_ATTRIBUTE, + vocab: MUST_USE_ATTRIBUTE, + + /** + * Non-standard Properties + */ + // autoCapitalize and autoCorrect are supported in Mobile Safari for + // keyboard hints. + autoCapitalize: null, + autoCorrect: null, + // autoSave allows WebKit/Blink to persist values of input fields on page reloads + autoSave: null, + // color is for Safari mask-icon link + color: null, + // itemProp, itemScope, itemType are for + // Microdata support. See http://schema.org/docs/gs.html + itemProp: MUST_USE_ATTRIBUTE, + itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, + itemType: MUST_USE_ATTRIBUTE, + // itemID and itemRef are for Microdata support as well but + // only specified in the the WHATWG spec document. See + // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api + itemID: MUST_USE_ATTRIBUTE, + itemRef: MUST_USE_ATTRIBUTE, + // results show looking glass icon and recent searches on input + // search fields in WebKit/Blink + results: null, + // IE-only attribute that specifies security restrictions on an iframe + // as an alternative to the sandbox attribute on IE<10 + security: MUST_USE_ATTRIBUTE, + // IE-only attribute that controls focus behavior + unselectable: MUST_USE_ATTRIBUTE + }, + DOMAttributeNames: { + acceptCharset: 'accept-charset', + className: 'class', + htmlFor: 'for', + httpEquiv: 'http-equiv' + }, + DOMPropertyNames: { + autoCapitalize: 'autocapitalize', + autoComplete: 'autocomplete', + autoCorrect: 'autocorrect', + autoFocus: 'autofocus', + autoPlay: 'autoplay', + autoSave: 'autosave', + // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter. + // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding + encType: 'encoding', + hrefLang: 'hreflang', + radioGroup: 'radiogroup', + spellCheck: 'spellcheck', + srcDoc: 'srcdoc', + srcSet: 'srcset' + } + }; + + module.exports = HTMLDOMPropertyConfig; + +/***/ }, +/* 89 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactBrowserComponentMixin + */ + + 'use strict'; + + var ReactInstanceMap = __webpack_require__(46); + + var findDOMNode = __webpack_require__(90); + var warning = __webpack_require__(24); + + var didWarnKey = '_getDOMNodeDidWarn'; + + var ReactBrowserComponentMixin = { + /** + * Returns the DOM node rendered by this component. + * + * @return {DOMElement} The root node of this component. + * @final + * @protected + */ + getDOMNode: function () { + process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined; + this.constructor[didWarnKey] = true; + return findDOMNode(this); + } + }; + + module.exports = ReactBrowserComponentMixin; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 90 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule findDOMNode + * @typechecks static-only + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactInstanceMap = __webpack_require__(46); + var ReactMount = __webpack_require__(27); + + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Returns the DOM node rendered by this element. + * + * @param {ReactComponent|DOMElement} componentOrElement + * @return {?DOMElement} The root node of this element. + */ + function findDOMNode(componentOrElement) { + if (process.env.NODE_ENV !== 'production') { + var owner = ReactCurrentOwner.current; + if (owner !== null) { + process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined; + owner._warnedAboutRefsInRender = true; + } + } + if (componentOrElement == null) { + return null; + } + if (componentOrElement.nodeType === 1) { + return componentOrElement; + } + if (ReactInstanceMap.has(componentOrElement)) { + return ReactMount.getNodeFromInstance(componentOrElement); + } + !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined; + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined; + } + + module.exports = findDOMNode; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 91 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultBatchingStrategy + */ + + 'use strict'; + + var ReactUpdates = __webpack_require__(53); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + + var RESET_BATCHED_UPDATES = { + initialize: emptyFunction, + close: function () { + ReactDefaultBatchingStrategy.isBatchingUpdates = false; + } + }; + + var FLUSH_BATCHED_UPDATES = { + initialize: emptyFunction, + close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates) + }; + + var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES]; + + function ReactDefaultBatchingStrategyTransaction() { + this.reinitializeTransaction(); + } + + assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, { + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + } + }); + + var transaction = new ReactDefaultBatchingStrategyTransaction(); + + var ReactDefaultBatchingStrategy = { + isBatchingUpdates: false, + + /** + * Call the provided function in a context within which calls to `setState` + * and friends are batched such that components aren't updated unnecessarily. + */ + batchedUpdates: function (callback, a, b, c, d, e) { + var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates; + + ReactDefaultBatchingStrategy.isBatchingUpdates = true; + + // The code is written this way to avoid extra allocations + if (alreadyBatchingUpdates) { + callback(a, b, c, d, e); + } else { + transaction.perform(callback, null, a, b, c, d, e); + } + } + }; + + module.exports = ReactDefaultBatchingStrategy; + +/***/ }, +/* 92 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMComponent + * @typechecks static-only + */ + + /* global hasOwnProperty:true */ + + 'use strict'; + + var AutoFocusUtils = __webpack_require__(93); + var CSSPropertyOperations = __webpack_require__(95); + var DOMProperty = __webpack_require__(22); + var DOMPropertyOperations = __webpack_require__(21); + var EventConstants = __webpack_require__(29); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactComponentBrowserEnvironment = __webpack_require__(25); + var ReactDOMButton = __webpack_require__(103); + var ReactDOMInput = __webpack_require__(104); + var ReactDOMOption = __webpack_require__(108); + var ReactDOMSelect = __webpack_require__(111); + var ReactDOMTextarea = __webpack_require__(112); + var ReactMount = __webpack_require__(27); + var ReactMultiChild = __webpack_require__(113); + var ReactPerf = __webpack_require__(17); + var ReactUpdateQueue = __webpack_require__(52); + + var assign = __webpack_require__(38); + var canDefineProperty = __webpack_require__(42); + var escapeTextContentForBrowser = __webpack_require__(20); + var invariant = __webpack_require__(12); + var isEventSupported = __webpack_require__(39); + var keyOf = __webpack_require__(78); + var setInnerHTML = __webpack_require__(18); + var setTextContent = __webpack_require__(19); + var shallowEqual = __webpack_require__(116); + var validateDOMNesting = __webpack_require__(69); + var warning = __webpack_require__(24); + + var deleteListener = ReactBrowserEventEmitter.deleteListener; + var listenTo = ReactBrowserEventEmitter.listenTo; + var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules; + + // For quickly matching children type, to test if can be treated as content. + var CONTENT_TYPES = { 'string': true, 'number': true }; + + var CHILDREN = keyOf({ children: null }); + var STYLE = keyOf({ style: null }); + var HTML = keyOf({ __html: null }); + + var ELEMENT_NODE_TYPE = 1; + + function getDeclarationErrorAddendum(internalInstance) { + if (internalInstance) { + var owner = internalInstance._currentElement._owner || null; + if (owner) { + var name = owner.getName(); + if (name) { + return ' This DOM node was rendered by `' + name + '`.'; + } + } + } + return ''; + } + + var legacyPropsDescriptor; + if (process.env.NODE_ENV !== 'production') { + legacyPropsDescriptor = { + props: { + enumerable: false, + get: function () { + var component = this._reactInternalComponent; + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined; + return component._currentElement.props; + } + } + }; + } + + function legacyGetDOMNode() { + if (process.env.NODE_ENV !== 'production') { + var component = this._reactInternalComponent; + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined; + } + return this; + } + + function legacyIsMounted() { + var component = this._reactInternalComponent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined; + } + return !!component; + } + + function legacySetStateEtc() { + if (process.env.NODE_ENV !== 'production') { + var component = this._reactInternalComponent; + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined; + } + } + + function legacySetProps(partialProps, callback) { + var component = this._reactInternalComponent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined; + } + if (!component) { + return; + } + ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(component, callback); + } + } + + function legacyReplaceProps(partialProps, callback) { + var component = this._reactInternalComponent; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined; + } + if (!component) { + return; + } + ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(component, callback); + } + } + + function friendlyStringify(obj) { + if (typeof obj === 'object') { + if (Array.isArray(obj)) { + return '[' + obj.map(friendlyStringify).join(', ') + ']'; + } else { + var pairs = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var keyEscaped = /^[a-z$_][\w$_]*$/i.test(key) ? key : JSON.stringify(key); + pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key])); + } + } + return '{' + pairs.join(', ') + '}'; + } + } else if (typeof obj === 'string') { + return JSON.stringify(obj); + } else if (typeof obj === 'function') { + return '[function object]'; + } + // Differs from JSON.stringify in that undefined becauses undefined and that + // inf and nan don't become null + return String(obj); + } + + var styleMutationWarning = {}; + + function checkAndWarnForMutatedStyle(style1, style2, component) { + if (style1 == null || style2 == null) { + return; + } + if (shallowEqual(style1, style2)) { + return; + } + + var componentName = component._tag; + var owner = component._currentElement._owner; + var ownerName; + if (owner) { + ownerName = owner.getName(); + } + + var hash = ownerName + '|' + componentName; + + if (styleMutationWarning.hasOwnProperty(hash)) { + return; + } + + styleMutationWarning[hash] = true; + + process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined; + } + + /** + * @param {object} component + * @param {?object} props + */ + function assertValidProps(component, props) { + if (!props) { + return; + } + // Note the use of `==` which checks for null or undefined. + if (process.env.NODE_ENV !== 'production') { + if (voidElementTags[component._tag]) { + process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined; + } + } + if (props.dangerouslySetInnerHTML != null) { + !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined; + !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined; + } + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined; + } + !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined; + } + + function enqueuePutListener(id, registrationName, listener, transaction) { + if (process.env.NODE_ENV !== 'production') { + // IE8 has no API for event capturing and the `onScroll` event doesn't + // bubble. + process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : undefined; + } + var container = ReactMount.findReactContainerForID(id); + if (container) { + var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container; + listenTo(registrationName, doc); + } + transaction.getReactMountReady().enqueue(putListener, { + id: id, + registrationName: registrationName, + listener: listener + }); + } + + function putListener() { + var listenerToPut = this; + ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener); + } + + // There are so many media events, it makes sense to just + // maintain a list rather than create a `trapBubbledEvent` for each + var mediaEvents = { + topAbort: 'abort', + topCanPlay: 'canplay', + topCanPlayThrough: 'canplaythrough', + topDurationChange: 'durationchange', + topEmptied: 'emptied', + topEncrypted: 'encrypted', + topEnded: 'ended', + topError: 'error', + topLoadedData: 'loadeddata', + topLoadedMetadata: 'loadedmetadata', + topLoadStart: 'loadstart', + topPause: 'pause', + topPlay: 'play', + topPlaying: 'playing', + topProgress: 'progress', + topRateChange: 'ratechange', + topSeeked: 'seeked', + topSeeking: 'seeking', + topStalled: 'stalled', + topSuspend: 'suspend', + topTimeUpdate: 'timeupdate', + topVolumeChange: 'volumechange', + topWaiting: 'waiting' + }; + + function trapBubbledEventsLocal() { + var inst = this; + // If a component renders to null or if another component fatals and causes + // the state of the tree to be corrupted, `node` here can be null. + !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined; + var node = ReactMount.getNode(inst._rootNodeID); + !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined; + + switch (inst._tag) { + case 'iframe': + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)]; + break; + case 'video': + case 'audio': + + inst._wrapperState.listeners = []; + // create listener for each media event + for (var event in mediaEvents) { + if (mediaEvents.hasOwnProperty(event)) { + inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node)); + } + } + + break; + case 'img': + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)]; + break; + case 'form': + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)]; + break; + } + } + + function mountReadyInputWrapper() { + ReactDOMInput.mountReadyWrapper(this); + } + + function postUpdateSelectWrapper() { + ReactDOMSelect.postUpdateWrapper(this); + } + + // For HTML, certain tags should omit their close tag. We keep a whitelist for + // those special cased tags. + + var omittedCloseTags = { + 'area': true, + 'base': true, + 'br': true, + 'col': true, + 'embed': true, + 'hr': true, + 'img': true, + 'input': true, + 'keygen': true, + 'link': true, + 'meta': true, + 'param': true, + 'source': true, + 'track': true, + 'wbr': true + }; + + // NOTE: menuitem's close tag should be omitted, but that causes problems. + var newlineEatingTags = { + 'listing': true, + 'pre': true, + 'textarea': true + }; + + // For HTML, certain tags cannot have children. This has the same purpose as + // `omittedCloseTags` except that `menuitem` should still have its closing tag. + + var voidElementTags = assign({ + 'menuitem': true + }, omittedCloseTags); + + // We accept any tag to be rendered but since this gets injected into arbitrary + // HTML, we want to make sure that it's a safe tag. + // http://www.w3.org/TR/REC-xml/#NT-Name + + var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset + var validatedTagCache = {}; + var hasOwnProperty = ({}).hasOwnProperty; + + function validateDangerousTag(tag) { + if (!hasOwnProperty.call(validatedTagCache, tag)) { + !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined; + validatedTagCache[tag] = true; + } + } + + function processChildContextDev(context, inst) { + // Pass down our tag name to child components for validation purposes + context = assign({}, context); + var info = context[validateDOMNesting.ancestorInfoContextKey]; + context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst); + return context; + } + + function isCustomComponent(tagName, props) { + return tagName.indexOf('-') >= 0 || props.is != null; + } + + /** + * Creates a new React class that is idempotent and capable of containing other + * React components. It accepts event listeners and DOM properties that are + * valid according to `DOMProperty`. + * + * - Event listeners: `onClick`, `onMouseDown`, etc. + * - DOM properties: `className`, `name`, `title`, etc. + * + * The `style` property functions differently from the DOM API. It accepts an + * object mapping of style properties to values. + * + * @constructor ReactDOMComponent + * @extends ReactMultiChild + */ + function ReactDOMComponent(tag) { + validateDangerousTag(tag); + this._tag = tag.toLowerCase(); + this._renderedChildren = null; + this._previousStyle = null; + this._previousStyleCopy = null; + this._rootNodeID = null; + this._wrapperState = null; + this._topLevelWrapper = null; + this._nodeWithLegacyProperties = null; + if (process.env.NODE_ENV !== 'production') { + this._unprocessedContextDev = null; + this._processedContextDev = null; + } + } + + ReactDOMComponent.displayName = 'ReactDOMComponent'; + + ReactDOMComponent.Mixin = { + + construct: function (element) { + this._currentElement = element; + }, + + /** + * Generates root tag markup then recurses. This method has side effects and + * is not idempotent. + * + * @internal + * @param {string} rootID The root DOM ID for this node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} context + * @return {string} The computed markup. + */ + mountComponent: function (rootID, transaction, context) { + this._rootNodeID = rootID; + + var props = this._currentElement.props; + + switch (this._tag) { + case 'iframe': + case 'img': + case 'form': + case 'video': + case 'audio': + this._wrapperState = { + listeners: null + }; + transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this); + break; + case 'button': + props = ReactDOMButton.getNativeProps(this, props, context); + break; + case 'input': + ReactDOMInput.mountWrapper(this, props, context); + props = ReactDOMInput.getNativeProps(this, props, context); + break; + case 'option': + ReactDOMOption.mountWrapper(this, props, context); + props = ReactDOMOption.getNativeProps(this, props, context); + break; + case 'select': + ReactDOMSelect.mountWrapper(this, props, context); + props = ReactDOMSelect.getNativeProps(this, props, context); + context = ReactDOMSelect.processChildContext(this, props, context); + break; + case 'textarea': + ReactDOMTextarea.mountWrapper(this, props, context); + props = ReactDOMTextarea.getNativeProps(this, props, context); + break; + } + + assertValidProps(this, props); + if (process.env.NODE_ENV !== 'production') { + if (context[validateDOMNesting.ancestorInfoContextKey]) { + validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]); + } + } + + if (process.env.NODE_ENV !== 'production') { + this._unprocessedContextDev = context; + this._processedContextDev = processChildContextDev(context, this); + context = this._processedContextDev; + } + + var mountImage; + if (transaction.useCreateElement) { + var ownerDocument = context[ReactMount.ownerDocumentContextKey]; + var el = ownerDocument.createElement(this._currentElement.type); + DOMPropertyOperations.setAttributeForID(el, this._rootNodeID); + // Populate node cache + ReactMount.getID(el); + this._updateDOMProperties({}, props, transaction, el); + this._createInitialChildren(transaction, props, context, el); + mountImage = el; + } else { + var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props); + var tagContent = this._createContentMarkup(transaction, props, context); + if (!tagContent && omittedCloseTags[this._tag]) { + mountImage = tagOpen + '/>'; + } else { + mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>'; + } + } + + switch (this._tag) { + case 'input': + transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this); + // falls through + case 'button': + case 'select': + case 'textarea': + if (props.autoFocus) { + transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this); + } + break; + } + + return mountImage; + }, + + /** + * Creates markup for the open tag and all attributes. + * + * This method has side effects because events get registered. + * + * Iterating over object properties is faster than iterating over arrays. + * @see http://jsperf.com/obj-vs-arr-iteration + * + * @private + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} props + * @return {string} Markup of opening tag. + */ + _createOpenTagMarkupAndPutListeners: function (transaction, props) { + var ret = '<' + this._currentElement.type; + + for (var propKey in props) { + if (!props.hasOwnProperty(propKey)) { + continue; + } + var propValue = props[propKey]; + if (propValue == null) { + continue; + } + if (registrationNameModules.hasOwnProperty(propKey)) { + if (propValue) { + enqueuePutListener(this._rootNodeID, propKey, propValue, transaction); + } + } else { + if (propKey === STYLE) { + if (propValue) { + if (process.env.NODE_ENV !== 'production') { + // See `_updateDOMProperties`. style block + this._previousStyle = propValue; + } + propValue = this._previousStyleCopy = assign({}, props.style); + } + propValue = CSSPropertyOperations.createMarkupForStyles(propValue); + } + var markup = null; + if (this._tag != null && isCustomComponent(this._tag, props)) { + if (propKey !== CHILDREN) { + markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue); + } + } else { + markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue); + } + if (markup) { + ret += ' ' + markup; + } + } + } + + // For static pages, no need to put React ID and checksum. Saves lots of + // bytes. + if (transaction.renderToStaticMarkup) { + return ret; + } + + var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID); + return ret + ' ' + markupForID; + }, + + /** + * Creates markup for the content between the tags. + * + * @private + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} props + * @param {object} context + * @return {string} Content markup. + */ + _createContentMarkup: function (transaction, props, context) { + var ret = ''; + + // Intentional use of != to avoid catching zero/false. + var innerHTML = props.dangerouslySetInnerHTML; + if (innerHTML != null) { + if (innerHTML.__html != null) { + ret = innerHTML.__html; + } + } else { + var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null; + var childrenToUse = contentToUse != null ? null : props.children; + if (contentToUse != null) { + // TODO: Validate that text is allowed as a child of this node + ret = escapeTextContentForBrowser(contentToUse); + } else if (childrenToUse != null) { + var mountImages = this.mountChildren(childrenToUse, transaction, context); + ret = mountImages.join(''); + } + } + if (newlineEatingTags[this._tag] && ret.charAt(0) === '\n') { + // text/html ignores the first character in these tags if it's a newline + // Prefer to break application/xml over text/html (for now) by adding + // a newline specifically to get eaten by the parser. (Alternately for + // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first + // \r is normalized out by HTMLTextAreaElement#value.) + // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre> + // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions> + // See: <http://www.w3.org/TR/html5/syntax.html#newlines> + // See: Parsing of "textarea" "listing" and "pre" elements + // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody> + return '\n' + ret; + } else { + return ret; + } + }, + + _createInitialChildren: function (transaction, props, context, el) { + // Intentional use of != to avoid catching zero/false. + var innerHTML = props.dangerouslySetInnerHTML; + if (innerHTML != null) { + if (innerHTML.__html != null) { + setInnerHTML(el, innerHTML.__html); + } + } else { + var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null; + var childrenToUse = contentToUse != null ? null : props.children; + if (contentToUse != null) { + // TODO: Validate that text is allowed as a child of this node + setTextContent(el, contentToUse); + } else if (childrenToUse != null) { + var mountImages = this.mountChildren(childrenToUse, transaction, context); + for (var i = 0; i < mountImages.length; i++) { + el.appendChild(mountImages[i]); + } + } + } + }, + + /** + * Receives a next element and updates the component. + * + * @internal + * @param {ReactElement} nextElement + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @param {object} context + */ + receiveComponent: function (nextElement, transaction, context) { + var prevElement = this._currentElement; + this._currentElement = nextElement; + this.updateComponent(transaction, prevElement, nextElement, context); + }, + + /** + * Updates a native DOM component after it has already been allocated and + * attached to the DOM. Reconciles the root DOM node, then recurses. + * + * @param {ReactReconcileTransaction} transaction + * @param {ReactElement} prevElement + * @param {ReactElement} nextElement + * @internal + * @overridable + */ + updateComponent: function (transaction, prevElement, nextElement, context) { + var lastProps = prevElement.props; + var nextProps = this._currentElement.props; + + switch (this._tag) { + case 'button': + lastProps = ReactDOMButton.getNativeProps(this, lastProps); + nextProps = ReactDOMButton.getNativeProps(this, nextProps); + break; + case 'input': + ReactDOMInput.updateWrapper(this); + lastProps = ReactDOMInput.getNativeProps(this, lastProps); + nextProps = ReactDOMInput.getNativeProps(this, nextProps); + break; + case 'option': + lastProps = ReactDOMOption.getNativeProps(this, lastProps); + nextProps = ReactDOMOption.getNativeProps(this, nextProps); + break; + case 'select': + lastProps = ReactDOMSelect.getNativeProps(this, lastProps); + nextProps = ReactDOMSelect.getNativeProps(this, nextProps); + break; + case 'textarea': + ReactDOMTextarea.updateWrapper(this); + lastProps = ReactDOMTextarea.getNativeProps(this, lastProps); + nextProps = ReactDOMTextarea.getNativeProps(this, nextProps); + break; + } + + if (process.env.NODE_ENV !== 'production') { + // If the context is reference-equal to the old one, pass down the same + // processed object so the update bailout in ReactReconciler behaves + // correctly (and identically in dev and prod). See #5005. + if (this._unprocessedContextDev !== context) { + this._unprocessedContextDev = context; + this._processedContextDev = processChildContextDev(context, this); + } + context = this._processedContextDev; + } + + assertValidProps(this, nextProps); + this._updateDOMProperties(lastProps, nextProps, transaction, null); + this._updateDOMChildren(lastProps, nextProps, transaction, context); + + if (!canDefineProperty && this._nodeWithLegacyProperties) { + this._nodeWithLegacyProperties.props = nextProps; + } + + if (this._tag === 'select') { + // <select> value update needs to occur after <option> children + // reconciliation + transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this); + } + }, + + /** + * Reconciles the properties by detecting differences in property values and + * updating the DOM as necessary. This function is probably the single most + * critical path for performance optimization. + * + * TODO: Benchmark whether checking for changed values in memory actually + * improves performance (especially statically positioned elements). + * TODO: Benchmark the effects of putting this at the top since 99% of props + * do not change for a given reconciliation. + * TODO: Benchmark areas that can be improved with caching. + * + * @private + * @param {object} lastProps + * @param {object} nextProps + * @param {ReactReconcileTransaction} transaction + * @param {?DOMElement} node + */ + _updateDOMProperties: function (lastProps, nextProps, transaction, node) { + var propKey; + var styleName; + var styleUpdates; + for (propKey in lastProps) { + if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) { + continue; + } + if (propKey === STYLE) { + var lastStyle = this._previousStyleCopy; + for (styleName in lastStyle) { + if (lastStyle.hasOwnProperty(styleName)) { + styleUpdates = styleUpdates || {}; + styleUpdates[styleName] = ''; + } + } + this._previousStyleCopy = null; + } else if (registrationNameModules.hasOwnProperty(propKey)) { + if (lastProps[propKey]) { + // Only call deleteListener if there was a listener previously or + // else willDeleteListener gets called when there wasn't actually a + // listener (e.g., onClick={null}) + deleteListener(this._rootNodeID, propKey); + } + } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + DOMPropertyOperations.deleteValueForProperty(node, propKey); + } + } + for (propKey in nextProps) { + var nextProp = nextProps[propKey]; + var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey]; + if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) { + continue; + } + if (propKey === STYLE) { + if (nextProp) { + if (process.env.NODE_ENV !== 'production') { + checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this); + this._previousStyle = nextProp; + } + nextProp = this._previousStyleCopy = assign({}, nextProp); + } else { + this._previousStyleCopy = null; + } + if (lastProp) { + // Unset styles on `lastProp` but not on `nextProp`. + for (styleName in lastProp) { + if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) { + styleUpdates = styleUpdates || {}; + styleUpdates[styleName] = ''; + } + } + // Update styles that changed since `lastProp`. + for (styleName in nextProp) { + if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) { + styleUpdates = styleUpdates || {}; + styleUpdates[styleName] = nextProp[styleName]; + } + } + } else { + // Relies on `updateStylesByID` not mutating `styleUpdates`. + styleUpdates = nextProp; + } + } else if (registrationNameModules.hasOwnProperty(propKey)) { + if (nextProp) { + enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction); + } else if (lastProp) { + deleteListener(this._rootNodeID, propKey); + } + } else if (isCustomComponent(this._tag, nextProps)) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + if (propKey === CHILDREN) { + nextProp = null; + } + DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp); + } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + // If we're updating to null or undefined, we should remove the property + // from the DOM node instead of inadvertantly setting to a string. This + // brings us in line with the same behavior we have on initial render. + if (nextProp != null) { + DOMPropertyOperations.setValueForProperty(node, propKey, nextProp); + } else { + DOMPropertyOperations.deleteValueForProperty(node, propKey); + } + } + } + if (styleUpdates) { + if (!node) { + node = ReactMount.getNode(this._rootNodeID); + } + CSSPropertyOperations.setValueForStyles(node, styleUpdates); + } + }, + + /** + * Reconciles the children with the various properties that affect the + * children content. + * + * @param {object} lastProps + * @param {object} nextProps + * @param {ReactReconcileTransaction} transaction + * @param {object} context + */ + _updateDOMChildren: function (lastProps, nextProps, transaction, context) { + var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null; + var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null; + + var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html; + var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html; + + // Note the use of `!=` which checks for null or undefined. + var lastChildren = lastContent != null ? null : lastProps.children; + var nextChildren = nextContent != null ? null : nextProps.children; + + // If we're switching from children to content/html or vice versa, remove + // the old content + var lastHasContentOrHtml = lastContent != null || lastHtml != null; + var nextHasContentOrHtml = nextContent != null || nextHtml != null; + if (lastChildren != null && nextChildren == null) { + this.updateChildren(null, transaction, context); + } else if (lastHasContentOrHtml && !nextHasContentOrHtml) { + this.updateTextContent(''); + } + + if (nextContent != null) { + if (lastContent !== nextContent) { + this.updateTextContent('' + nextContent); + } + } else if (nextHtml != null) { + if (lastHtml !== nextHtml) { + this.updateMarkup('' + nextHtml); + } + } else if (nextChildren != null) { + this.updateChildren(nextChildren, transaction, context); + } + }, + + /** + * Destroys all event registrations for this instance. Does not remove from + * the DOM. That must be done by the parent. + * + * @internal + */ + unmountComponent: function () { + switch (this._tag) { + case 'iframe': + case 'img': + case 'form': + case 'video': + case 'audio': + var listeners = this._wrapperState.listeners; + if (listeners) { + for (var i = 0; i < listeners.length; i++) { + listeners[i].remove(); + } + } + break; + case 'input': + ReactDOMInput.unmountWrapper(this); + break; + case 'html': + case 'head': + case 'body': + /** + * Components like <html> <head> and <body> can't be removed or added + * easily in a cross-browser way, however it's valuable to be able to + * take advantage of React's reconciliation for styling and <title> + * management. So we just document it and throw in dangerous cases. + */ + true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined; + break; + } + + this.unmountChildren(); + ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID); + ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID); + this._rootNodeID = null; + this._wrapperState = null; + if (this._nodeWithLegacyProperties) { + var node = this._nodeWithLegacyProperties; + node._reactInternalComponent = null; + this._nodeWithLegacyProperties = null; + } + }, + + getPublicInstance: function () { + if (!this._nodeWithLegacyProperties) { + var node = ReactMount.getNode(this._rootNodeID); + + node._reactInternalComponent = this; + node.getDOMNode = legacyGetDOMNode; + node.isMounted = legacyIsMounted; + node.setState = legacySetStateEtc; + node.replaceState = legacySetStateEtc; + node.forceUpdate = legacySetStateEtc; + node.setProps = legacySetProps; + node.replaceProps = legacyReplaceProps; + + if (process.env.NODE_ENV !== 'production') { + if (canDefineProperty) { + Object.defineProperties(node, legacyPropsDescriptor); + } else { + // updateComponent will update this property on subsequent renders + node.props = this._currentElement.props; + } + } else { + // updateComponent will update this property on subsequent renders + node.props = this._currentElement.props; + } + + this._nodeWithLegacyProperties = node; + } + return this._nodeWithLegacyProperties; + } + + }; + + ReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', { + mountComponent: 'mountComponent', + updateComponent: 'updateComponent' + }); + + assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin); + + module.exports = ReactDOMComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 93 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AutoFocusUtils + * @typechecks static-only + */ + + 'use strict'; + + var ReactMount = __webpack_require__(27); + + var findDOMNode = __webpack_require__(90); + var focusNode = __webpack_require__(94); + + var Mixin = { + componentDidMount: function () { + if (this.props.autoFocus) { + focusNode(findDOMNode(this)); + } + } + }; + + var AutoFocusUtils = { + Mixin: Mixin, + + focusDOMComponent: function () { + focusNode(ReactMount.getNode(this._rootNodeID)); + } + }; + + module.exports = AutoFocusUtils; + +/***/ }, +/* 94 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule focusNode + */ + + 'use strict'; + + /** + * @param {DOMElement} node input/textarea to focus + */ + function focusNode(node) { + // IE8 can throw "Can't move focus to the control because it is invisible, + // not enabled, or of a type that does not accept the focus." for all kinds of + // reasons that are too expensive and fragile to test. + try { + node.focus(); + } catch (e) {} + } + + module.exports = focusNode; + +/***/ }, +/* 95 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule CSSPropertyOperations + * @typechecks static-only + */ + + 'use strict'; + + var CSSProperty = __webpack_require__(96); + var ExecutionEnvironment = __webpack_require__(8); + var ReactPerf = __webpack_require__(17); + + var camelizeStyleName = __webpack_require__(97); + var dangerousStyleValue = __webpack_require__(99); + var hyphenateStyleName = __webpack_require__(100); + var memoizeStringOnly = __webpack_require__(102); + var warning = __webpack_require__(24); + + var processStyleName = memoizeStringOnly(function (styleName) { + return hyphenateStyleName(styleName); + }); + + var hasShorthandPropertyBug = false; + var styleFloatAccessor = 'cssFloat'; + if (ExecutionEnvironment.canUseDOM) { + var tempStyle = document.createElement('div').style; + try { + // IE8 throws "Invalid argument." if resetting shorthand style properties. + tempStyle.font = ''; + } catch (e) { + hasShorthandPropertyBug = true; + } + // IE8 only supports accessing cssFloat (standard) as styleFloat + if (document.documentElement.style.cssFloat === undefined) { + styleFloatAccessor = 'styleFloat'; + } + } + + if (process.env.NODE_ENV !== 'production') { + // 'msTransform' is correct, but the other prefixes should be capitalized + var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/; + + // style values shouldn't contain a semicolon + var badStyleValueWithSemicolonPattern = /;\s*$/; + + var warnedStyleNames = {}; + var warnedStyleValues = {}; + + var warnHyphenatedStyleName = function (name) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined; + }; + + var warnBadVendoredStyleName = function (name) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined; + }; + + var warnStyleValueWithSemicolon = function (name, value) { + if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) { + return; + } + + warnedStyleValues[value] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\'t contain a semicolon. ' + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined; + }; + + /** + * @param {string} name + * @param {*} value + */ + var warnValidStyle = function (name, value) { + if (name.indexOf('-') > -1) { + warnHyphenatedStyleName(name); + } else if (badVendoredStyleNamePattern.test(name)) { + warnBadVendoredStyleName(name); + } else if (badStyleValueWithSemicolonPattern.test(value)) { + warnStyleValueWithSemicolon(name, value); + } + }; + } + + /** + * Operations for dealing with CSS properties. + */ + var CSSPropertyOperations = { + + /** + * Serializes a mapping of style properties for use as inline styles: + * + * > createMarkupForStyles({width: '200px', height: 0}) + * "width:200px;height:0;" + * + * Undefined values are ignored so that declarative programming is easier. + * The result should be HTML-escaped before insertion into the DOM. + * + * @param {object} styles + * @return {?string} + */ + createMarkupForStyles: function (styles) { + var serialized = ''; + for (var styleName in styles) { + if (!styles.hasOwnProperty(styleName)) { + continue; + } + var styleValue = styles[styleName]; + if (process.env.NODE_ENV !== 'production') { + warnValidStyle(styleName, styleValue); + } + if (styleValue != null) { + serialized += processStyleName(styleName) + ':'; + serialized += dangerousStyleValue(styleName, styleValue) + ';'; + } + } + return serialized || null; + }, + + /** + * Sets the value for multiple styles on a node. If a value is specified as + * '' (empty string), the corresponding style property will be unset. + * + * @param {DOMElement} node + * @param {object} styles + */ + setValueForStyles: function (node, styles) { + var style = node.style; + for (var styleName in styles) { + if (!styles.hasOwnProperty(styleName)) { + continue; + } + if (process.env.NODE_ENV !== 'production') { + warnValidStyle(styleName, styles[styleName]); + } + var styleValue = dangerousStyleValue(styleName, styles[styleName]); + if (styleName === 'float') { + styleName = styleFloatAccessor; + } + if (styleValue) { + style[styleName] = styleValue; + } else { + var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName]; + if (expansion) { + // Shorthand property that IE8 won't like unsetting, so unset each + // component to placate it + for (var individualStyleName in expansion) { + style[individualStyleName] = ''; + } + } else { + style[styleName] = ''; + } + } + } + } + + }; + + ReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', { + setValueForStyles: 'setValueForStyles' + }); + + module.exports = CSSPropertyOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 96 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule CSSProperty + */ + + 'use strict'; + + /** + * CSS properties which accept numbers but are not in units of "px". + */ + var isUnitlessNumber = { + animationIterationCount: true, + boxFlex: true, + boxFlexGroup: true, + boxOrdinalGroup: true, + columnCount: true, + flex: true, + flexGrow: true, + flexPositive: true, + flexShrink: true, + flexNegative: true, + flexOrder: true, + fontWeight: true, + lineClamp: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + tabSize: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related properties + fillOpacity: true, + stopOpacity: true, + strokeDashoffset: true, + strokeOpacity: true, + strokeWidth: true + }; + + /** + * @param {string} prefix vendor-specific prefix, eg: Webkit + * @param {string} key style name, eg: transitionDuration + * @return {string} style name prefixed with `prefix`, properly camelCased, eg: + * WebkitTransitionDuration + */ + function prefixKey(prefix, key) { + return prefix + key.charAt(0).toUpperCase() + key.substring(1); + } + + /** + * Support style names that may come passed in prefixed by adding permutations + * of vendor prefixes. + */ + var prefixes = ['Webkit', 'ms', 'Moz', 'O']; + + // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an + // infinite loop, because it iterates over the newly added props too. + Object.keys(isUnitlessNumber).forEach(function (prop) { + prefixes.forEach(function (prefix) { + isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop]; + }); + }); + + /** + * Most style properties can be unset by doing .style[prop] = '' but IE8 + * doesn't like doing that with shorthand properties so for the properties that + * IE8 breaks on, which are listed here, we instead unset each of the + * individual properties. See http://bugs.jquery.com/ticket/12385. + * The 4-value 'clock' properties like margin, padding, border-width seem to + * behave without any problems. Curiously, list-style works too without any + * special prodding. + */ + var shorthandPropertyExpansions = { + background: { + backgroundAttachment: true, + backgroundColor: true, + backgroundImage: true, + backgroundPositionX: true, + backgroundPositionY: true, + backgroundRepeat: true + }, + backgroundPosition: { + backgroundPositionX: true, + backgroundPositionY: true + }, + border: { + borderWidth: true, + borderStyle: true, + borderColor: true + }, + borderBottom: { + borderBottomWidth: true, + borderBottomStyle: true, + borderBottomColor: true + }, + borderLeft: { + borderLeftWidth: true, + borderLeftStyle: true, + borderLeftColor: true + }, + borderRight: { + borderRightWidth: true, + borderRightStyle: true, + borderRightColor: true + }, + borderTop: { + borderTopWidth: true, + borderTopStyle: true, + borderTopColor: true + }, + font: { + fontStyle: true, + fontVariant: true, + fontWeight: true, + fontSize: true, + lineHeight: true, + fontFamily: true + }, + outline: { + outlineWidth: true, + outlineStyle: true, + outlineColor: true + } + }; + + var CSSProperty = { + isUnitlessNumber: isUnitlessNumber, + shorthandPropertyExpansions: shorthandPropertyExpansions + }; + + module.exports = CSSProperty; + +/***/ }, +/* 97 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule camelizeStyleName + * @typechecks + */ + + 'use strict'; + + var camelize = __webpack_require__(98); + + var msPattern = /^-ms-/; + + /** + * Camelcases a hyphenated CSS property name, for example: + * + * > camelizeStyleName('background-color') + * < "backgroundColor" + * > camelizeStyleName('-moz-transition') + * < "MozTransition" + * > camelizeStyleName('-ms-transition') + * < "msTransition" + * + * As Andi Smith suggests + * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix + * is converted to lowercase `ms`. + * + * @param {string} string + * @return {string} + */ + function camelizeStyleName(string) { + return camelize(string.replace(msPattern, 'ms-')); + } + + module.exports = camelizeStyleName; + +/***/ }, +/* 98 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule camelize + * @typechecks + */ + + "use strict"; + + var _hyphenPattern = /-(.)/g; + + /** + * Camelcases a hyphenated string, for example: + * + * > camelize('background-color') + * < "backgroundColor" + * + * @param {string} string + * @return {string} + */ + function camelize(string) { + return string.replace(_hyphenPattern, function (_, character) { + return character.toUpperCase(); + }); + } + + module.exports = camelize; + +/***/ }, +/* 99 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule dangerousStyleValue + * @typechecks static-only + */ + + 'use strict'; + + var CSSProperty = __webpack_require__(96); + + var isUnitlessNumber = CSSProperty.isUnitlessNumber; + + /** + * Convert a value into the proper css writable value. The style name `name` + * should be logical (no hyphens), as specified + * in `CSSProperty.isUnitlessNumber`. + * + * @param {string} name CSS property name such as `topMargin`. + * @param {*} value CSS property value such as `10px`. + * @return {string} Normalized style value with dimensions applied. + */ + function dangerousStyleValue(name, value) { + // Note that we've removed escapeTextForBrowser() calls here since the + // whole string will be escaped when the attribute is injected into + // the markup. If you provide unsafe user data here they can inject + // arbitrary CSS which may be problematic (I couldn't repro this): + // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet + // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ + // This is not an XSS hole but instead a potential CSS injection issue + // which has lead to a greater discussion about how we're going to + // trust URLs moving forward. See #2115901 + + var isEmpty = value == null || typeof value === 'boolean' || value === ''; + if (isEmpty) { + return ''; + } + + var isNonNumeric = isNaN(value); + if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) { + return '' + value; // cast to string + } + + if (typeof value === 'string') { + value = value.trim(); + } + return value + 'px'; + } + + module.exports = dangerousStyleValue; + +/***/ }, +/* 100 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule hyphenateStyleName + * @typechecks + */ + + 'use strict'; + + var hyphenate = __webpack_require__(101); + + var msPattern = /^ms-/; + + /** + * Hyphenates a camelcased CSS property name, for example: + * + * > hyphenateStyleName('backgroundColor') + * < "background-color" + * > hyphenateStyleName('MozTransition') + * < "-moz-transition" + * > hyphenateStyleName('msTransition') + * < "-ms-transition" + * + * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix + * is converted to `-ms-`. + * + * @param {string} string + * @return {string} + */ + function hyphenateStyleName(string) { + return hyphenate(string).replace(msPattern, '-ms-'); + } + + module.exports = hyphenateStyleName; + +/***/ }, +/* 101 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule hyphenate + * @typechecks + */ + + 'use strict'; + + var _uppercasePattern = /([A-Z])/g; + + /** + * Hyphenates a camelcased string, for example: + * + * > hyphenate('backgroundColor') + * < "background-color" + * + * For CSS style names, use `hyphenateStyleName` instead which works properly + * with all vendor prefixes, including `ms`. + * + * @param {string} string + * @return {string} + */ + function hyphenate(string) { + return string.replace(_uppercasePattern, '-$1').toLowerCase(); + } + + module.exports = hyphenate; + +/***/ }, +/* 102 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule memoizeStringOnly + * @typechecks static-only + */ + + 'use strict'; + + /** + * Memoizes the return value of a function that accepts one string argument. + * + * @param {function} callback + * @return {function} + */ + function memoizeStringOnly(callback) { + var cache = {}; + return function (string) { + if (!cache.hasOwnProperty(string)) { + cache[string] = callback.call(this, string); + } + return cache[string]; + }; + } + + module.exports = memoizeStringOnly; + +/***/ }, +/* 103 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMButton + */ + + 'use strict'; + + var mouseListenerNames = { + onClick: true, + onDoubleClick: true, + onMouseDown: true, + onMouseMove: true, + onMouseUp: true, + + onClickCapture: true, + onDoubleClickCapture: true, + onMouseDownCapture: true, + onMouseMoveCapture: true, + onMouseUpCapture: true + }; + + /** + * Implements a <button> native component that does not receive mouse events + * when `disabled` is set. + */ + var ReactDOMButton = { + getNativeProps: function (inst, props, context) { + if (!props.disabled) { + return props; + } + + // Copy the props, except the mouse listeners + var nativeProps = {}; + for (var key in props) { + if (props.hasOwnProperty(key) && !mouseListenerNames[key]) { + nativeProps[key] = props[key]; + } + } + + return nativeProps; + } + }; + + module.exports = ReactDOMButton; + +/***/ }, +/* 104 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMInput + */ + + 'use strict'; + + var ReactDOMIDOperations = __webpack_require__(26); + var LinkedValueUtils = __webpack_require__(105); + var ReactMount = __webpack_require__(27); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + + var instancesByReactID = {}; + + function forceUpdateIfMounted() { + if (this._rootNodeID) { + // DOM component is still mounted; update + ReactDOMInput.updateWrapper(this); + } + } + + /** + * Implements an <input> native component that allows setting these optional + * props: `checked`, `value`, `defaultChecked`, and `defaultValue`. + * + * If `checked` or `value` are not supplied (or null/undefined), user actions + * that affect the checked state or value will trigger updates to the element. + * + * If they are supplied (and not null/undefined), the rendered element will not + * trigger updates to the element. Instead, the props must change in order for + * the rendered element to be updated. + * + * The rendered element will be initialized as unchecked (or `defaultChecked`) + * with an empty value (or `defaultValue`). + * + * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html + */ + var ReactDOMInput = { + getNativeProps: function (inst, props, context) { + var value = LinkedValueUtils.getValue(props); + var checked = LinkedValueUtils.getChecked(props); + + var nativeProps = assign({}, props, { + defaultChecked: undefined, + defaultValue: undefined, + value: value != null ? value : inst._wrapperState.initialValue, + checked: checked != null ? checked : inst._wrapperState.initialChecked, + onChange: inst._wrapperState.onChange + }); + + return nativeProps; + }, + + mountWrapper: function (inst, props) { + if (process.env.NODE_ENV !== 'production') { + LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner); + } + + var defaultValue = props.defaultValue; + inst._wrapperState = { + initialChecked: props.defaultChecked || false, + initialValue: defaultValue != null ? defaultValue : null, + onChange: _handleChange.bind(inst) + }; + }, + + mountReadyWrapper: function (inst) { + // Can't be in mountWrapper or else server rendering leaks. + instancesByReactID[inst._rootNodeID] = inst; + }, + + unmountWrapper: function (inst) { + delete instancesByReactID[inst._rootNodeID]; + }, + + updateWrapper: function (inst) { + var props = inst._currentElement.props; + + // TODO: Shouldn't this be getChecked(props)? + var checked = props.checked; + if (checked != null) { + ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false); + } + + var value = LinkedValueUtils.getValue(props); + if (value != null) { + // Cast `value` to a string to ensure the value is set correctly. While + // browsers typically do this as necessary, jsdom doesn't. + ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value); + } + } + }; + + function _handleChange(event) { + var props = this._currentElement.props; + + var returnValue = LinkedValueUtils.executeOnChange(props, event); + + // Here we use asap to wait until all updates have propagated, which + // is important when using controlled components within layers: + // https://github.com/facebook/react/issues/1698 + ReactUpdates.asap(forceUpdateIfMounted, this); + + var name = props.name; + if (props.type === 'radio' && name != null) { + var rootNode = ReactMount.getNode(this._rootNodeID); + var queryRoot = rootNode; + + while (queryRoot.parentNode) { + queryRoot = queryRoot.parentNode; + } + + // If `rootNode.form` was non-null, then we could try `form.elements`, + // but that sometimes behaves strangely in IE8. We could also try using + // `form.getElementsByName`, but that will only return direct children + // and won't include inputs that use the HTML5 `form=` attribute. Since + // the input might not even be in a form, let's just use the global + // `querySelectorAll` to ensure we don't miss anything. + var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]'); + + for (var i = 0; i < group.length; i++) { + var otherNode = group[i]; + if (otherNode === rootNode || otherNode.form !== rootNode.form) { + continue; + } + // This will throw if radio buttons rendered by different copies of React + // and the same name are rendered into the same form (same as #1939). + // That's probably okay; we don't support it just as we don't support + // mixing React with non-React. + var otherID = ReactMount.getID(otherNode); + !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined; + var otherInstance = instancesByReactID[otherID]; + !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined; + // If this is a controlled radio button group, forcing the input that + // was previously checked to update will cause it to be come re-checked + // as appropriate. + ReactUpdates.asap(forceUpdateIfMounted, otherInstance); + } + } + + return returnValue; + } + + module.exports = ReactDOMInput; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 105 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule LinkedValueUtils + * @typechecks static-only + */ + + 'use strict'; + + var ReactPropTypes = __webpack_require__(106); + var ReactPropTypeLocations = __webpack_require__(64); + + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + var hasReadOnlyValue = { + 'button': true, + 'checkbox': true, + 'image': true, + 'hidden': true, + 'radio': true, + 'reset': true, + 'submit': true + }; + + function _assertSingleLink(inputProps) { + !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(false) : undefined; + } + function _assertValueLink(inputProps) { + _assertSingleLink(inputProps); + !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(false) : undefined; + } + + function _assertCheckedLink(inputProps) { + _assertSingleLink(inputProps); + !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(false) : undefined; + } + + var propTypes = { + value: function (props, propName, componentName) { + if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) { + return null; + } + return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + }, + checked: function (props, propName, componentName) { + if (!props[propName] || props.onChange || props.readOnly || props.disabled) { + return null; + } + return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + }, + onChange: ReactPropTypes.func + }; + + var loggedTypeFailures = {}; + function getDeclarationErrorAddendum(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + /** + * Provide a linked `value` attribute for controlled forms. You should not use + * this outside of the ReactDOM controlled form components. + */ + var LinkedValueUtils = { + checkPropTypes: function (tagName, props, owner) { + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop); + } + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var addendum = getDeclarationErrorAddendum(owner); + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined; + } + } + }, + + /** + * @param {object} inputProps Props for form component + * @return {*} current value of the input either from value prop or link. + */ + getValue: function (inputProps) { + if (inputProps.valueLink) { + _assertValueLink(inputProps); + return inputProps.valueLink.value; + } + return inputProps.value; + }, + + /** + * @param {object} inputProps Props for form component + * @return {*} current checked status of the input either from checked prop + * or link. + */ + getChecked: function (inputProps) { + if (inputProps.checkedLink) { + _assertCheckedLink(inputProps); + return inputProps.checkedLink.value; + } + return inputProps.checked; + }, + + /** + * @param {object} inputProps Props for form component + * @param {SyntheticEvent} event change event to handle + */ + executeOnChange: function (inputProps, event) { + if (inputProps.valueLink) { + _assertValueLink(inputProps); + return inputProps.valueLink.requestChange(event.target.value); + } else if (inputProps.checkedLink) { + _assertCheckedLink(inputProps); + return inputProps.checkedLink.requestChange(event.target.checked); + } else if (inputProps.onChange) { + return inputProps.onChange.call(undefined, event); + } + } + }; + + module.exports = LinkedValueUtils; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 106 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPropTypes + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactPropTypeLocationNames = __webpack_require__(65); + + var emptyFunction = __webpack_require__(14); + var getIteratorFn = __webpack_require__(107); + + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + var ANONYMOUS = '<<anonymous>>'; + + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker + }; + + function createChainableTypeChecker(validate) { + function checkType(isRequired, props, propName, componentName, location, propFullName) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + if (props[propName] == null) { + var locationName = ReactPropTypeLocationNames[location]; + if (isRequired) { + return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + var locationName = ReactPropTypeLocationNames[location]; + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunction.thatReturns(null)); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var locationName = ReactPropTypeLocationNames[location]; + var propType = getPropType(propValue); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']'); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!ReactElement.isValidElement(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var locationName = ReactPropTypeLocationNames[location]; + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOf, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (propValue === expectedValues[i]) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + var valuesString = JSON.stringify(expectedValues); + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (propValue.hasOwnProperty(key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + return createChainableTypeChecker(function () { + return new Error('Invalid argument supplied to oneOfType, expected an instance of array.'); + }); + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName) == null) { + return null; + } + } + + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + var locationName = ReactPropTypeLocationNames[location]; + return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || ReactElement.isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + // Equivalent of `typeof` but with special handling for array and regexp. + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + return propType; + } + + // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + function getPreciseType(propValue) { + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + // Returns class name of the object, if any. + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return '<<anonymous>>'; + } + return propValue.constructor.name; + } + + module.exports = ReactPropTypes; + +/***/ }, +/* 107 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getIteratorFn + * @typechecks static-only + */ + + 'use strict'; + + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + module.exports = getIteratorFn; + +/***/ }, +/* 108 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMOption + */ + + 'use strict'; + + var ReactChildren = __webpack_require__(109); + var ReactDOMSelect = __webpack_require__(111); + + var assign = __webpack_require__(38); + var warning = __webpack_require__(24); + + var valueContextKey = ReactDOMSelect.valueContextKey; + + /** + * Implements an <option> native component that warns when `selected` is set. + */ + var ReactDOMOption = { + mountWrapper: function (inst, props, context) { + // TODO (yungsters): Remove support for `selected` in <option>. + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined; + } + + // Look up whether this option is 'selected' via context + var selectValue = context[valueContextKey]; + + // If context key is null (e.g., no specified value or after initial mount) + // or missing (e.g., for <datalist>), we don't change props.selected + var selected = null; + if (selectValue != null) { + selected = false; + if (Array.isArray(selectValue)) { + // multiple + for (var i = 0; i < selectValue.length; i++) { + if ('' + selectValue[i] === '' + props.value) { + selected = true; + break; + } + } + } else { + selected = '' + selectValue === '' + props.value; + } + } + + inst._wrapperState = { selected: selected }; + }, + + getNativeProps: function (inst, props, context) { + var nativeProps = assign({ selected: undefined, children: undefined }, props); + + // Read state only from initial mount because <select> updates value + // manually; we need the initial state only for server rendering + if (inst._wrapperState.selected != null) { + nativeProps.selected = inst._wrapperState.selected; + } + + var content = ''; + + // Flatten children and warn if they aren't strings or numbers; + // invalid types are ignored. + ReactChildren.forEach(props.children, function (child) { + if (child == null) { + return; + } + if (typeof child === 'string' || typeof child === 'number') { + content += child; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined; + } + }); + + nativeProps.children = content; + return nativeProps; + } + + }; + + module.exports = ReactDOMOption; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 109 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactChildren + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + var ReactElement = __webpack_require__(41); + + var emptyFunction = __webpack_require__(14); + var traverseAllChildren = __webpack_require__(110); + + var twoArgumentPooler = PooledClass.twoArgumentPooler; + var fourArgumentPooler = PooledClass.fourArgumentPooler; + + var userProvidedKeyEscapeRegex = /\/(?!\/)/g; + function escapeUserProvidedKey(text) { + return ('' + text).replace(userProvidedKeyEscapeRegex, '//'); + } + + /** + * PooledClass representing the bookkeeping associated with performing a child + * traversal. Allows avoiding binding callbacks. + * + * @constructor ForEachBookKeeping + * @param {!function} forEachFunction Function to perform traversal with. + * @param {?*} forEachContext Context to perform context with. + */ + function ForEachBookKeeping(forEachFunction, forEachContext) { + this.func = forEachFunction; + this.context = forEachContext; + this.count = 0; + } + ForEachBookKeeping.prototype.destructor = function () { + this.func = null; + this.context = null; + this.count = 0; + }; + PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler); + + function forEachSingleChild(bookKeeping, child, name) { + var func = bookKeeping.func; + var context = bookKeeping.context; + + func.call(context, child, bookKeeping.count++); + } + + /** + * Iterates through children that are typically specified as `props.children`. + * + * The provided forEachFunc(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc + * @param {*} forEachContext Context for forEachContext. + */ + function forEachChildren(children, forEachFunc, forEachContext) { + if (children == null) { + return children; + } + var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext); + traverseAllChildren(children, forEachSingleChild, traverseContext); + ForEachBookKeeping.release(traverseContext); + } + + /** + * PooledClass representing the bookkeeping associated with performing a child + * mapping. Allows avoiding binding callbacks. + * + * @constructor MapBookKeeping + * @param {!*} mapResult Object containing the ordered map of results. + * @param {!function} mapFunction Function to perform mapping with. + * @param {?*} mapContext Context to perform mapping with. + */ + function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) { + this.result = mapResult; + this.keyPrefix = keyPrefix; + this.func = mapFunction; + this.context = mapContext; + this.count = 0; + } + MapBookKeeping.prototype.destructor = function () { + this.result = null; + this.keyPrefix = null; + this.func = null; + this.context = null; + this.count = 0; + }; + PooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler); + + function mapSingleChildIntoContext(bookKeeping, child, childKey) { + var result = bookKeeping.result; + var keyPrefix = bookKeeping.keyPrefix; + var func = bookKeeping.func; + var context = bookKeeping.context; + + var mappedChild = func.call(context, child, bookKeeping.count++); + if (Array.isArray(mappedChild)) { + mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument); + } else if (mappedChild != null) { + if (ReactElement.isValidElement(mappedChild)) { + mappedChild = ReactElement.cloneAndReplaceKey(mappedChild, + // Keep both the (mapped) and old keys if they differ, just as + // traverseAllChildren used to do for objects as children + keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey); + } + result.push(mappedChild); + } + } + + function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) { + var escapedPrefix = ''; + if (prefix != null) { + escapedPrefix = escapeUserProvidedKey(prefix) + '/'; + } + var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context); + traverseAllChildren(children, mapSingleChildIntoContext, traverseContext); + MapBookKeeping.release(traverseContext); + } + + /** + * Maps children that are typically specified as `props.children`. + * + * The provided mapFunction(child, key, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} func The map function. + * @param {*} context Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ + function mapChildren(children, func, context) { + if (children == null) { + return children; + } + var result = []; + mapIntoWithKeyPrefixInternal(children, result, null, func, context); + return result; + } + + function forEachSingleChildDummy(traverseContext, child, name) { + return null; + } + + /** + * Count the number of children that are typically specified as + * `props.children`. + * + * @param {?*} children Children tree container. + * @return {number} The number of children. + */ + function countChildren(children, context) { + return traverseAllChildren(children, forEachSingleChildDummy, null); + } + + /** + * Flatten a children object (typically specified as `props.children`) and + * return an array with appropriately re-keyed children. + */ + function toArray(children) { + var result = []; + mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument); + return result; + } + + var ReactChildren = { + forEach: forEachChildren, + map: mapChildren, + mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal, + count: countChildren, + toArray: toArray + }; + + module.exports = ReactChildren; + +/***/ }, +/* 110 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule traverseAllChildren + */ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(4); + var ReactElement = __webpack_require__(41); + var ReactInstanceHandles = __webpack_require__(44); + + var getIteratorFn = __webpack_require__(107); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + var SEPARATOR = ReactInstanceHandles.SEPARATOR; + var SUBSEPARATOR = ':'; + + /** + * TODO: Test that a single child and an array with one item have the same key + * pattern. + */ + + var userProvidedKeyEscaperLookup = { + '=': '=0', + '.': '=1', + ':': '=2' + }; + + var userProvidedKeyEscapeRegex = /[=.:]/g; + + var didWarnAboutMaps = false; + + function userProvidedKeyEscaper(match) { + return userProvidedKeyEscaperLookup[match]; + } + + /** + * Generate a key string that identifies a component within a set. + * + * @param {*} component A component that could contain a manual key. + * @param {number} index Index that is used if a manual key is not provided. + * @return {string} + */ + function getComponentKey(component, index) { + if (component && component.key != null) { + // Explicit key + return wrapUserProvidedKey(component.key); + } + // Implicit key determined by the index in the set + return index.toString(36); + } + + /** + * Escape a component key so that it is safe to use in a reactid. + * + * @param {*} text Component key to be escaped. + * @return {string} An escaped string. + */ + function escapeUserProvidedKey(text) { + return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper); + } + + /** + * Wrap a `key` value explicitly provided by the user to distinguish it from + * implicitly-generated keys generated by a component's index in its parent. + * + * @param {string} key Value of a user-provided `key` attribute + * @return {string} + */ + function wrapUserProvidedKey(key) { + return '$' + escapeUserProvidedKey(key); + } + + /** + * @param {?*} children Children tree container. + * @param {!string} nameSoFar Name of the key path so far. + * @param {!function} callback Callback to invoke with each child found. + * @param {?*} traverseContext Used to pass information throughout the traversal + * process. + * @return {!number} The number of children in this subtree. + */ + function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) { + var type = typeof children; + + if (type === 'undefined' || type === 'boolean') { + // All of the above are perceived as null. + children = null; + } + + if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) { + callback(traverseContext, children, + // If it's the only child, treat the name as if it was wrapped in an array + // so that it's consistent if the number of children grows. + nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar); + return 1; + } + + var child; + var nextName; + var subtreeCount = 0; // Count of children found in the current subtree. + var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; + + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + child = children[i]; + nextName = nextNamePrefix + getComponentKey(child, i); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } else { + var iteratorFn = getIteratorFn(children); + if (iteratorFn) { + var iterator = iteratorFn.call(children); + var step; + if (iteratorFn !== children.entries) { + var ii = 0; + while (!(step = iterator.next()).done) { + child = step.value; + nextName = nextNamePrefix + getComponentKey(child, ii++); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } else { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined; + didWarnAboutMaps = true; + } + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + child = entry[1]; + nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } + } + } else if (type === 'object') { + var addendum = ''; + if (process.env.NODE_ENV !== 'production') { + addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.'; + if (children._isReactElement) { + addendum = ' It looks like you\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.'; + } + if (ReactCurrentOwner.current) { + var name = ReactCurrentOwner.current.getName(); + if (name) { + addendum += ' Check the render method of `' + name + '`.'; + } + } + } + var childrenString = String(children); + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined; + } + } + + return subtreeCount; + } + + /** + * Traverses children that are typically specified as `props.children`, but + * might also be specified through attributes: + * + * - `traverseAllChildren(this.props.children, ...)` + * - `traverseAllChildren(this.props.leftPanelChildren, ...)` + * + * The `traverseContext` is an optional argument that is passed through the + * entire traversal. It can be used to store accumulations or anything else that + * the callback might find relevant. + * + * @param {?*} children Children tree object. + * @param {!function} callback To invoke upon traversing each child. + * @param {?*} traverseContext Context for traversal. + * @return {!number} The number of children in this subtree. + */ + function traverseAllChildren(children, callback, traverseContext) { + if (children == null) { + return 0; + } + + return traverseAllChildrenImpl(children, '', callback, traverseContext); + } + + module.exports = traverseAllChildren; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 111 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMSelect + */ + + 'use strict'; + + var LinkedValueUtils = __webpack_require__(105); + var ReactMount = __webpack_require__(27); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var warning = __webpack_require__(24); + + var valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2); + + function updateOptionsIfPendingUpdateAndMounted() { + if (this._rootNodeID && this._wrapperState.pendingUpdate) { + this._wrapperState.pendingUpdate = false; + + var props = this._currentElement.props; + var value = LinkedValueUtils.getValue(props); + + if (value != null) { + updateOptions(this, props, value); + } + } + } + + function getDeclarationErrorAddendum(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + var valuePropNames = ['value', 'defaultValue']; + + /** + * Validation function for `value` and `defaultValue`. + * @private + */ + function checkSelectPropTypes(inst, props) { + var owner = inst._currentElement._owner; + LinkedValueUtils.checkPropTypes('select', props, owner); + + for (var i = 0; i < valuePropNames.length; i++) { + var propName = valuePropNames[i]; + if (props[propName] == null) { + continue; + } + if (props.multiple) { + process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined; + } else { + process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined; + } + } + } + + /** + * @param {ReactDOMComponent} inst + * @param {boolean} multiple + * @param {*} propValue A stringable (with `multiple`, a list of stringables). + * @private + */ + function updateOptions(inst, multiple, propValue) { + var selectedValue, i; + var options = ReactMount.getNode(inst._rootNodeID).options; + + if (multiple) { + selectedValue = {}; + for (i = 0; i < propValue.length; i++) { + selectedValue['' + propValue[i]] = true; + } + for (i = 0; i < options.length; i++) { + var selected = selectedValue.hasOwnProperty(options[i].value); + if (options[i].selected !== selected) { + options[i].selected = selected; + } + } + } else { + // Do not set `select.value` as exact behavior isn't consistent across all + // browsers for all cases. + selectedValue = '' + propValue; + for (i = 0; i < options.length; i++) { + if (options[i].value === selectedValue) { + options[i].selected = true; + return; + } + } + if (options.length) { + options[0].selected = true; + } + } + } + + /** + * Implements a <select> native component that allows optionally setting the + * props `value` and `defaultValue`. If `multiple` is false, the prop must be a + * stringable. If `multiple` is true, the prop must be an array of stringables. + * + * If `value` is not supplied (or null/undefined), user actions that change the + * selected option will trigger updates to the rendered options. + * + * If it is supplied (and not null/undefined), the rendered options will not + * update in response to user actions. Instead, the `value` prop must change in + * order for the rendered options to update. + * + * If `defaultValue` is provided, any options with the supplied values will be + * selected. + */ + var ReactDOMSelect = { + valueContextKey: valueContextKey, + + getNativeProps: function (inst, props, context) { + return assign({}, props, { + onChange: inst._wrapperState.onChange, + value: undefined + }); + }, + + mountWrapper: function (inst, props) { + if (process.env.NODE_ENV !== 'production') { + checkSelectPropTypes(inst, props); + } + + var value = LinkedValueUtils.getValue(props); + inst._wrapperState = { + pendingUpdate: false, + initialValue: value != null ? value : props.defaultValue, + onChange: _handleChange.bind(inst), + wasMultiple: Boolean(props.multiple) + }; + }, + + processChildContext: function (inst, props, context) { + // Pass down initial value so initial generated markup has correct + // `selected` attributes + var childContext = assign({}, context); + childContext[valueContextKey] = inst._wrapperState.initialValue; + return childContext; + }, + + postUpdateWrapper: function (inst) { + var props = inst._currentElement.props; + + // After the initial mount, we control selected-ness manually so don't pass + // the context value down + inst._wrapperState.initialValue = undefined; + + var wasMultiple = inst._wrapperState.wasMultiple; + inst._wrapperState.wasMultiple = Boolean(props.multiple); + + var value = LinkedValueUtils.getValue(props); + if (value != null) { + inst._wrapperState.pendingUpdate = false; + updateOptions(inst, Boolean(props.multiple), value); + } else if (wasMultiple !== Boolean(props.multiple)) { + // For simplicity, reapply `defaultValue` if `multiple` is toggled. + if (props.defaultValue != null) { + updateOptions(inst, Boolean(props.multiple), props.defaultValue); + } else { + // Revert the select back to its default unselected state. + updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : ''); + } + } + } + }; + + function _handleChange(event) { + var props = this._currentElement.props; + var returnValue = LinkedValueUtils.executeOnChange(props, event); + + this._wrapperState.pendingUpdate = true; + ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this); + return returnValue; + } + + module.exports = ReactDOMSelect; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 112 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMTextarea + */ + + 'use strict'; + + var LinkedValueUtils = __webpack_require__(105); + var ReactDOMIDOperations = __webpack_require__(26); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + function forceUpdateIfMounted() { + if (this._rootNodeID) { + // DOM component is still mounted; update + ReactDOMTextarea.updateWrapper(this); + } + } + + /** + * Implements a <textarea> native component that allows setting `value`, and + * `defaultValue`. This differs from the traditional DOM API because value is + * usually set as PCDATA children. + * + * If `value` is not supplied (or null/undefined), user actions that affect the + * value will trigger updates to the element. + * + * If `value` is supplied (and not null/undefined), the rendered element will + * not trigger updates to the element. Instead, the `value` prop must change in + * order for the rendered element to be updated. + * + * The rendered element will be initialized with an empty value, the prop + * `defaultValue` if specified, or the children content (deprecated). + */ + var ReactDOMTextarea = { + getNativeProps: function (inst, props, context) { + !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined; + + // Always set children to the same thing. In IE9, the selection range will + // get reset if `textContent` is mutated. + var nativeProps = assign({}, props, { + defaultValue: undefined, + value: undefined, + children: inst._wrapperState.initialValue, + onChange: inst._wrapperState.onChange + }); + + return nativeProps; + }, + + mountWrapper: function (inst, props) { + if (process.env.NODE_ENV !== 'production') { + LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner); + } + + var defaultValue = props.defaultValue; + // TODO (yungsters): Remove support for children content in <textarea>. + var children = props.children; + if (children != null) { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined; + } + !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined; + if (Array.isArray(children)) { + !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined; + children = children[0]; + } + + defaultValue = '' + children; + } + if (defaultValue == null) { + defaultValue = ''; + } + var value = LinkedValueUtils.getValue(props); + + inst._wrapperState = { + // We save the initial value so that `ReactDOMComponent` doesn't update + // `textContent` (unnecessary since we update value). + // The initial value can be a boolean or object so that's why it's + // forced to be a string. + initialValue: '' + (value != null ? value : defaultValue), + onChange: _handleChange.bind(inst) + }; + }, + + updateWrapper: function (inst) { + var props = inst._currentElement.props; + var value = LinkedValueUtils.getValue(props); + if (value != null) { + // Cast `value` to a string to ensure the value is set correctly. While + // browsers typically do this as necessary, jsdom doesn't. + ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value); + } + } + }; + + function _handleChange(event) { + var props = this._currentElement.props; + var returnValue = LinkedValueUtils.executeOnChange(props, event); + ReactUpdates.asap(forceUpdateIfMounted, this); + return returnValue; + } + + module.exports = ReactDOMTextarea; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 113 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMultiChild + * @typechecks static-only + */ + + 'use strict'; + + var ReactComponentEnvironment = __webpack_require__(63); + var ReactMultiChildUpdateTypes = __webpack_require__(15); + + var ReactCurrentOwner = __webpack_require__(4); + var ReactReconciler = __webpack_require__(49); + var ReactChildReconciler = __webpack_require__(114); + + var flattenChildren = __webpack_require__(115); + + /** + * Updating children of a component may trigger recursive updates. The depth is + * used to batch recursive updates to render markup more efficiently. + * + * @type {number} + * @private + */ + var updateDepth = 0; + + /** + * Queue of update configuration objects. + * + * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`. + * + * @type {array<object>} + * @private + */ + var updateQueue = []; + + /** + * Queue of markup to be rendered. + * + * @type {array<string>} + * @private + */ + var markupQueue = []; + + /** + * Enqueues markup to be rendered and inserted at a supplied index. + * + * @param {string} parentID ID of the parent component. + * @param {string} markup Markup that renders into an element. + * @param {number} toIndex Destination index. + * @private + */ + function enqueueInsertMarkup(parentID, markup, toIndex) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.INSERT_MARKUP, + markupIndex: markupQueue.push(markup) - 1, + content: null, + fromIndex: null, + toIndex: toIndex + }); + } + + /** + * Enqueues moving an existing element to another index. + * + * @param {string} parentID ID of the parent component. + * @param {number} fromIndex Source index of the existing element. + * @param {number} toIndex Destination index of the element. + * @private + */ + function enqueueMove(parentID, fromIndex, toIndex) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.MOVE_EXISTING, + markupIndex: null, + content: null, + fromIndex: fromIndex, + toIndex: toIndex + }); + } + + /** + * Enqueues removing an element at an index. + * + * @param {string} parentID ID of the parent component. + * @param {number} fromIndex Index of the element to remove. + * @private + */ + function enqueueRemove(parentID, fromIndex) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.REMOVE_NODE, + markupIndex: null, + content: null, + fromIndex: fromIndex, + toIndex: null + }); + } + + /** + * Enqueues setting the markup of a node. + * + * @param {string} parentID ID of the parent component. + * @param {string} markup Markup that renders into an element. + * @private + */ + function enqueueSetMarkup(parentID, markup) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.SET_MARKUP, + markupIndex: null, + content: markup, + fromIndex: null, + toIndex: null + }); + } + + /** + * Enqueues setting the text content. + * + * @param {string} parentID ID of the parent component. + * @param {string} textContent Text content to set. + * @private + */ + function enqueueTextContent(parentID, textContent) { + // NOTE: Null values reduce hidden classes. + updateQueue.push({ + parentID: parentID, + parentNode: null, + type: ReactMultiChildUpdateTypes.TEXT_CONTENT, + markupIndex: null, + content: textContent, + fromIndex: null, + toIndex: null + }); + } + + /** + * Processes any enqueued updates. + * + * @private + */ + function processQueue() { + if (updateQueue.length) { + ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue); + clearQueue(); + } + } + + /** + * Clears any enqueued updates. + * + * @private + */ + function clearQueue() { + updateQueue.length = 0; + markupQueue.length = 0; + } + + /** + * ReactMultiChild are capable of reconciling multiple children. + * + * @class ReactMultiChild + * @internal + */ + var ReactMultiChild = { + + /** + * Provides common functionality for components that must reconcile multiple + * children. This is used by `ReactDOMComponent` to mount, update, and + * unmount child components. + * + * @lends {ReactMultiChild.prototype} + */ + Mixin: { + + _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) { + if (process.env.NODE_ENV !== 'production') { + if (this._currentElement) { + try { + ReactCurrentOwner.current = this._currentElement._owner; + return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context); + } finally { + ReactCurrentOwner.current = null; + } + } + } + return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context); + }, + + _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) { + var nextChildren; + if (process.env.NODE_ENV !== 'production') { + if (this._currentElement) { + try { + ReactCurrentOwner.current = this._currentElement._owner; + nextChildren = flattenChildren(nextNestedChildrenElements); + } finally { + ReactCurrentOwner.current = null; + } + return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context); + } + } + nextChildren = flattenChildren(nextNestedChildrenElements); + return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context); + }, + + /** + * Generates a "mount image" for each of the supplied children. In the case + * of `ReactDOMComponent`, a mount image is a string of markup. + * + * @param {?object} nestedChildren Nested child maps. + * @return {array} An array of mounted representations. + * @internal + */ + mountChildren: function (nestedChildren, transaction, context) { + var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context); + this._renderedChildren = children; + var mountImages = []; + var index = 0; + for (var name in children) { + if (children.hasOwnProperty(name)) { + var child = children[name]; + // Inlined for performance, see `ReactInstanceHandles.createReactID`. + var rootID = this._rootNodeID + name; + var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context); + child._mountIndex = index++; + mountImages.push(mountImage); + } + } + return mountImages; + }, + + /** + * Replaces any rendered children with a text content string. + * + * @param {string} nextContent String of content. + * @internal + */ + updateTextContent: function (nextContent) { + updateDepth++; + var errorThrown = true; + try { + var prevChildren = this._renderedChildren; + // Remove any rendered children. + ReactChildReconciler.unmountChildren(prevChildren); + // TODO: The setTextContent operation should be enough + for (var name in prevChildren) { + if (prevChildren.hasOwnProperty(name)) { + this._unmountChild(prevChildren[name]); + } + } + // Set new text content. + this.setTextContent(nextContent); + errorThrown = false; + } finally { + updateDepth--; + if (!updateDepth) { + if (errorThrown) { + clearQueue(); + } else { + processQueue(); + } + } + } + }, + + /** + * Replaces any rendered children with a markup string. + * + * @param {string} nextMarkup String of markup. + * @internal + */ + updateMarkup: function (nextMarkup) { + updateDepth++; + var errorThrown = true; + try { + var prevChildren = this._renderedChildren; + // Remove any rendered children. + ReactChildReconciler.unmountChildren(prevChildren); + for (var name in prevChildren) { + if (prevChildren.hasOwnProperty(name)) { + this._unmountChildByName(prevChildren[name], name); + } + } + this.setMarkup(nextMarkup); + errorThrown = false; + } finally { + updateDepth--; + if (!updateDepth) { + if (errorThrown) { + clearQueue(); + } else { + processQueue(); + } + } + } + }, + + /** + * Updates the rendered children with new children. + * + * @param {?object} nextNestedChildrenElements Nested child element maps. + * @param {ReactReconcileTransaction} transaction + * @internal + */ + updateChildren: function (nextNestedChildrenElements, transaction, context) { + updateDepth++; + var errorThrown = true; + try { + this._updateChildren(nextNestedChildrenElements, transaction, context); + errorThrown = false; + } finally { + updateDepth--; + if (!updateDepth) { + if (errorThrown) { + clearQueue(); + } else { + processQueue(); + } + } + } + }, + + /** + * Improve performance by isolating this hot code path from the try/catch + * block in `updateChildren`. + * + * @param {?object} nextNestedChildrenElements Nested child element maps. + * @param {ReactReconcileTransaction} transaction + * @final + * @protected + */ + _updateChildren: function (nextNestedChildrenElements, transaction, context) { + var prevChildren = this._renderedChildren; + var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context); + this._renderedChildren = nextChildren; + if (!nextChildren && !prevChildren) { + return; + } + var name; + // `nextIndex` will increment for each child in `nextChildren`, but + // `lastIndex` will be the last index visited in `prevChildren`. + var lastIndex = 0; + var nextIndex = 0; + for (name in nextChildren) { + if (!nextChildren.hasOwnProperty(name)) { + continue; + } + var prevChild = prevChildren && prevChildren[name]; + var nextChild = nextChildren[name]; + if (prevChild === nextChild) { + this.moveChild(prevChild, nextIndex, lastIndex); + lastIndex = Math.max(prevChild._mountIndex, lastIndex); + prevChild._mountIndex = nextIndex; + } else { + if (prevChild) { + // Update `lastIndex` before `_mountIndex` gets unset by unmounting. + lastIndex = Math.max(prevChild._mountIndex, lastIndex); + this._unmountChild(prevChild); + } + // The child must be instantiated before it's mounted. + this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context); + } + nextIndex++; + } + // Remove children that are no longer present. + for (name in prevChildren) { + if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) { + this._unmountChild(prevChildren[name]); + } + } + }, + + /** + * Unmounts all rendered children. This should be used to clean up children + * when this component is unmounted. + * + * @internal + */ + unmountChildren: function () { + var renderedChildren = this._renderedChildren; + ReactChildReconciler.unmountChildren(renderedChildren); + this._renderedChildren = null; + }, + + /** + * Moves a child component to the supplied index. + * + * @param {ReactComponent} child Component to move. + * @param {number} toIndex Destination index of the element. + * @param {number} lastIndex Last index visited of the siblings of `child`. + * @protected + */ + moveChild: function (child, toIndex, lastIndex) { + // If the index of `child` is less than `lastIndex`, then it needs to + // be moved. Otherwise, we do not need to move it because a child will be + // inserted or moved before `child`. + if (child._mountIndex < lastIndex) { + enqueueMove(this._rootNodeID, child._mountIndex, toIndex); + } + }, + + /** + * Creates a child component. + * + * @param {ReactComponent} child Component to create. + * @param {string} mountImage Markup to insert. + * @protected + */ + createChild: function (child, mountImage) { + enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex); + }, + + /** + * Removes a child component. + * + * @param {ReactComponent} child Child to remove. + * @protected + */ + removeChild: function (child) { + enqueueRemove(this._rootNodeID, child._mountIndex); + }, + + /** + * Sets this text content string. + * + * @param {string} textContent Text content to set. + * @protected + */ + setTextContent: function (textContent) { + enqueueTextContent(this._rootNodeID, textContent); + }, + + /** + * Sets this markup string. + * + * @param {string} markup Markup to set. + * @protected + */ + setMarkup: function (markup) { + enqueueSetMarkup(this._rootNodeID, markup); + }, + + /** + * Mounts a child with the supplied name. + * + * NOTE: This is part of `updateChildren` and is here for readability. + * + * @param {ReactComponent} child Component to mount. + * @param {string} name Name of the child. + * @param {number} index Index at which to insert the child. + * @param {ReactReconcileTransaction} transaction + * @private + */ + _mountChildByNameAtIndex: function (child, name, index, transaction, context) { + // Inlined for performance, see `ReactInstanceHandles.createReactID`. + var rootID = this._rootNodeID + name; + var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context); + child._mountIndex = index; + this.createChild(child, mountImage); + }, + + /** + * Unmounts a rendered child. + * + * NOTE: This is part of `updateChildren` and is here for readability. + * + * @param {ReactComponent} child Component to unmount. + * @private + */ + _unmountChild: function (child) { + this.removeChild(child); + child._mountIndex = null; + } + + } + + }; + + module.exports = ReactMultiChild; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 114 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactChildReconciler + * @typechecks static-only + */ + + 'use strict'; + + var ReactReconciler = __webpack_require__(49); + + var instantiateReactComponent = __webpack_require__(61); + var shouldUpdateReactComponent = __webpack_require__(66); + var traverseAllChildren = __webpack_require__(110); + var warning = __webpack_require__(24); + + function instantiateChild(childInstances, child, name) { + // We found a component instance. + var keyUnique = childInstances[name] === undefined; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined; + } + if (child != null && keyUnique) { + childInstances[name] = instantiateReactComponent(child, null); + } + } + + /** + * ReactChildReconciler provides helpers for initializing or updating a set of + * children. Its output is suitable for passing it onto ReactMultiChild which + * does diffed reordering and insertion. + */ + var ReactChildReconciler = { + /** + * Generates a "mount image" for each of the supplied children. In the case + * of `ReactDOMComponent`, a mount image is a string of markup. + * + * @param {?object} nestedChildNodes Nested child maps. + * @return {?object} A set of child instances. + * @internal + */ + instantiateChildren: function (nestedChildNodes, transaction, context) { + if (nestedChildNodes == null) { + return null; + } + var childInstances = {}; + traverseAllChildren(nestedChildNodes, instantiateChild, childInstances); + return childInstances; + }, + + /** + * Updates the rendered children and returns a new set of children. + * + * @param {?object} prevChildren Previously initialized set of children. + * @param {?object} nextChildren Flat child element maps. + * @param {ReactReconcileTransaction} transaction + * @param {object} context + * @return {?object} A new set of child instances. + * @internal + */ + updateChildren: function (prevChildren, nextChildren, transaction, context) { + // We currently don't have a way to track moves here but if we use iterators + // instead of for..in we can zip the iterators and check if an item has + // moved. + // TODO: If nothing has changed, return the prevChildren object so that we + // can quickly bailout if nothing has changed. + if (!nextChildren && !prevChildren) { + return null; + } + var name; + for (name in nextChildren) { + if (!nextChildren.hasOwnProperty(name)) { + continue; + } + var prevChild = prevChildren && prevChildren[name]; + var prevElement = prevChild && prevChild._currentElement; + var nextElement = nextChildren[name]; + if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) { + ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context); + nextChildren[name] = prevChild; + } else { + if (prevChild) { + ReactReconciler.unmountComponent(prevChild, name); + } + // The child must be instantiated before it's mounted. + var nextChildInstance = instantiateReactComponent(nextElement, null); + nextChildren[name] = nextChildInstance; + } + } + // Unmount children that are no longer present. + for (name in prevChildren) { + if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) { + ReactReconciler.unmountComponent(prevChildren[name]); + } + } + return nextChildren; + }, + + /** + * Unmounts all rendered children. This should be used to clean up children + * when this component is unmounted. + * + * @param {?object} renderedChildren Previously initialized set of children. + * @internal + */ + unmountChildren: function (renderedChildren) { + for (var name in renderedChildren) { + if (renderedChildren.hasOwnProperty(name)) { + var renderedChild = renderedChildren[name]; + ReactReconciler.unmountComponent(renderedChild); + } + } + } + + }; + + module.exports = ReactChildReconciler; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 115 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule flattenChildren + */ + + 'use strict'; + + var traverseAllChildren = __webpack_require__(110); + var warning = __webpack_require__(24); + + /** + * @param {function} traverseContext Context passed through traversal. + * @param {?ReactComponent} child React child component. + * @param {!string} name String name of key path to child. + */ + function flattenSingleChildIntoContext(traverseContext, child, name) { + // We found a component instance. + var result = traverseContext; + var keyUnique = result[name] === undefined; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined; + } + if (keyUnique && child != null) { + result[name] = child; + } + } + + /** + * Flattens children that are typically specified as `props.children`. Any null + * children will not be included in the resulting object. + * @return {!object} flattened children keyed by name. + */ + function flattenChildren(children) { + if (children == null) { + return children; + } + var result = {}; + traverseAllChildren(children, flattenSingleChildIntoContext, result); + return result; + } + + module.exports = flattenChildren; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 116 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule shallowEqual + * @typechecks + * + */ + + 'use strict'; + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + /** + * Performs equality by iterating through keys on an object and returning false + * when any key has values which are not strictly equal between the arguments. + * Returns true when the values of all keys are strictly equal. + */ + function shallowEqual(objA, objB) { + if (objA === objB) { + return true; + } + + if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { + return false; + } + + var keysA = Object.keys(objA); + var keysB = Object.keys(objB); + + if (keysA.length !== keysB.length) { + return false; + } + + // Test for A's keys different from B. + var bHasOwnProperty = hasOwnProperty.bind(objB); + for (var i = 0; i < keysA.length; i++) { + if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) { + return false; + } + } + + return true; + } + + module.exports = shallowEqual; + +/***/ }, +/* 117 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactEventListener + * @typechecks static-only + */ + + 'use strict'; + + var EventListener = __webpack_require__(118); + var ExecutionEnvironment = __webpack_require__(8); + var PooledClass = __webpack_require__(55); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMount = __webpack_require__(27); + var ReactUpdates = __webpack_require__(53); + + var assign = __webpack_require__(38); + var getEventTarget = __webpack_require__(80); + var getUnboundedScrollPosition = __webpack_require__(119); + + var DOCUMENT_FRAGMENT_NODE_TYPE = 11; + + /** + * Finds the parent React component of `node`. + * + * @param {*} node + * @return {?DOMEventTarget} Parent container, or `null` if the specified node + * is not nested. + */ + function findParent(node) { + // TODO: It may be a good idea to cache this to prevent unnecessary DOM + // traversal, but caching is difficult to do correctly without using a + // mutation observer to listen for all DOM changes. + var nodeID = ReactMount.getID(node); + var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID); + var container = ReactMount.findReactContainerForID(rootID); + var parent = ReactMount.getFirstReactDOM(container); + return parent; + } + + // Used to store ancestor hierarchy in top level callback + function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) { + this.topLevelType = topLevelType; + this.nativeEvent = nativeEvent; + this.ancestors = []; + } + assign(TopLevelCallbackBookKeeping.prototype, { + destructor: function () { + this.topLevelType = null; + this.nativeEvent = null; + this.ancestors.length = 0; + } + }); + PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler); + + function handleTopLevelImpl(bookKeeping) { + // TODO: Re-enable event.path handling + // + // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) { + // // New browsers have a path attribute on native events + // handleTopLevelWithPath(bookKeeping); + // } else { + // // Legacy browsers don't have a path attribute on native events + // handleTopLevelWithoutPath(bookKeeping); + // } + + void handleTopLevelWithPath; // temporarily unused + handleTopLevelWithoutPath(bookKeeping); + } + + // Legacy browsers don't have a path attribute on native events + function handleTopLevelWithoutPath(bookKeeping) { + var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window; + + // Loop through the hierarchy, in case there's any nested components. + // It's important that we build the array of ancestors before calling any + // event handlers, because event handlers can modify the DOM, leading to + // inconsistencies with ReactMount's node cache. See #1105. + var ancestor = topLevelTarget; + while (ancestor) { + bookKeeping.ancestors.push(ancestor); + ancestor = findParent(ancestor); + } + + for (var i = 0; i < bookKeeping.ancestors.length; i++) { + topLevelTarget = bookKeeping.ancestors[i]; + var topLevelTargetID = ReactMount.getID(topLevelTarget) || ''; + ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent)); + } + } + + // New browsers have a path attribute on native events + function handleTopLevelWithPath(bookKeeping) { + var path = bookKeeping.nativeEvent.path; + var currentNativeTarget = path[0]; + var eventsFired = 0; + for (var i = 0; i < path.length; i++) { + var currentPathElement = path[i]; + if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) { + currentNativeTarget = path[i + 1]; + } + // TODO: slow + var reactParent = ReactMount.getFirstReactDOM(currentPathElement); + if (reactParent === currentPathElement) { + var currentPathElementID = ReactMount.getID(currentPathElement); + var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID); + bookKeeping.ancestors.push(currentPathElement); + + var topLevelTargetID = ReactMount.getID(currentPathElement) || ''; + eventsFired++; + ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget); + + // Jump to the root of this React render tree + while (currentPathElementID !== newRootID) { + i++; + currentPathElement = path[i]; + currentPathElementID = ReactMount.getID(currentPathElement); + } + } + } + if (eventsFired === 0) { + ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent)); + } + } + + function scrollValueMonitor(cb) { + var scrollPosition = getUnboundedScrollPosition(window); + cb(scrollPosition); + } + + var ReactEventListener = { + _enabled: true, + _handleTopLevel: null, + + WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null, + + setHandleTopLevel: function (handleTopLevel) { + ReactEventListener._handleTopLevel = handleTopLevel; + }, + + setEnabled: function (enabled) { + ReactEventListener._enabled = !!enabled; + }, + + isEnabled: function () { + return ReactEventListener._enabled; + }, + + /** + * Traps top-level events by using event bubbling. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {object} handle Element on which to attach listener. + * @return {?object} An object with a remove function which will forcefully + * remove the listener. + * @internal + */ + trapBubbledEvent: function (topLevelType, handlerBaseName, handle) { + var element = handle; + if (!element) { + return null; + } + return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType)); + }, + + /** + * Traps a top-level event by using event capturing. + * + * @param {string} topLevelType Record from `EventConstants`. + * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {object} handle Element on which to attach listener. + * @return {?object} An object with a remove function which will forcefully + * remove the listener. + * @internal + */ + trapCapturedEvent: function (topLevelType, handlerBaseName, handle) { + var element = handle; + if (!element) { + return null; + } + return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType)); + }, + + monitorScrollValue: function (refresh) { + var callback = scrollValueMonitor.bind(null, refresh); + EventListener.listen(window, 'scroll', callback); + }, + + dispatchEvent: function (topLevelType, nativeEvent) { + if (!ReactEventListener._enabled) { + return; + } + + var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent); + try { + // Event queue being processed in the same cycle allows + // `preventDefault`. + ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping); + } finally { + TopLevelCallbackBookKeeping.release(bookKeeping); + } + } + }; + + module.exports = ReactEventListener; + +/***/ }, +/* 118 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, 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. + * + * @providesModule EventListener + * @typechecks + */ + + 'use strict'; + + var emptyFunction = __webpack_require__(14); + + /** + * Upstream version of event listener. Does not take into account specific + * nature of platform. + */ + var EventListener = { + /** + * Listen to DOM events during the bubble phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + listen: function (target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, false); + return { + remove: function () { + target.removeEventListener(eventType, callback, false); + } + }; + } else if (target.attachEvent) { + target.attachEvent('on' + eventType, callback); + return { + remove: function () { + target.detachEvent('on' + eventType, callback); + } + }; + } + }, + + /** + * Listen to DOM events during the capture phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + capture: function (target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, true); + return { + remove: function () { + target.removeEventListener(eventType, callback, true); + } + }; + } else { + if (process.env.NODE_ENV !== 'production') { + console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.'); + } + return { + remove: emptyFunction + }; + } + }, + + registerDefault: function () {} + }; + + module.exports = EventListener; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 119 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getUnboundedScrollPosition + * @typechecks + */ + + 'use strict'; + + /** + * Gets the scroll position of the supplied element or window. + * + * The return values are unbounded, unlike `getScrollPosition`. This means they + * may be negative or exceed the element boundaries (which is possible using + * inertial scrolling). + * + * @param {DOMWindow|DOMElement} scrollable + * @return {object} Map with `x` and `y` keys. + */ + function getUnboundedScrollPosition(scrollable) { + if (scrollable === window) { + return { + x: window.pageXOffset || document.documentElement.scrollLeft, + y: window.pageYOffset || document.documentElement.scrollTop + }; + } + return { + x: scrollable.scrollLeft, + y: scrollable.scrollTop + }; + } + + module.exports = getUnboundedScrollPosition; + +/***/ }, +/* 120 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInjection + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var EventPluginHub = __webpack_require__(30); + var ReactComponentEnvironment = __webpack_require__(63); + var ReactClass = __webpack_require__(121); + var ReactEmptyComponent = __webpack_require__(67); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactNativeComponent = __webpack_require__(68); + var ReactPerf = __webpack_require__(17); + var ReactRootIndex = __webpack_require__(45); + var ReactUpdates = __webpack_require__(53); + + var ReactInjection = { + Component: ReactComponentEnvironment.injection, + Class: ReactClass.injection, + DOMProperty: DOMProperty.injection, + EmptyComponent: ReactEmptyComponent.injection, + EventPluginHub: EventPluginHub.injection, + EventEmitter: ReactBrowserEventEmitter.injection, + NativeComponent: ReactNativeComponent.injection, + Perf: ReactPerf.injection, + RootIndex: ReactRootIndex.injection, + Updates: ReactUpdates.injection + }; + + module.exports = ReactInjection; + +/***/ }, +/* 121 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactClass + */ + + 'use strict'; + + var ReactComponent = __webpack_require__(122); + var ReactElement = __webpack_require__(41); + var ReactPropTypeLocations = __webpack_require__(64); + var ReactPropTypeLocationNames = __webpack_require__(65); + var ReactNoopUpdateQueue = __webpack_require__(123); + + var assign = __webpack_require__(38); + var emptyObject = __webpack_require__(57); + var invariant = __webpack_require__(12); + var keyMirror = __webpack_require__(16); + var keyOf = __webpack_require__(78); + var warning = __webpack_require__(24); + + var MIXINS_KEY = keyOf({ mixins: null }); + + /** + * Policies that describe methods in `ReactClassInterface`. + */ + var SpecPolicy = keyMirror({ + /** + * These methods may be defined only once by the class specification or mixin. + */ + DEFINE_ONCE: null, + /** + * These methods may be defined by both the class specification and mixins. + * Subsequent definitions will be chained. These methods must return void. + */ + DEFINE_MANY: null, + /** + * These methods are overriding the base class. + */ + OVERRIDE_BASE: null, + /** + * These methods are similar to DEFINE_MANY, except we assume they return + * objects. We try to merge the keys of the return values of all the mixed in + * functions. If there is a key conflict we throw. + */ + DEFINE_MANY_MERGED: null + }); + + var injectedMixins = []; + + var warnedSetProps = false; + function warnSetProps() { + if (!warnedSetProps) { + warnedSetProps = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined; + } + } + + /** + * Composite components are higher-level components that compose other composite + * or native components. + * + * To create a new type of `ReactClass`, pass a specification of + * your new class to `React.createClass`. The only requirement of your class + * specification is that you implement a `render` method. + * + * var MyComponent = React.createClass({ + * render: function() { + * return <div>Hello World</div>; + * } + * }); + * + * The class specification supports a specific protocol of methods that have + * special meaning (e.g. `render`). See `ReactClassInterface` for + * more the comprehensive protocol. Any other properties and methods in the + * class specification will be available on the prototype. + * + * @interface ReactClassInterface + * @internal + */ + var ReactClassInterface = { + + /** + * An array of Mixin objects to include when defining your component. + * + * @type {array} + * @optional + */ + mixins: SpecPolicy.DEFINE_MANY, + + /** + * An object containing properties and methods that should be defined on + * the component's constructor instead of its prototype (static methods). + * + * @type {object} + * @optional + */ + statics: SpecPolicy.DEFINE_MANY, + + /** + * Definition of prop types for this component. + * + * @type {object} + * @optional + */ + propTypes: SpecPolicy.DEFINE_MANY, + + /** + * Definition of context types for this component. + * + * @type {object} + * @optional + */ + contextTypes: SpecPolicy.DEFINE_MANY, + + /** + * Definition of context types this component sets for its children. + * + * @type {object} + * @optional + */ + childContextTypes: SpecPolicy.DEFINE_MANY, + + // ==== Definition methods ==== + + /** + * Invoked when the component is mounted. Values in the mapping will be set on + * `this.props` if that prop is not specified (i.e. using an `in` check). + * + * This method is invoked before `getInitialState` and therefore cannot rely + * on `this.state` or use `this.setState`. + * + * @return {object} + * @optional + */ + getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED, + + /** + * Invoked once before the component is mounted. The return value will be used + * as the initial value of `this.state`. + * + * getInitialState: function() { + * return { + * isOn: false, + * fooBaz: new BazFoo() + * } + * } + * + * @return {object} + * @optional + */ + getInitialState: SpecPolicy.DEFINE_MANY_MERGED, + + /** + * @return {object} + * @optional + */ + getChildContext: SpecPolicy.DEFINE_MANY_MERGED, + + /** + * Uses props from `this.props` and state from `this.state` to render the + * structure of the component. + * + * No guarantees are made about when or how often this method is invoked, so + * it must not have side effects. + * + * render: function() { + * var name = this.props.name; + * return <div>Hello, {name}!</div>; + * } + * + * @return {ReactComponent} + * @nosideeffects + * @required + */ + render: SpecPolicy.DEFINE_ONCE, + + // ==== Delegate methods ==== + + /** + * Invoked when the component is initially created and about to be mounted. + * This may have side effects, but any external subscriptions or data created + * by this method must be cleaned up in `componentWillUnmount`. + * + * @optional + */ + componentWillMount: SpecPolicy.DEFINE_MANY, + + /** + * Invoked when the component has been mounted and has a DOM representation. + * However, there is no guarantee that the DOM node is in the document. + * + * Use this as an opportunity to operate on the DOM when the component has + * been mounted (initialized and rendered) for the first time. + * + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidMount: SpecPolicy.DEFINE_MANY, + + /** + * Invoked before the component receives new props. + * + * Use this as an opportunity to react to a prop transition by updating the + * state using `this.setState`. Current props are accessed via `this.props`. + * + * componentWillReceiveProps: function(nextProps, nextContext) { + * this.setState({ + * likesIncreasing: nextProps.likeCount > this.props.likeCount + * }); + * } + * + * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop + * transition may cause a state change, but the opposite is not true. If you + * need it, you are probably looking for `componentWillUpdate`. + * + * @param {object} nextProps + * @optional + */ + componentWillReceiveProps: SpecPolicy.DEFINE_MANY, + + /** + * Invoked while deciding if the component should be updated as a result of + * receiving new props, state and/or context. + * + * Use this as an opportunity to `return false` when you're certain that the + * transition to the new props/state/context will not require a component + * update. + * + * shouldComponentUpdate: function(nextProps, nextState, nextContext) { + * return !equal(nextProps, this.props) || + * !equal(nextState, this.state) || + * !equal(nextContext, this.context); + * } + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @return {boolean} True if the component should update. + * @optional + */ + shouldComponentUpdate: SpecPolicy.DEFINE_ONCE, + + /** + * Invoked when the component is about to update due to a transition from + * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` + * and `nextContext`. + * + * Use this as an opportunity to perform preparation before an update occurs. + * + * NOTE: You **cannot** use `this.setState()` in this method. + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @param {ReactReconcileTransaction} transaction + * @optional + */ + componentWillUpdate: SpecPolicy.DEFINE_MANY, + + /** + * Invoked when the component's DOM representation has been updated. + * + * Use this as an opportunity to operate on the DOM when the component has + * been updated. + * + * @param {object} prevProps + * @param {?object} prevState + * @param {?object} prevContext + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidUpdate: SpecPolicy.DEFINE_MANY, + + /** + * Invoked when the component is about to be removed from its parent and have + * its DOM representation destroyed. + * + * Use this as an opportunity to deallocate any external resources. + * + * NOTE: There is no `componentDidUnmount` since your component will have been + * destroyed by that point. + * + * @optional + */ + componentWillUnmount: SpecPolicy.DEFINE_MANY, + + // ==== Advanced methods ==== + + /** + * Updates the component's currently mounted DOM representation. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @internal + * @overridable + */ + updateComponent: SpecPolicy.OVERRIDE_BASE + + }; + + /** + * Mapping from class specification keys to special processing functions. + * + * Although these are declared like instance properties in the specification + * when defining classes using `React.createClass`, they are actually static + * and are accessible on the constructor instead of the prototype. Despite + * being static, they must be defined outside of the "statics" key under + * which all other static methods are defined. + */ + var RESERVED_SPEC_KEYS = { + displayName: function (Constructor, displayName) { + Constructor.displayName = displayName; + }, + mixins: function (Constructor, mixins) { + if (mixins) { + for (var i = 0; i < mixins.length; i++) { + mixSpecIntoComponent(Constructor, mixins[i]); + } + } + }, + childContextTypes: function (Constructor, childContextTypes) { + if (process.env.NODE_ENV !== 'production') { + validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext); + } + Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes); + }, + contextTypes: function (Constructor, contextTypes) { + if (process.env.NODE_ENV !== 'production') { + validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context); + } + Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes); + }, + /** + * Special case getDefaultProps which should move into statics but requires + * automatic merging. + */ + getDefaultProps: function (Constructor, getDefaultProps) { + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps); + } else { + Constructor.getDefaultProps = getDefaultProps; + } + }, + propTypes: function (Constructor, propTypes) { + if (process.env.NODE_ENV !== 'production') { + validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop); + } + Constructor.propTypes = assign({}, Constructor.propTypes, propTypes); + }, + statics: function (Constructor, statics) { + mixStaticSpecIntoComponent(Constructor, statics); + }, + autobind: function () {} }; + + // noop + function validateTypeDef(Constructor, typeDef, location) { + for (var propName in typeDef) { + if (typeDef.hasOwnProperty(propName)) { + // use a warning instead of an invariant so components + // don't show up in prod but not in __DEV__ + process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined; + } + } + } + + function validateMethodOverride(proto, name) { + var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null; + + // Disallow overriding of base class methods unless explicitly allowed. + if (ReactClassMixin.hasOwnProperty(name)) { + !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined; + } + + // Disallow defining methods more than once unless explicitly allowed. + if (proto.hasOwnProperty(name)) { + !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined; + } + } + + /** + * Mixin helper which handles policy validation and reserved + * specification keys when building React classses. + */ + function mixSpecIntoComponent(Constructor, spec) { + if (!spec) { + return; + } + + !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined; + !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined; + + var proto = Constructor.prototype; + + // By handling mixins before any other properties, we ensure the same + // chaining order is applied to methods with DEFINE_MANY policy, whether + // mixins are listed before or after these methods in the spec. + if (spec.hasOwnProperty(MIXINS_KEY)) { + RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); + } + + for (var name in spec) { + if (!spec.hasOwnProperty(name)) { + continue; + } + + if (name === MIXINS_KEY) { + // We have already handled mixins in a special case above. + continue; + } + + var property = spec[name]; + validateMethodOverride(proto, name); + + if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { + RESERVED_SPEC_KEYS[name](Constructor, property); + } else { + // Setup methods on prototype: + // The following member methods should not be automatically bound: + // 1. Expected ReactClass methods (in the "interface"). + // 2. Overridden methods (that were mixed in). + var isReactClassMethod = ReactClassInterface.hasOwnProperty(name); + var isAlreadyDefined = proto.hasOwnProperty(name); + var isFunction = typeof property === 'function'; + var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false; + + if (shouldAutoBind) { + if (!proto.__reactAutoBindMap) { + proto.__reactAutoBindMap = {}; + } + proto.__reactAutoBindMap[name] = property; + proto[name] = property; + } else { + if (isAlreadyDefined) { + var specPolicy = ReactClassInterface[name]; + + // These cases should already be caught by validateMethodOverride. + !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined; + + // For methods which are defined more than once, call the existing + // methods before calling the new property, merging if appropriate. + if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) { + proto[name] = createMergedResultFunction(proto[name], property); + } else if (specPolicy === SpecPolicy.DEFINE_MANY) { + proto[name] = createChainedFunction(proto[name], property); + } + } else { + proto[name] = property; + if (process.env.NODE_ENV !== 'production') { + // Add verbose displayName to the function, which helps when looking + // at profiling tools. + if (typeof property === 'function' && spec.displayName) { + proto[name].displayName = spec.displayName + '_' + name; + } + } + } + } + } + } + } + + function mixStaticSpecIntoComponent(Constructor, statics) { + if (!statics) { + return; + } + for (var name in statics) { + var property = statics[name]; + if (!statics.hasOwnProperty(name)) { + continue; + } + + var isReserved = (name in RESERVED_SPEC_KEYS); + !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined; + + var isInherited = (name in Constructor); + !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined; + Constructor[name] = property; + } + } + + /** + * Merge two objects, but throw if both contain the same key. + * + * @param {object} one The first object, which is mutated. + * @param {object} two The second object + * @return {object} one after it has been mutated to contain everything in two. + */ + function mergeIntoWithNoDuplicateKeys(one, two) { + !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined; + + for (var key in two) { + if (two.hasOwnProperty(key)) { + !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined; + one[key] = two[key]; + } + } + return one; + } + + /** + * Creates a function that invokes two functions and merges their return values. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + function createMergedResultFunction(one, two) { + return function mergedResult() { + var a = one.apply(this, arguments); + var b = two.apply(this, arguments); + if (a == null) { + return b; + } else if (b == null) { + return a; + } + var c = {}; + mergeIntoWithNoDuplicateKeys(c, a); + mergeIntoWithNoDuplicateKeys(c, b); + return c; + }; + } + + /** + * Creates a function that invokes two functions and ignores their return vales. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + function createChainedFunction(one, two) { + return function chainedFunction() { + one.apply(this, arguments); + two.apply(this, arguments); + }; + } + + /** + * Binds a method to the component. + * + * @param {object} component Component whose method is going to be bound. + * @param {function} method Method to be bound. + * @return {function} The bound method. + */ + function bindAutoBindMethod(component, method) { + var boundMethod = method.bind(component); + if (process.env.NODE_ENV !== 'production') { + boundMethod.__reactBoundContext = component; + boundMethod.__reactBoundMethod = method; + boundMethod.__reactBoundArguments = null; + var componentName = component.constructor.displayName; + var _bind = boundMethod.bind; + /* eslint-disable block-scoped-var, no-undef */ + boundMethod.bind = function (newThis) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // User is trying to bind() an autobound method; we effectively will + // ignore the value of "this" that the user is trying to use, so + // let's warn. + if (newThis !== component && newThis !== null) { + process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined; + } else if (!args.length) { + process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined; + return boundMethod; + } + var reboundMethod = _bind.apply(boundMethod, arguments); + reboundMethod.__reactBoundContext = component; + reboundMethod.__reactBoundMethod = method; + reboundMethod.__reactBoundArguments = args; + return reboundMethod; + /* eslint-enable */ + }; + } + return boundMethod; + } + + /** + * Binds all auto-bound methods in a component. + * + * @param {object} component Component whose method is going to be bound. + */ + function bindAutoBindMethods(component) { + for (var autoBindKey in component.__reactAutoBindMap) { + if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) { + var method = component.__reactAutoBindMap[autoBindKey]; + component[autoBindKey] = bindAutoBindMethod(component, method); + } + } + } + + /** + * Add more to the ReactClass base class. These are all legacy features and + * therefore not already part of the modern ReactComponent. + */ + var ReactClassMixin = { + + /** + * TODO: This will be deprecated because state should always keep a consistent + * type signature and the only use case for this, is to avoid that. + */ + replaceState: function (newState, callback) { + this.updater.enqueueReplaceState(this, newState); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }, + + /** + * Checks whether or not this composite component is mounted. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function () { + return this.updater.isMounted(this); + }, + + /** + * Sets a subset of the props. + * + * @param {object} partialProps Subset of the next props. + * @param {?function} callback Called after props are updated. + * @final + * @public + * @deprecated + */ + setProps: function (partialProps, callback) { + if (process.env.NODE_ENV !== 'production') { + warnSetProps(); + } + this.updater.enqueueSetProps(this, partialProps); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }, + + /** + * Replace all the props. + * + * @param {object} newProps Subset of the next props. + * @param {?function} callback Called after props are updated. + * @final + * @public + * @deprecated + */ + replaceProps: function (newProps, callback) { + if (process.env.NODE_ENV !== 'production') { + warnSetProps(); + } + this.updater.enqueueReplaceProps(this, newProps); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + } + }; + + var ReactClassComponent = function () {}; + assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin); + + /** + * Module for creating composite components. + * + * @class ReactClass + */ + var ReactClass = { + + /** + * Creates a composite component class given a class specification. + * + * @param {object} spec Class specification (which must define `render`). + * @return {function} Component constructor function. + * @public + */ + createClass: function (spec) { + var Constructor = function (props, context, updater) { + // This constructor is overridden by mocks. The argument is used + // by mocks to assert on what gets mounted. + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined; + } + + // Wire up auto-binding + if (this.__reactAutoBindMap) { + bindAutoBindMethods(this); + } + + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + + this.state = null; + + // ReactClasses doesn't have constructors. Instead, they use the + // getInitialState and componentWillMount methods for initialization. + + var initialState = this.getInitialState ? this.getInitialState() : null; + if (process.env.NODE_ENV !== 'production') { + // We allow auto-mocks to proceed as if they're returning null. + if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + initialState = null; + } + } + !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined; + + this.state = initialState; + }; + Constructor.prototype = new ReactClassComponent(); + Constructor.prototype.constructor = Constructor; + + injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor)); + + mixSpecIntoComponent(Constructor, spec); + + // Initialize the defaultProps property after all mixins have been merged. + if (Constructor.getDefaultProps) { + Constructor.defaultProps = Constructor.getDefaultProps(); + } + + if (process.env.NODE_ENV !== 'production') { + // This is a tag to indicate that the use of these method names is ok, + // since it's used with createClass. If it's not, then it's likely a + // mistake so we'll warn you to use the static property, property + // initializer or constructor respectively. + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps.isReactClassApproved = {}; + } + if (Constructor.prototype.getInitialState) { + Constructor.prototype.getInitialState.isReactClassApproved = {}; + } + } + + !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined; + process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined; + } + + // Reduce time spent doing lookups by setting these on the prototype. + for (var methodName in ReactClassInterface) { + if (!Constructor.prototype[methodName]) { + Constructor.prototype[methodName] = null; + } + } + + return Constructor; + }, + + injection: { + injectMixin: function (mixin) { + injectedMixins.push(mixin); + } + } + + }; + + module.exports = ReactClass; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 122 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponent + */ + + 'use strict'; + + var ReactNoopUpdateQueue = __webpack_require__(123); + + var canDefineProperty = __webpack_require__(42); + var emptyObject = __webpack_require__(57); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + /** + * Base class helpers for the updating state of a component. + */ + function ReactComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + // We initialize the default updater but the real one gets injected by the + // renderer. + this.updater = updater || ReactNoopUpdateQueue; + } + + ReactComponent.prototype.isReactComponent = {}; + + /** + * Sets a subset of the state. Always use this to mutate + * state. You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * There is no guarantee that calls to `setState` will run synchronously, + * as they may eventually be batched together. You can provide an optional + * callback that will be executed when the call to setState is actually + * completed. + * + * When a function is provided to setState, it will be called at some point in + * the future (not synchronously). It will be called with the up to date + * component arguments (state, props, context). These values can be different + * from this.* because your function may be called after receiveProps but before + * shouldComponentUpdate, and this new state, props, and context will not yet be + * assigned to this. + * + * @param {object|function} partialState Next partial state or function to + * produce next partial state to be merged with current state. + * @param {?function} callback Called after state is updated. + * @final + * @protected + */ + ReactComponent.prototype.setState = function (partialState, callback) { + !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined; + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined; + } + this.updater.enqueueSetState(this, partialState); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }; + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {?function} callback Called after update is complete. + * @final + * @protected + */ + ReactComponent.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this); + if (callback) { + this.updater.enqueueCallback(this, callback); + } + }; + + /** + * Deprecated APIs. These APIs used to exist on classic React classes but since + * we would like to deprecate them, we're not going to move them over to this + * modern base class. Instead, we define a getter that warns if it's accessed. + */ + if (process.env.NODE_ENV !== 'production') { + var deprecatedAPIs = { + getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'], + isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], + replaceProps: ['replaceProps', 'Instead, call render again at the top level.'], + replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'], + setProps: ['setProps', 'Instead, call render again at the top level.'] + }; + var defineDeprecationWarning = function (methodName, info) { + if (canDefineProperty) { + Object.defineProperty(ReactComponent.prototype, methodName, { + get: function () { + process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined; + return undefined; + } + }); + } + }; + for (var fnName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(fnName)) { + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + } + } + } + + module.exports = ReactComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 123 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactNoopUpdateQueue + */ + + 'use strict'; + + var warning = __webpack_require__(24); + + function warnTDZ(publicInstance, callerName) { + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined; + } + } + + /** + * This is the abstract API for an update queue. + */ + var ReactNoopUpdateQueue = { + + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + return false; + }, + + /** + * Enqueue a callback that will be executed after all the pending updates + * have processed. + * + * @param {ReactClass} publicInstance The instance to use as `this` context. + * @param {?function} callback Called after state is updated. + * @internal + */ + enqueueCallback: function (publicInstance, callback) {}, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @internal + */ + enqueueForceUpdate: function (publicInstance) { + warnTDZ(publicInstance, 'forceUpdate'); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState) { + warnTDZ(publicInstance, 'replaceState'); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @internal + */ + enqueueSetState: function (publicInstance, partialState) { + warnTDZ(publicInstance, 'setState'); + }, + + /** + * Sets a subset of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialProps Subset of the next props. + * @internal + */ + enqueueSetProps: function (publicInstance, partialProps) { + warnTDZ(publicInstance, 'setProps'); + }, + + /** + * Replaces all of the props. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} props New props. + * @internal + */ + enqueueReplaceProps: function (publicInstance, props) { + warnTDZ(publicInstance, 'replaceProps'); + } + + }; + + module.exports = ReactNoopUpdateQueue; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 124 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactReconcileTransaction + * @typechecks static-only + */ + + 'use strict'; + + var CallbackQueue = __webpack_require__(54); + var PooledClass = __webpack_require__(55); + var ReactBrowserEventEmitter = __webpack_require__(28); + var ReactDOMFeatureFlags = __webpack_require__(40); + var ReactInputSelection = __webpack_require__(125); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + + /** + * Ensures that, when possible, the selection range (currently selected text + * input) is not disturbed by performing the transaction. + */ + var SELECTION_RESTORATION = { + /** + * @return {Selection} Selection information. + */ + initialize: ReactInputSelection.getSelectionInformation, + /** + * @param {Selection} sel Selection information returned from `initialize`. + */ + close: ReactInputSelection.restoreSelection + }; + + /** + * Suppresses events (blur/focus) that could be inadvertently dispatched due to + * high level DOM manipulations (like temporarily removing a text input from the + * DOM). + */ + var EVENT_SUPPRESSION = { + /** + * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before + * the reconciliation. + */ + initialize: function () { + var currentlyEnabled = ReactBrowserEventEmitter.isEnabled(); + ReactBrowserEventEmitter.setEnabled(false); + return currentlyEnabled; + }, + + /** + * @param {boolean} previouslyEnabled Enabled status of + * `ReactBrowserEventEmitter` before the reconciliation occurred. `close` + * restores the previous value. + */ + close: function (previouslyEnabled) { + ReactBrowserEventEmitter.setEnabled(previouslyEnabled); + } + }; + + /** + * Provides a queue for collecting `componentDidMount` and + * `componentDidUpdate` callbacks during the the transaction. + */ + var ON_DOM_READY_QUEUEING = { + /** + * Initializes the internal `onDOMReady` queue. + */ + initialize: function () { + this.reactMountReady.reset(); + }, + + /** + * After DOM is flushed, invoke all registered `onDOMReady` callbacks. + */ + close: function () { + this.reactMountReady.notifyAll(); + } + }; + + /** + * Executed within the scope of the `Transaction` instance. Consider these as + * being member methods, but with an implied ordering while being isolated from + * each other. + */ + var TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING]; + + /** + * Currently: + * - The order that these are listed in the transaction is critical: + * - Suppresses events. + * - Restores selection range. + * + * Future: + * - Restore document/overflow scroll positions that were unintentionally + * modified via DOM insertions above the top viewport boundary. + * - Implement/integrate with customized constraint based layout system and keep + * track of which dimensions must be remeasured. + * + * @class ReactReconcileTransaction + */ + function ReactReconcileTransaction(forceHTML) { + this.reinitializeTransaction(); + // Only server-side rendering really needs this option (see + // `ReactServerRendering`), but server-side uses + // `ReactServerRenderingTransaction` instead. This option is here so that it's + // accessible and defaults to false when `ReactDOMComponent` and + // `ReactTextComponent` checks it in `mountComponent`.` + this.renderToStaticMarkup = false; + this.reactMountReady = CallbackQueue.getPooled(null); + this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement; + } + + var Mixin = { + /** + * @see Transaction + * @abstract + * @final + * @return {array<object>} List of operation wrap procedures. + * TODO: convert to array<TransactionWrapper> + */ + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + }, + + /** + * @return {object} The queue to collect `onDOMReady` callbacks with. + */ + getReactMountReady: function () { + return this.reactMountReady; + }, + + /** + * `PooledClass` looks for this, and will invoke this before allowing this + * instance to be reused. + */ + destructor: function () { + CallbackQueue.release(this.reactMountReady); + this.reactMountReady = null; + } + }; + + assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin); + + PooledClass.addPoolingTo(ReactReconcileTransaction); + + module.exports = ReactReconcileTransaction; + +/***/ }, +/* 125 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactInputSelection + */ + + 'use strict'; + + var ReactDOMSelection = __webpack_require__(126); + + var containsNode = __webpack_require__(58); + var focusNode = __webpack_require__(94); + var getActiveElement = __webpack_require__(128); + + function isInDocument(node) { + return containsNode(document.documentElement, node); + } + + /** + * @ReactInputSelection: React input selection module. Based on Selection.js, + * but modified to be suitable for react and has a couple of bug fixes (doesn't + * assume buttons have range selections allowed). + * Input selection module for React. + */ + var ReactInputSelection = { + + hasSelectionCapabilities: function (elem) { + var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true'); + }, + + getSelectionInformation: function () { + var focusedElem = getActiveElement(); + return { + focusedElem: focusedElem, + selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null + }; + }, + + /** + * @restoreSelection: If any selection information was potentially lost, + * restore it. This is useful when performing operations that could remove dom + * nodes and place them back in, resulting in focus being lost. + */ + restoreSelection: function (priorSelectionInformation) { + var curFocusedElem = getActiveElement(); + var priorFocusedElem = priorSelectionInformation.focusedElem; + var priorSelectionRange = priorSelectionInformation.selectionRange; + if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) { + if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) { + ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange); + } + focusNode(priorFocusedElem); + } + }, + + /** + * @getSelection: Gets the selection bounds of a focused textarea, input or + * contentEditable node. + * -@input: Look up selection bounds of this input + * -@return {start: selectionStart, end: selectionEnd} + */ + getSelection: function (input) { + var selection; + + if ('selectionStart' in input) { + // Modern browser with input or textarea. + selection = { + start: input.selectionStart, + end: input.selectionEnd + }; + } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) { + // IE8 input. + var range = document.selection.createRange(); + // There can only be one selection per document in IE, so it must + // be in our element. + if (range.parentElement() === input) { + selection = { + start: -range.moveStart('character', -input.value.length), + end: -range.moveEnd('character', -input.value.length) + }; + } + } else { + // Content editable or old IE textarea. + selection = ReactDOMSelection.getOffsets(input); + } + + return selection || { start: 0, end: 0 }; + }, + + /** + * @setSelection: Sets the selection bounds of a textarea or input and focuses + * the input. + * -@input Set selection bounds of this input or textarea + * -@offsets Object of same form that is returned from get* + */ + setSelection: function (input, offsets) { + var start = offsets.start; + var end = offsets.end; + if (typeof end === 'undefined') { + end = start; + } + + if ('selectionStart' in input) { + input.selectionStart = start; + input.selectionEnd = Math.min(end, input.value.length); + } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) { + var range = input.createTextRange(); + range.collapse(true); + range.moveStart('character', start); + range.moveEnd('character', end - start); + range.select(); + } else { + ReactDOMSelection.setOffsets(input, offsets); + } + } + }; + + module.exports = ReactInputSelection; + +/***/ }, +/* 126 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMSelection + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var getNodeForCharacterOffset = __webpack_require__(127); + var getTextContentAccessor = __webpack_require__(74); + + /** + * While `isCollapsed` is available on the Selection object and `collapsed` + * is available on the Range object, IE11 sometimes gets them wrong. + * If the anchor/focus nodes and offsets are the same, the range is collapsed. + */ + function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) { + return anchorNode === focusNode && anchorOffset === focusOffset; + } + + /** + * Get the appropriate anchor and focus node/offset pairs for IE. + * + * The catch here is that IE's selection API doesn't provide information + * about whether the selection is forward or backward, so we have to + * behave as though it's always forward. + * + * IE text differs from modern selection in that it behaves as though + * block elements end with a new line. This means character offsets will + * differ between the two APIs. + * + * @param {DOMElement} node + * @return {object} + */ + function getIEOffsets(node) { + var selection = document.selection; + var selectedRange = selection.createRange(); + var selectedLength = selectedRange.text.length; + + // Duplicate selection so we can move range without breaking user selection. + var fromStart = selectedRange.duplicate(); + fromStart.moveToElementText(node); + fromStart.setEndPoint('EndToStart', selectedRange); + + var startOffset = fromStart.text.length; + var endOffset = startOffset + selectedLength; + + return { + start: startOffset, + end: endOffset + }; + } + + /** + * @param {DOMElement} node + * @return {?object} + */ + function getModernOffsets(node) { + var selection = window.getSelection && window.getSelection(); + + if (!selection || selection.rangeCount === 0) { + return null; + } + + var anchorNode = selection.anchorNode; + var anchorOffset = selection.anchorOffset; + var focusNode = selection.focusNode; + var focusOffset = selection.focusOffset; + + var currentRange = selection.getRangeAt(0); + + // In Firefox, range.startContainer and range.endContainer can be "anonymous + // divs", e.g. the up/down buttons on an <input type="number">. Anonymous + // divs do not seem to expose properties, triggering a "Permission denied + // error" if any of its properties are accessed. The only seemingly possible + // way to avoid erroring is to access a property that typically works for + // non-anonymous divs and catch any error that may otherwise arise. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=208427 + try { + /* eslint-disable no-unused-expressions */ + currentRange.startContainer.nodeType; + currentRange.endContainer.nodeType; + /* eslint-enable no-unused-expressions */ + } catch (e) { + return null; + } + + // If the node and offset values are the same, the selection is collapsed. + // `Selection.isCollapsed` is available natively, but IE sometimes gets + // this value wrong. + var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset); + + var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length; + + var tempRange = currentRange.cloneRange(); + tempRange.selectNodeContents(node); + tempRange.setEnd(currentRange.startContainer, currentRange.startOffset); + + var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset); + + var start = isTempRangeCollapsed ? 0 : tempRange.toString().length; + var end = start + rangeLength; + + // Detect whether the selection is backward. + var detectionRange = document.createRange(); + detectionRange.setStart(anchorNode, anchorOffset); + detectionRange.setEnd(focusNode, focusOffset); + var isBackward = detectionRange.collapsed; + + return { + start: isBackward ? end : start, + end: isBackward ? start : end + }; + } + + /** + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ + function setIEOffsets(node, offsets) { + var range = document.selection.createRange().duplicate(); + var start, end; + + if (typeof offsets.end === 'undefined') { + start = offsets.start; + end = start; + } else if (offsets.start > offsets.end) { + start = offsets.end; + end = offsets.start; + } else { + start = offsets.start; + end = offsets.end; + } + + range.moveToElementText(node); + range.moveStart('character', start); + range.setEndPoint('EndToStart', range); + range.moveEnd('character', end - start); + range.select(); + } + + /** + * In modern non-IE browsers, we can support both forward and backward + * selections. + * + * Note: IE10+ supports the Selection object, but it does not support + * the `extend` method, which means that even in modern IE, it's not possible + * to programatically create a backward selection. Thus, for all IE + * versions, we use the old IE API to create our selections. + * + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ + function setModernOffsets(node, offsets) { + if (!window.getSelection) { + return; + } + + var selection = window.getSelection(); + var length = node[getTextContentAccessor()].length; + var start = Math.min(offsets.start, length); + var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length); + + // IE 11 uses modern selection, but doesn't support the extend method. + // Flip backward selections, so we can set with a single range. + if (!selection.extend && start > end) { + var temp = end; + end = start; + start = temp; + } + + var startMarker = getNodeForCharacterOffset(node, start); + var endMarker = getNodeForCharacterOffset(node, end); + + if (startMarker && endMarker) { + var range = document.createRange(); + range.setStart(startMarker.node, startMarker.offset); + selection.removeAllRanges(); + + if (start > end) { + selection.addRange(range); + selection.extend(endMarker.node, endMarker.offset); + } else { + range.setEnd(endMarker.node, endMarker.offset); + selection.addRange(range); + } + } + } + + var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window); + + var ReactDOMSelection = { + /** + * @param {DOMElement} node + */ + getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets, + + /** + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ + setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets + }; + + module.exports = ReactDOMSelection; + +/***/ }, +/* 127 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getNodeForCharacterOffset + */ + + 'use strict'; + + /** + * Given any node return the first leaf node without children. + * + * @param {DOMElement|DOMTextNode} node + * @return {DOMElement|DOMTextNode} + */ + function getLeafNode(node) { + while (node && node.firstChild) { + node = node.firstChild; + } + return node; + } + + /** + * Get the next sibling within a container. This will walk up the + * DOM if a node's siblings have been exhausted. + * + * @param {DOMElement|DOMTextNode} node + * @return {?DOMElement|DOMTextNode} + */ + function getSiblingNode(node) { + while (node) { + if (node.nextSibling) { + return node.nextSibling; + } + node = node.parentNode; + } + } + + /** + * Get object describing the nodes which contain characters at offset. + * + * @param {DOMElement|DOMTextNode} root + * @param {number} offset + * @return {?object} + */ + function getNodeForCharacterOffset(root, offset) { + var node = getLeafNode(root); + var nodeStart = 0; + var nodeEnd = 0; + + while (node) { + if (node.nodeType === 3) { + nodeEnd = nodeStart + node.textContent.length; + + if (nodeStart <= offset && nodeEnd >= offset) { + return { + node: node, + offset: offset - nodeStart + }; + } + + nodeStart = nodeEnd; + } + + node = getLeafNode(getSiblingNode(node)); + } + } + + module.exports = getNodeForCharacterOffset; + +/***/ }, +/* 128 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getActiveElement + * @typechecks + */ + + /** + * Same as document.activeElement but wraps in a try-catch block. In IE it is + * not safe to call document.activeElement if there is nothing focused. + * + * The activeElement will be null only if the document or document body is not yet defined. + */ + 'use strict'; + + function getActiveElement() /*?DOMElement*/{ + if (typeof document === 'undefined') { + return null; + } + + try { + return document.activeElement || document.body; + } catch (e) { + return document.body; + } + } + + module.exports = getActiveElement; + +/***/ }, +/* 129 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SelectEventPlugin + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventPropagators = __webpack_require__(72); + var ExecutionEnvironment = __webpack_require__(8); + var ReactInputSelection = __webpack_require__(125); + var SyntheticEvent = __webpack_require__(76); + + var getActiveElement = __webpack_require__(128); + var isTextInputElement = __webpack_require__(81); + var keyOf = __webpack_require__(78); + var shallowEqual = __webpack_require__(116); + + var topLevelTypes = EventConstants.topLevelTypes; + + var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11; + + var eventTypes = { + select: { + phasedRegistrationNames: { + bubbled: keyOf({ onSelect: null }), + captured: keyOf({ onSelectCapture: null }) + }, + dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange] + } + }; + + var activeElement = null; + var activeElementID = null; + var lastSelection = null; + var mouseDown = false; + + // Track whether a listener exists for this plugin. If none exist, we do + // not extract events. + var hasListener = false; + var ON_SELECT_KEY = keyOf({ onSelect: null }); + + /** + * Get an object which is a unique representation of the current selection. + * + * The return value will not be consistent across nodes or browsers, but + * two identical selections on the same node will return identical objects. + * + * @param {DOMElement} node + * @return {object} + */ + function getSelection(node) { + if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) { + return { + start: node.selectionStart, + end: node.selectionEnd + }; + } else if (window.getSelection) { + var selection = window.getSelection(); + return { + anchorNode: selection.anchorNode, + anchorOffset: selection.anchorOffset, + focusNode: selection.focusNode, + focusOffset: selection.focusOffset + }; + } else if (document.selection) { + var range = document.selection.createRange(); + return { + parentElement: range.parentElement(), + text: range.text, + top: range.boundingTop, + left: range.boundingLeft + }; + } + } + + /** + * Poll selection to see whether it's changed. + * + * @param {object} nativeEvent + * @return {?SyntheticEvent} + */ + function constructSelectEvent(nativeEvent, nativeEventTarget) { + // Ensure we have the right element, and that the user is not dragging a + // selection (this matches native `select` event behavior). In HTML5, select + // fires only on input and textarea thus if there's no focused element we + // won't dispatch. + if (mouseDown || activeElement == null || activeElement !== getActiveElement()) { + return null; + } + + // Only fire when selection has actually changed. + var currentSelection = getSelection(activeElement); + if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) { + lastSelection = currentSelection; + + var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget); + + syntheticEvent.type = 'select'; + syntheticEvent.target = activeElement; + + EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent); + + return syntheticEvent; + } + + return null; + } + + /** + * This plugin creates an `onSelect` event that normalizes select events + * across form elements. + * + * Supported elements are: + * - input (see `isTextInputElement`) + * - textarea + * - contentEditable + * + * This differs from native browser implementations in the following ways: + * - Fires on contentEditable fields as well as inputs. + * - Fires for collapsed selection. + * - Fires after user input. + */ + var SelectEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + if (!hasListener) { + return null; + } + + switch (topLevelType) { + // Track the input node that has focus. + case topLevelTypes.topFocus: + if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') { + activeElement = topLevelTarget; + activeElementID = topLevelTargetID; + lastSelection = null; + } + break; + case topLevelTypes.topBlur: + activeElement = null; + activeElementID = null; + lastSelection = null; + break; + + // Don't fire the event while the user is dragging. This matches the + // semantics of the native select event. + case topLevelTypes.topMouseDown: + mouseDown = true; + break; + case topLevelTypes.topContextMenu: + case topLevelTypes.topMouseUp: + mouseDown = false; + return constructSelectEvent(nativeEvent, nativeEventTarget); + + // Chrome and IE fire non-standard event when selection is changed (and + // sometimes when it hasn't). IE's event fires out of order with respect + // to key and input events on deletion, so we discard it. + // + // Firefox doesn't support selectionchange, so check selection status + // after each key entry. The selection changes after keydown and before + // keyup, but we check on keydown as well in the case of holding down a + // key, when multiple keydown events are fired but only one keyup is. + // This is also our approach for IE handling, for the reason above. + case topLevelTypes.topSelectionChange: + if (skipSelectionChangeEvent) { + break; + } + // falls through + case topLevelTypes.topKeyDown: + case topLevelTypes.topKeyUp: + return constructSelectEvent(nativeEvent, nativeEventTarget); + } + + return null; + }, + + didPutListener: function (id, registrationName, listener) { + if (registrationName === ON_SELECT_KEY) { + hasListener = true; + } + } + }; + + module.exports = SelectEventPlugin; + +/***/ }, +/* 130 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ServerReactRootIndex + * @typechecks + */ + + 'use strict'; + + /** + * Size of the reactRoot ID space. We generate random numbers for React root + * IDs and if there's a collision the events and DOM update system will + * get confused. In the future we need a way to generate GUIDs but for + * now this will work on a smaller scale. + */ + var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53); + + var ServerReactRootIndex = { + createReactRootIndex: function () { + return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX); + } + }; + + module.exports = ServerReactRootIndex; + +/***/ }, +/* 131 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SimpleEventPlugin + */ + + 'use strict'; + + var EventConstants = __webpack_require__(29); + var EventListener = __webpack_require__(118); + var EventPropagators = __webpack_require__(72); + var ReactMount = __webpack_require__(27); + var SyntheticClipboardEvent = __webpack_require__(132); + var SyntheticEvent = __webpack_require__(76); + var SyntheticFocusEvent = __webpack_require__(133); + var SyntheticKeyboardEvent = __webpack_require__(134); + var SyntheticMouseEvent = __webpack_require__(85); + var SyntheticDragEvent = __webpack_require__(137); + var SyntheticTouchEvent = __webpack_require__(138); + var SyntheticUIEvent = __webpack_require__(86); + var SyntheticWheelEvent = __webpack_require__(139); + + var emptyFunction = __webpack_require__(14); + var getEventCharCode = __webpack_require__(135); + var invariant = __webpack_require__(12); + var keyOf = __webpack_require__(78); + + var topLevelTypes = EventConstants.topLevelTypes; + + var eventTypes = { + abort: { + phasedRegistrationNames: { + bubbled: keyOf({ onAbort: true }), + captured: keyOf({ onAbortCapture: true }) + } + }, + blur: { + phasedRegistrationNames: { + bubbled: keyOf({ onBlur: true }), + captured: keyOf({ onBlurCapture: true }) + } + }, + canPlay: { + phasedRegistrationNames: { + bubbled: keyOf({ onCanPlay: true }), + captured: keyOf({ onCanPlayCapture: true }) + } + }, + canPlayThrough: { + phasedRegistrationNames: { + bubbled: keyOf({ onCanPlayThrough: true }), + captured: keyOf({ onCanPlayThroughCapture: true }) + } + }, + click: { + phasedRegistrationNames: { + bubbled: keyOf({ onClick: true }), + captured: keyOf({ onClickCapture: true }) + } + }, + contextMenu: { + phasedRegistrationNames: { + bubbled: keyOf({ onContextMenu: true }), + captured: keyOf({ onContextMenuCapture: true }) + } + }, + copy: { + phasedRegistrationNames: { + bubbled: keyOf({ onCopy: true }), + captured: keyOf({ onCopyCapture: true }) + } + }, + cut: { + phasedRegistrationNames: { + bubbled: keyOf({ onCut: true }), + captured: keyOf({ onCutCapture: true }) + } + }, + doubleClick: { + phasedRegistrationNames: { + bubbled: keyOf({ onDoubleClick: true }), + captured: keyOf({ onDoubleClickCapture: true }) + } + }, + drag: { + phasedRegistrationNames: { + bubbled: keyOf({ onDrag: true }), + captured: keyOf({ onDragCapture: true }) + } + }, + dragEnd: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragEnd: true }), + captured: keyOf({ onDragEndCapture: true }) + } + }, + dragEnter: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragEnter: true }), + captured: keyOf({ onDragEnterCapture: true }) + } + }, + dragExit: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragExit: true }), + captured: keyOf({ onDragExitCapture: true }) + } + }, + dragLeave: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragLeave: true }), + captured: keyOf({ onDragLeaveCapture: true }) + } + }, + dragOver: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragOver: true }), + captured: keyOf({ onDragOverCapture: true }) + } + }, + dragStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onDragStart: true }), + captured: keyOf({ onDragStartCapture: true }) + } + }, + drop: { + phasedRegistrationNames: { + bubbled: keyOf({ onDrop: true }), + captured: keyOf({ onDropCapture: true }) + } + }, + durationChange: { + phasedRegistrationNames: { + bubbled: keyOf({ onDurationChange: true }), + captured: keyOf({ onDurationChangeCapture: true }) + } + }, + emptied: { + phasedRegistrationNames: { + bubbled: keyOf({ onEmptied: true }), + captured: keyOf({ onEmptiedCapture: true }) + } + }, + encrypted: { + phasedRegistrationNames: { + bubbled: keyOf({ onEncrypted: true }), + captured: keyOf({ onEncryptedCapture: true }) + } + }, + ended: { + phasedRegistrationNames: { + bubbled: keyOf({ onEnded: true }), + captured: keyOf({ onEndedCapture: true }) + } + }, + error: { + phasedRegistrationNames: { + bubbled: keyOf({ onError: true }), + captured: keyOf({ onErrorCapture: true }) + } + }, + focus: { + phasedRegistrationNames: { + bubbled: keyOf({ onFocus: true }), + captured: keyOf({ onFocusCapture: true }) + } + }, + input: { + phasedRegistrationNames: { + bubbled: keyOf({ onInput: true }), + captured: keyOf({ onInputCapture: true }) + } + }, + keyDown: { + phasedRegistrationNames: { + bubbled: keyOf({ onKeyDown: true }), + captured: keyOf({ onKeyDownCapture: true }) + } + }, + keyPress: { + phasedRegistrationNames: { + bubbled: keyOf({ onKeyPress: true }), + captured: keyOf({ onKeyPressCapture: true }) + } + }, + keyUp: { + phasedRegistrationNames: { + bubbled: keyOf({ onKeyUp: true }), + captured: keyOf({ onKeyUpCapture: true }) + } + }, + load: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoad: true }), + captured: keyOf({ onLoadCapture: true }) + } + }, + loadedData: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoadedData: true }), + captured: keyOf({ onLoadedDataCapture: true }) + } + }, + loadedMetadata: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoadedMetadata: true }), + captured: keyOf({ onLoadedMetadataCapture: true }) + } + }, + loadStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onLoadStart: true }), + captured: keyOf({ onLoadStartCapture: true }) + } + }, + // Note: We do not allow listening to mouseOver events. Instead, use the + // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`. + mouseDown: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseDown: true }), + captured: keyOf({ onMouseDownCapture: true }) + } + }, + mouseMove: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseMove: true }), + captured: keyOf({ onMouseMoveCapture: true }) + } + }, + mouseOut: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseOut: true }), + captured: keyOf({ onMouseOutCapture: true }) + } + }, + mouseOver: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseOver: true }), + captured: keyOf({ onMouseOverCapture: true }) + } + }, + mouseUp: { + phasedRegistrationNames: { + bubbled: keyOf({ onMouseUp: true }), + captured: keyOf({ onMouseUpCapture: true }) + } + }, + paste: { + phasedRegistrationNames: { + bubbled: keyOf({ onPaste: true }), + captured: keyOf({ onPasteCapture: true }) + } + }, + pause: { + phasedRegistrationNames: { + bubbled: keyOf({ onPause: true }), + captured: keyOf({ onPauseCapture: true }) + } + }, + play: { + phasedRegistrationNames: { + bubbled: keyOf({ onPlay: true }), + captured: keyOf({ onPlayCapture: true }) + } + }, + playing: { + phasedRegistrationNames: { + bubbled: keyOf({ onPlaying: true }), + captured: keyOf({ onPlayingCapture: true }) + } + }, + progress: { + phasedRegistrationNames: { + bubbled: keyOf({ onProgress: true }), + captured: keyOf({ onProgressCapture: true }) + } + }, + rateChange: { + phasedRegistrationNames: { + bubbled: keyOf({ onRateChange: true }), + captured: keyOf({ onRateChangeCapture: true }) + } + }, + reset: { + phasedRegistrationNames: { + bubbled: keyOf({ onReset: true }), + captured: keyOf({ onResetCapture: true }) + } + }, + scroll: { + phasedRegistrationNames: { + bubbled: keyOf({ onScroll: true }), + captured: keyOf({ onScrollCapture: true }) + } + }, + seeked: { + phasedRegistrationNames: { + bubbled: keyOf({ onSeeked: true }), + captured: keyOf({ onSeekedCapture: true }) + } + }, + seeking: { + phasedRegistrationNames: { + bubbled: keyOf({ onSeeking: true }), + captured: keyOf({ onSeekingCapture: true }) + } + }, + stalled: { + phasedRegistrationNames: { + bubbled: keyOf({ onStalled: true }), + captured: keyOf({ onStalledCapture: true }) + } + }, + submit: { + phasedRegistrationNames: { + bubbled: keyOf({ onSubmit: true }), + captured: keyOf({ onSubmitCapture: true }) + } + }, + suspend: { + phasedRegistrationNames: { + bubbled: keyOf({ onSuspend: true }), + captured: keyOf({ onSuspendCapture: true }) + } + }, + timeUpdate: { + phasedRegistrationNames: { + bubbled: keyOf({ onTimeUpdate: true }), + captured: keyOf({ onTimeUpdateCapture: true }) + } + }, + touchCancel: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchCancel: true }), + captured: keyOf({ onTouchCancelCapture: true }) + } + }, + touchEnd: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchEnd: true }), + captured: keyOf({ onTouchEndCapture: true }) + } + }, + touchMove: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchMove: true }), + captured: keyOf({ onTouchMoveCapture: true }) + } + }, + touchStart: { + phasedRegistrationNames: { + bubbled: keyOf({ onTouchStart: true }), + captured: keyOf({ onTouchStartCapture: true }) + } + }, + volumeChange: { + phasedRegistrationNames: { + bubbled: keyOf({ onVolumeChange: true }), + captured: keyOf({ onVolumeChangeCapture: true }) + } + }, + waiting: { + phasedRegistrationNames: { + bubbled: keyOf({ onWaiting: true }), + captured: keyOf({ onWaitingCapture: true }) + } + }, + wheel: { + phasedRegistrationNames: { + bubbled: keyOf({ onWheel: true }), + captured: keyOf({ onWheelCapture: true }) + } + } + }; + + var topLevelEventsToDispatchConfig = { + topAbort: eventTypes.abort, + topBlur: eventTypes.blur, + topCanPlay: eventTypes.canPlay, + topCanPlayThrough: eventTypes.canPlayThrough, + topClick: eventTypes.click, + topContextMenu: eventTypes.contextMenu, + topCopy: eventTypes.copy, + topCut: eventTypes.cut, + topDoubleClick: eventTypes.doubleClick, + topDrag: eventTypes.drag, + topDragEnd: eventTypes.dragEnd, + topDragEnter: eventTypes.dragEnter, + topDragExit: eventTypes.dragExit, + topDragLeave: eventTypes.dragLeave, + topDragOver: eventTypes.dragOver, + topDragStart: eventTypes.dragStart, + topDrop: eventTypes.drop, + topDurationChange: eventTypes.durationChange, + topEmptied: eventTypes.emptied, + topEncrypted: eventTypes.encrypted, + topEnded: eventTypes.ended, + topError: eventTypes.error, + topFocus: eventTypes.focus, + topInput: eventTypes.input, + topKeyDown: eventTypes.keyDown, + topKeyPress: eventTypes.keyPress, + topKeyUp: eventTypes.keyUp, + topLoad: eventTypes.load, + topLoadedData: eventTypes.loadedData, + topLoadedMetadata: eventTypes.loadedMetadata, + topLoadStart: eventTypes.loadStart, + topMouseDown: eventTypes.mouseDown, + topMouseMove: eventTypes.mouseMove, + topMouseOut: eventTypes.mouseOut, + topMouseOver: eventTypes.mouseOver, + topMouseUp: eventTypes.mouseUp, + topPaste: eventTypes.paste, + topPause: eventTypes.pause, + topPlay: eventTypes.play, + topPlaying: eventTypes.playing, + topProgress: eventTypes.progress, + topRateChange: eventTypes.rateChange, + topReset: eventTypes.reset, + topScroll: eventTypes.scroll, + topSeeked: eventTypes.seeked, + topSeeking: eventTypes.seeking, + topStalled: eventTypes.stalled, + topSubmit: eventTypes.submit, + topSuspend: eventTypes.suspend, + topTimeUpdate: eventTypes.timeUpdate, + topTouchCancel: eventTypes.touchCancel, + topTouchEnd: eventTypes.touchEnd, + topTouchMove: eventTypes.touchMove, + topTouchStart: eventTypes.touchStart, + topVolumeChange: eventTypes.volumeChange, + topWaiting: eventTypes.waiting, + topWheel: eventTypes.wheel + }; + + for (var type in topLevelEventsToDispatchConfig) { + topLevelEventsToDispatchConfig[type].dependencies = [type]; + } + + var ON_CLICK_KEY = keyOf({ onClick: null }); + var onClickListeners = {}; + + var SimpleEventPlugin = { + + eventTypes: eventTypes, + + /** + * @param {string} topLevelType Record from `EventConstants`. + * @param {DOMEventTarget} topLevelTarget The listening component root node. + * @param {string} topLevelTargetID ID of `topLevelTarget`. + * @param {object} nativeEvent Native browser event. + * @return {*} An accumulation of synthetic events. + * @see {EventPluginHub.extractEvents} + */ + extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) { + var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType]; + if (!dispatchConfig) { + return null; + } + var EventConstructor; + switch (topLevelType) { + case topLevelTypes.topAbort: + case topLevelTypes.topCanPlay: + case topLevelTypes.topCanPlayThrough: + case topLevelTypes.topDurationChange: + case topLevelTypes.topEmptied: + case topLevelTypes.topEncrypted: + case topLevelTypes.topEnded: + case topLevelTypes.topError: + case topLevelTypes.topInput: + case topLevelTypes.topLoad: + case topLevelTypes.topLoadedData: + case topLevelTypes.topLoadedMetadata: + case topLevelTypes.topLoadStart: + case topLevelTypes.topPause: + case topLevelTypes.topPlay: + case topLevelTypes.topPlaying: + case topLevelTypes.topProgress: + case topLevelTypes.topRateChange: + case topLevelTypes.topReset: + case topLevelTypes.topSeeked: + case topLevelTypes.topSeeking: + case topLevelTypes.topStalled: + case topLevelTypes.topSubmit: + case topLevelTypes.topSuspend: + case topLevelTypes.topTimeUpdate: + case topLevelTypes.topVolumeChange: + case topLevelTypes.topWaiting: + // HTML Events + // @see http://www.w3.org/TR/html5/index.html#events-0 + EventConstructor = SyntheticEvent; + break; + case topLevelTypes.topKeyPress: + // FireFox creates a keypress event for function keys too. This removes + // the unwanted keypress events. Enter is however both printable and + // non-printable. One would expect Tab to be as well (but it isn't). + if (getEventCharCode(nativeEvent) === 0) { + return null; + } + /* falls through */ + case topLevelTypes.topKeyDown: + case topLevelTypes.topKeyUp: + EventConstructor = SyntheticKeyboardEvent; + break; + case topLevelTypes.topBlur: + case topLevelTypes.topFocus: + EventConstructor = SyntheticFocusEvent; + break; + case topLevelTypes.topClick: + // Firefox creates a click event on right mouse clicks. This removes the + // unwanted click events. + if (nativeEvent.button === 2) { + return null; + } + /* falls through */ + case topLevelTypes.topContextMenu: + case topLevelTypes.topDoubleClick: + case topLevelTypes.topMouseDown: + case topLevelTypes.topMouseMove: + case topLevelTypes.topMouseOut: + case topLevelTypes.topMouseOver: + case topLevelTypes.topMouseUp: + EventConstructor = SyntheticMouseEvent; + break; + case topLevelTypes.topDrag: + case topLevelTypes.topDragEnd: + case topLevelTypes.topDragEnter: + case topLevelTypes.topDragExit: + case topLevelTypes.topDragLeave: + case topLevelTypes.topDragOver: + case topLevelTypes.topDragStart: + case topLevelTypes.topDrop: + EventConstructor = SyntheticDragEvent; + break; + case topLevelTypes.topTouchCancel: + case topLevelTypes.topTouchEnd: + case topLevelTypes.topTouchMove: + case topLevelTypes.topTouchStart: + EventConstructor = SyntheticTouchEvent; + break; + case topLevelTypes.topScroll: + EventConstructor = SyntheticUIEvent; + break; + case topLevelTypes.topWheel: + EventConstructor = SyntheticWheelEvent; + break; + case topLevelTypes.topCopy: + case topLevelTypes.topCut: + case topLevelTypes.topPaste: + EventConstructor = SyntheticClipboardEvent; + break; + } + !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined; + var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget); + EventPropagators.accumulateTwoPhaseDispatches(event); + return event; + }, + + didPutListener: function (id, registrationName, listener) { + // Mobile Safari does not fire properly bubble click events on + // non-interactive elements, which means delegated click listeners do not + // fire. The workaround for this bug involves attaching an empty click + // listener on the target node. + if (registrationName === ON_CLICK_KEY) { + var node = ReactMount.getNode(id); + if (!onClickListeners[id]) { + onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction); + } + } + }, + + willDeleteListener: function (id, registrationName) { + if (registrationName === ON_CLICK_KEY) { + onClickListeners[id].remove(); + delete onClickListeners[id]; + } + } + + }; + + module.exports = SimpleEventPlugin; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 132 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticClipboardEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticEvent = __webpack_require__(76); + + /** + * @interface Event + * @see http://www.w3.org/TR/clipboard-apis/ + */ + var ClipboardEventInterface = { + clipboardData: function (event) { + return 'clipboardData' in event ? event.clipboardData : window.clipboardData; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface); + + module.exports = SyntheticClipboardEvent; + +/***/ }, +/* 133 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticFocusEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + + /** + * @interface FocusEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var FocusEventInterface = { + relatedTarget: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface); + + module.exports = SyntheticFocusEvent; + +/***/ }, +/* 134 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticKeyboardEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + + var getEventCharCode = __webpack_require__(135); + var getEventKey = __webpack_require__(136); + var getEventModifierState = __webpack_require__(87); + + /** + * @interface KeyboardEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var KeyboardEventInterface = { + key: getEventKey, + location: null, + ctrlKey: null, + shiftKey: null, + altKey: null, + metaKey: null, + repeat: null, + locale: null, + getModifierState: getEventModifierState, + // Legacy Interface + charCode: function (event) { + // `charCode` is the result of a KeyPress event and represents the value of + // the actual printable character. + + // KeyPress is deprecated, but its replacement is not yet final and not + // implemented in any major browser. Only KeyPress has charCode. + if (event.type === 'keypress') { + return getEventCharCode(event); + } + return 0; + }, + keyCode: function (event) { + // `keyCode` is the result of a KeyDown/Up event and represents the value of + // physical keyboard key. + + // The actual meaning of the value depends on the users' keyboard layout + // which cannot be detected. Assuming that it is a US keyboard layout + // provides a surprisingly accurate mapping for US and European users. + // Due to this, it is left to the user to implement at this time. + if (event.type === 'keydown' || event.type === 'keyup') { + return event.keyCode; + } + return 0; + }, + which: function (event) { + // `which` is an alias for either `keyCode` or `charCode` depending on the + // type of the event. + if (event.type === 'keypress') { + return getEventCharCode(event); + } + if (event.type === 'keydown' || event.type === 'keyup') { + return event.keyCode; + } + return 0; + } + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface); + + module.exports = SyntheticKeyboardEvent; + +/***/ }, +/* 135 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventCharCode + * @typechecks static-only + */ + + 'use strict'; + + /** + * `charCode` represents the actual "character code" and is safe to use with + * `String.fromCharCode`. As such, only keys that correspond to printable + * characters produce a valid `charCode`, the only exception to this is Enter. + * The Tab-key is considered non-printable and does not have a `charCode`, + * presumably because it does not produce a tab-character in browsers. + * + * @param {object} nativeEvent Native browser event. + * @return {number} Normalized `charCode` property. + */ + function getEventCharCode(nativeEvent) { + var charCode; + var keyCode = nativeEvent.keyCode; + + if ('charCode' in nativeEvent) { + charCode = nativeEvent.charCode; + + // FF does not set `charCode` for the Enter-key, check against `keyCode`. + if (charCode === 0 && keyCode === 13) { + charCode = 13; + } + } else { + // IE8 does not implement `charCode`, but `keyCode` has the correct value. + charCode = keyCode; + } + + // Some non-printable keys are reported in `charCode`/`keyCode`, discard them. + // Must not discard the (non-)printable Enter-key. + if (charCode >= 32 || charCode === 13) { + return charCode; + } + + return 0; + } + + module.exports = getEventCharCode; + +/***/ }, +/* 136 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule getEventKey + * @typechecks static-only + */ + + 'use strict'; + + var getEventCharCode = __webpack_require__(135); + + /** + * Normalization of deprecated HTML5 `key` values + * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names + */ + var normalizeKey = { + 'Esc': 'Escape', + 'Spacebar': ' ', + 'Left': 'ArrowLeft', + 'Up': 'ArrowUp', + 'Right': 'ArrowRight', + 'Down': 'ArrowDown', + 'Del': 'Delete', + 'Win': 'OS', + 'Menu': 'ContextMenu', + 'Apps': 'ContextMenu', + 'Scroll': 'ScrollLock', + 'MozPrintableKey': 'Unidentified' + }; + + /** + * Translation from legacy `keyCode` to HTML5 `key` + * Only special keys supported, all others depend on keyboard layout or browser + * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names + */ + var translateToKey = { + 8: 'Backspace', + 9: 'Tab', + 12: 'Clear', + 13: 'Enter', + 16: 'Shift', + 17: 'Control', + 18: 'Alt', + 19: 'Pause', + 20: 'CapsLock', + 27: 'Escape', + 32: ' ', + 33: 'PageUp', + 34: 'PageDown', + 35: 'End', + 36: 'Home', + 37: 'ArrowLeft', + 38: 'ArrowUp', + 39: 'ArrowRight', + 40: 'ArrowDown', + 45: 'Insert', + 46: 'Delete', + 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6', + 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12', + 144: 'NumLock', + 145: 'ScrollLock', + 224: 'Meta' + }; + + /** + * @param {object} nativeEvent Native browser event. + * @return {string} Normalized `key` property. + */ + function getEventKey(nativeEvent) { + if (nativeEvent.key) { + // Normalize inconsistent values reported by browsers due to + // implementations of a working draft specification. + + // FireFox implements `key` but returns `MozPrintableKey` for all + // printable characters (normalized to `Unidentified`), ignore it. + var key = normalizeKey[nativeEvent.key] || nativeEvent.key; + if (key !== 'Unidentified') { + return key; + } + } + + // Browser does not implement `key`, polyfill as much of it as we can. + if (nativeEvent.type === 'keypress') { + var charCode = getEventCharCode(nativeEvent); + + // The enter-key is technically both printable and non-printable and can + // thus be captured by `keypress`, no other non-printable key should. + return charCode === 13 ? 'Enter' : String.fromCharCode(charCode); + } + if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') { + // While user keyboard layout determines the actual meaning of each + // `keyCode` value, almost all function keys have a universal value. + return translateToKey[nativeEvent.keyCode] || 'Unidentified'; + } + return ''; + } + + module.exports = getEventKey; + +/***/ }, +/* 137 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticDragEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticMouseEvent = __webpack_require__(85); + + /** + * @interface DragEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var DragEventInterface = { + dataTransfer: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface); + + module.exports = SyntheticDragEvent; + +/***/ }, +/* 138 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticTouchEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticUIEvent = __webpack_require__(86); + + var getEventModifierState = __webpack_require__(87); + + /** + * @interface TouchEvent + * @see http://www.w3.org/TR/touch-events/ + */ + var TouchEventInterface = { + touches: null, + targetTouches: null, + changedTouches: null, + altKey: null, + metaKey: null, + ctrlKey: null, + shiftKey: null, + getModifierState: getEventModifierState + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ + function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface); + + module.exports = SyntheticTouchEvent; + +/***/ }, +/* 139 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SyntheticWheelEvent + * @typechecks static-only + */ + + 'use strict'; + + var SyntheticMouseEvent = __webpack_require__(85); + + /** + * @interface WheelEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ + var WheelEventInterface = { + deltaX: function (event) { + return 'deltaX' in event ? event.deltaX : + // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive). + 'wheelDeltaX' in event ? -event.wheelDeltaX : 0; + }, + deltaY: function (event) { + return 'deltaY' in event ? event.deltaY : + // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive). + 'wheelDeltaY' in event ? -event.wheelDeltaY : + // Fallback to `wheelDelta` for IE<9 and normalize (down is positive). + 'wheelDelta' in event ? -event.wheelDelta : 0; + }, + deltaZ: null, + + // Browsers without "deltaMode" is reporting in raw wheel delta where one + // notch on the scroll is always +/- 120, roughly equivalent to pixels. + // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or + // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size. + deltaMode: null + }; + + /** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticMouseEvent} + */ + function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); + } + + SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface); + + module.exports = SyntheticWheelEvent; + +/***/ }, +/* 140 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SVGDOMPropertyConfig + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + + var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE; + + var NS = { + xlink: 'http://www.w3.org/1999/xlink', + xml: 'http://www.w3.org/XML/1998/namespace' + }; + + var SVGDOMPropertyConfig = { + Properties: { + clipPath: MUST_USE_ATTRIBUTE, + cx: MUST_USE_ATTRIBUTE, + cy: MUST_USE_ATTRIBUTE, + d: MUST_USE_ATTRIBUTE, + dx: MUST_USE_ATTRIBUTE, + dy: MUST_USE_ATTRIBUTE, + fill: MUST_USE_ATTRIBUTE, + fillOpacity: MUST_USE_ATTRIBUTE, + fontFamily: MUST_USE_ATTRIBUTE, + fontSize: MUST_USE_ATTRIBUTE, + fx: MUST_USE_ATTRIBUTE, + fy: MUST_USE_ATTRIBUTE, + gradientTransform: MUST_USE_ATTRIBUTE, + gradientUnits: MUST_USE_ATTRIBUTE, + markerEnd: MUST_USE_ATTRIBUTE, + markerMid: MUST_USE_ATTRIBUTE, + markerStart: MUST_USE_ATTRIBUTE, + offset: MUST_USE_ATTRIBUTE, + opacity: MUST_USE_ATTRIBUTE, + patternContentUnits: MUST_USE_ATTRIBUTE, + patternUnits: MUST_USE_ATTRIBUTE, + points: MUST_USE_ATTRIBUTE, + preserveAspectRatio: MUST_USE_ATTRIBUTE, + r: MUST_USE_ATTRIBUTE, + rx: MUST_USE_ATTRIBUTE, + ry: MUST_USE_ATTRIBUTE, + spreadMethod: MUST_USE_ATTRIBUTE, + stopColor: MUST_USE_ATTRIBUTE, + stopOpacity: MUST_USE_ATTRIBUTE, + stroke: MUST_USE_ATTRIBUTE, + strokeDasharray: MUST_USE_ATTRIBUTE, + strokeLinecap: MUST_USE_ATTRIBUTE, + strokeOpacity: MUST_USE_ATTRIBUTE, + strokeWidth: MUST_USE_ATTRIBUTE, + textAnchor: MUST_USE_ATTRIBUTE, + transform: MUST_USE_ATTRIBUTE, + version: MUST_USE_ATTRIBUTE, + viewBox: MUST_USE_ATTRIBUTE, + x1: MUST_USE_ATTRIBUTE, + x2: MUST_USE_ATTRIBUTE, + x: MUST_USE_ATTRIBUTE, + xlinkActuate: MUST_USE_ATTRIBUTE, + xlinkArcrole: MUST_USE_ATTRIBUTE, + xlinkHref: MUST_USE_ATTRIBUTE, + xlinkRole: MUST_USE_ATTRIBUTE, + xlinkShow: MUST_USE_ATTRIBUTE, + xlinkTitle: MUST_USE_ATTRIBUTE, + xlinkType: MUST_USE_ATTRIBUTE, + xmlBase: MUST_USE_ATTRIBUTE, + xmlLang: MUST_USE_ATTRIBUTE, + xmlSpace: MUST_USE_ATTRIBUTE, + y1: MUST_USE_ATTRIBUTE, + y2: MUST_USE_ATTRIBUTE, + y: MUST_USE_ATTRIBUTE + }, + DOMAttributeNamespaces: { + xlinkActuate: NS.xlink, + xlinkArcrole: NS.xlink, + xlinkHref: NS.xlink, + xlinkRole: NS.xlink, + xlinkShow: NS.xlink, + xlinkTitle: NS.xlink, + xlinkType: NS.xlink, + xmlBase: NS.xml, + xmlLang: NS.xml, + xmlSpace: NS.xml + }, + DOMAttributeNames: { + clipPath: 'clip-path', + fillOpacity: 'fill-opacity', + fontFamily: 'font-family', + fontSize: 'font-size', + gradientTransform: 'gradientTransform', + gradientUnits: 'gradientUnits', + markerEnd: 'marker-end', + markerMid: 'marker-mid', + markerStart: 'marker-start', + patternContentUnits: 'patternContentUnits', + patternUnits: 'patternUnits', + preserveAspectRatio: 'preserveAspectRatio', + spreadMethod: 'spreadMethod', + stopColor: 'stop-color', + stopOpacity: 'stop-opacity', + strokeDasharray: 'stroke-dasharray', + strokeLinecap: 'stroke-linecap', + strokeOpacity: 'stroke-opacity', + strokeWidth: 'stroke-width', + textAnchor: 'text-anchor', + viewBox: 'viewBox', + xlinkActuate: 'xlink:actuate', + xlinkArcrole: 'xlink:arcrole', + xlinkHref: 'xlink:href', + xlinkRole: 'xlink:role', + xlinkShow: 'xlink:show', + xlinkTitle: 'xlink:title', + xlinkType: 'xlink:type', + xmlBase: 'xml:base', + xmlLang: 'xml:lang', + xmlSpace: 'xml:space' + } + }; + + module.exports = SVGDOMPropertyConfig; + +/***/ }, +/* 141 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultPerf + * @typechecks static-only + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(22); + var ReactDefaultPerfAnalysis = __webpack_require__(142); + var ReactMount = __webpack_require__(27); + var ReactPerf = __webpack_require__(17); + + var performanceNow = __webpack_require__(143); + + function roundFloat(val) { + return Math.floor(val * 100) / 100; + } + + function addValue(obj, key, val) { + obj[key] = (obj[key] || 0) + val; + } + + var ReactDefaultPerf = { + _allMeasurements: [], // last item in the list is the current one + _mountStack: [0], + _injected: false, + + start: function () { + if (!ReactDefaultPerf._injected) { + ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure); + } + + ReactDefaultPerf._allMeasurements.length = 0; + ReactPerf.enableMeasure = true; + }, + + stop: function () { + ReactPerf.enableMeasure = false; + }, + + getLastMeasurements: function () { + return ReactDefaultPerf._allMeasurements; + }, + + printExclusive: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements); + console.table(summary.map(function (item) { + return { + 'Component class name': item.componentName, + 'Total inclusive time (ms)': roundFloat(item.inclusive), + 'Exclusive mount time (ms)': roundFloat(item.exclusive), + 'Exclusive render time (ms)': roundFloat(item.render), + 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count), + 'Render time per instance (ms)': roundFloat(item.render / item.count), + 'Instances': item.count + }; + })); + // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct + // number. + }, + + printInclusive: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements); + console.table(summary.map(function (item) { + return { + 'Owner > component': item.componentName, + 'Inclusive time (ms)': roundFloat(item.time), + 'Instances': item.count + }; + })); + console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'); + }, + + getMeasurementsSummaryMap: function (measurements) { + var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true); + return summary.map(function (item) { + return { + 'Owner > component': item.componentName, + 'Wasted time (ms)': item.time, + 'Instances': item.count + }; + }); + }, + + printWasted: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements)); + console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'); + }, + + printDOM: function (measurements) { + measurements = measurements || ReactDefaultPerf._allMeasurements; + var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements); + console.table(summary.map(function (item) { + var result = {}; + result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id; + result.type = item.type; + result.args = JSON.stringify(item.args); + return result; + })); + console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'); + }, + + _recordWrite: function (id, fnName, totalTime, args) { + // TODO: totalTime isn't that useful since it doesn't count paints/reflows + var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes; + writes[id] = writes[id] || []; + writes[id].push({ + type: fnName, + time: totalTime, + args: args + }); + }, + + measure: function (moduleName, fnName, func) { + return function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var totalTime; + var rv; + var start; + + if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') { + // A "measurement" is a set of metrics recorded for each flush. We want + // to group the metrics for a given flush together so we can look at the + // components that rendered and the DOM operations that actually + // happened to determine the amount of "wasted work" performed. + ReactDefaultPerf._allMeasurements.push({ + exclusive: {}, + inclusive: {}, + render: {}, + counts: {}, + writes: {}, + displayNames: {}, + totalTime: 0, + created: {} + }); + start = performanceNow(); + rv = func.apply(this, args); + ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start; + return rv; + } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') { + start = performanceNow(); + rv = func.apply(this, args); + totalTime = performanceNow() - start; + + if (fnName === '_mountImageIntoNode') { + var mountID = ReactMount.getID(args[1]); + ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]); + } else if (fnName === 'dangerouslyProcessChildrenUpdates') { + // special format + args[0].forEach(function (update) { + var writeArgs = {}; + if (update.fromIndex !== null) { + writeArgs.fromIndex = update.fromIndex; + } + if (update.toIndex !== null) { + writeArgs.toIndex = update.toIndex; + } + if (update.textContent !== null) { + writeArgs.textContent = update.textContent; + } + if (update.markupIndex !== null) { + writeArgs.markup = args[1][update.markupIndex]; + } + ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs); + }); + } else { + // basic format + var id = args[0]; + if (typeof id === 'object') { + id = ReactMount.getID(args[0]); + } + ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1)); + } + return rv; + } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()? + fnName === '_renderValidatedComponent')) { + + if (this._currentElement.type === ReactMount.TopLevelWrapper) { + return func.apply(this, args); + } + + var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID; + var isRender = fnName === '_renderValidatedComponent'; + var isMount = fnName === 'mountComponent'; + + var mountStack = ReactDefaultPerf._mountStack; + var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1]; + + if (isRender) { + addValue(entry.counts, rootNodeID, 1); + } else if (isMount) { + entry.created[rootNodeID] = true; + mountStack.push(0); + } + + start = performanceNow(); + rv = func.apply(this, args); + totalTime = performanceNow() - start; + + if (isRender) { + addValue(entry.render, rootNodeID, totalTime); + } else if (isMount) { + var subMountTime = mountStack.pop(); + mountStack[mountStack.length - 1] += totalTime; + addValue(entry.exclusive, rootNodeID, totalTime - subMountTime); + addValue(entry.inclusive, rootNodeID, totalTime); + } else { + addValue(entry.inclusive, rootNodeID, totalTime); + } + + entry.displayNames[rootNodeID] = { + current: this.getName(), + owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>' + }; + + return rv; + } else { + return func.apply(this, args); + } + }; + } + }; + + module.exports = ReactDefaultPerf; + +/***/ }, +/* 142 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDefaultPerfAnalysis + */ + + 'use strict'; + + var assign = __webpack_require__(38); + + // Don't try to save users less than 1.2ms (a number I made up) + var DONT_CARE_THRESHOLD = 1.2; + var DOM_OPERATION_TYPES = { + '_mountImageIntoNode': 'set innerHTML', + INSERT_MARKUP: 'set innerHTML', + MOVE_EXISTING: 'move', + REMOVE_NODE: 'remove', + SET_MARKUP: 'set innerHTML', + TEXT_CONTENT: 'set textContent', + 'setValueForProperty': 'update attribute', + 'setValueForAttribute': 'update attribute', + 'deleteValueForProperty': 'remove attribute', + 'dangerouslyReplaceNodeWithMarkupByID': 'replace' + }; + + function getTotalTime(measurements) { + // TODO: return number of DOM ops? could be misleading. + // TODO: measure dropped frames after reconcile? + // TODO: log total time of each reconcile and the top-level component + // class that triggered it. + var totalTime = 0; + for (var i = 0; i < measurements.length; i++) { + var measurement = measurements[i]; + totalTime += measurement.totalTime; + } + return totalTime; + } + + function getDOMSummary(measurements) { + var items = []; + measurements.forEach(function (measurement) { + Object.keys(measurement.writes).forEach(function (id) { + measurement.writes[id].forEach(function (write) { + items.push({ + id: id, + type: DOM_OPERATION_TYPES[write.type] || write.type, + args: write.args + }); + }); + }); + }); + return items; + } + + function getExclusiveSummary(measurements) { + var candidates = {}; + var displayName; + + for (var i = 0; i < measurements.length; i++) { + var measurement = measurements[i]; + var allIDs = assign({}, measurement.exclusive, measurement.inclusive); + + for (var id in allIDs) { + displayName = measurement.displayNames[id].current; + + candidates[displayName] = candidates[displayName] || { + componentName: displayName, + inclusive: 0, + exclusive: 0, + render: 0, + count: 0 + }; + if (measurement.render[id]) { + candidates[displayName].render += measurement.render[id]; + } + if (measurement.exclusive[id]) { + candidates[displayName].exclusive += measurement.exclusive[id]; + } + if (measurement.inclusive[id]) { + candidates[displayName].inclusive += measurement.inclusive[id]; + } + if (measurement.counts[id]) { + candidates[displayName].count += measurement.counts[id]; + } + } + } + + // Now make a sorted array with the results. + var arr = []; + for (displayName in candidates) { + if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) { + arr.push(candidates[displayName]); + } + } + + arr.sort(function (a, b) { + return b.exclusive - a.exclusive; + }); + + return arr; + } + + function getInclusiveSummary(measurements, onlyClean) { + var candidates = {}; + var inclusiveKey; + + for (var i = 0; i < measurements.length; i++) { + var measurement = measurements[i]; + var allIDs = assign({}, measurement.exclusive, measurement.inclusive); + var cleanComponents; + + if (onlyClean) { + cleanComponents = getUnchangedComponents(measurement); + } + + for (var id in allIDs) { + if (onlyClean && !cleanComponents[id]) { + continue; + } + + var displayName = measurement.displayNames[id]; + + // Inclusive time is not useful for many components without knowing where + // they are instantiated. So we aggregate inclusive time with both the + // owner and current displayName as the key. + inclusiveKey = displayName.owner + ' > ' + displayName.current; + + candidates[inclusiveKey] = candidates[inclusiveKey] || { + componentName: inclusiveKey, + time: 0, + count: 0 + }; + + if (measurement.inclusive[id]) { + candidates[inclusiveKey].time += measurement.inclusive[id]; + } + if (measurement.counts[id]) { + candidates[inclusiveKey].count += measurement.counts[id]; + } + } + } + + // Now make a sorted array with the results. + var arr = []; + for (inclusiveKey in candidates) { + if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) { + arr.push(candidates[inclusiveKey]); + } + } + + arr.sort(function (a, b) { + return b.time - a.time; + }); + + return arr; + } + + function getUnchangedComponents(measurement) { + // For a given reconcile, look at which components did not actually + // render anything to the DOM and return a mapping of their ID to + // the amount of time it took to render the entire subtree. + var cleanComponents = {}; + var dirtyLeafIDs = Object.keys(measurement.writes); + var allIDs = assign({}, measurement.exclusive, measurement.inclusive); + + for (var id in allIDs) { + var isDirty = false; + // For each component that rendered, see if a component that triggered + // a DOM op is in its subtree. + for (var i = 0; i < dirtyLeafIDs.length; i++) { + if (dirtyLeafIDs[i].indexOf(id) === 0) { + isDirty = true; + break; + } + } + // check if component newly created + if (measurement.created[id]) { + isDirty = true; + } + if (!isDirty && measurement.counts[id] > 0) { + cleanComponents[id] = true; + } + } + return cleanComponents; + } + + var ReactDefaultPerfAnalysis = { + getExclusiveSummary: getExclusiveSummary, + getInclusiveSummary: getInclusiveSummary, + getDOMSummary: getDOMSummary, + getTotalTime: getTotalTime + }; + + module.exports = ReactDefaultPerfAnalysis; + +/***/ }, +/* 143 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule performanceNow + * @typechecks + */ + + 'use strict'; + + var performance = __webpack_require__(144); + var curPerformance = performance; + + /** + * Detect if we can use `window.performance.now()` and gracefully fallback to + * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now + * because of Facebook's testing infrastructure. + */ + if (!curPerformance || !curPerformance.now) { + curPerformance = Date; + } + + var performanceNow = curPerformance.now.bind(curPerformance); + + module.exports = performanceNow; + +/***/ }, +/* 144 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule performance + * @typechecks + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(8); + + var performance; + + if (ExecutionEnvironment.canUseDOM) { + performance = window.performance || window.msPerformance || window.webkitPerformance; + } + + module.exports = performance || {}; + +/***/ }, +/* 145 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactVersion + */ + + 'use strict'; + + module.exports = '0.14.3'; + +/***/ }, +/* 146 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule renderSubtreeIntoContainer + */ + + 'use strict'; + + var ReactMount = __webpack_require__(27); + + module.exports = ReactMount.renderSubtreeIntoContainer; + +/***/ }, +/* 147 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(148); + + +/***/ }, +/* 148 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule React + */ + + 'use strict'; + + var ReactDOM = __webpack_require__(2); + var ReactDOMServer = __webpack_require__(149); + var ReactIsomorphic = __webpack_require__(153); + + var assign = __webpack_require__(38); + var deprecated = __webpack_require__(158); + + // `version` will be added here by ReactIsomorphic. + var React = {}; + + assign(React, ReactIsomorphic); + + assign(React, { + // ReactDOM + findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode), + render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render), + unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode), + + // ReactDOMServer + renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString), + renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup) + }); + + React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM; + React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer; + + module.exports = React; + +/***/ }, +/* 149 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMServer + */ + + 'use strict'; + + var ReactDefaultInjection = __webpack_require__(70); + var ReactServerRendering = __webpack_require__(150); + var ReactVersion = __webpack_require__(145); + + ReactDefaultInjection.inject(); + + var ReactDOMServer = { + renderToString: ReactServerRendering.renderToString, + renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup, + version: ReactVersion + }; + + module.exports = ReactDOMServer; + +/***/ }, +/* 150 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @typechecks static-only + * @providesModule ReactServerRendering + */ + 'use strict'; + + var ReactDefaultBatchingStrategy = __webpack_require__(91); + var ReactElement = __webpack_require__(41); + var ReactInstanceHandles = __webpack_require__(44); + var ReactMarkupChecksum = __webpack_require__(47); + var ReactServerBatchingStrategy = __webpack_require__(151); + var ReactServerRenderingTransaction = __webpack_require__(152); + var ReactUpdates = __webpack_require__(53); + + var emptyObject = __webpack_require__(57); + var instantiateReactComponent = __webpack_require__(61); + var invariant = __webpack_require__(12); + + /** + * @param {ReactElement} element + * @return {string} the HTML markup + */ + function renderToString(element) { + !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined; + + var transaction; + try { + ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy); + + var id = ReactInstanceHandles.createReactRootID(); + transaction = ReactServerRenderingTransaction.getPooled(false); + + return transaction.perform(function () { + var componentInstance = instantiateReactComponent(element, null); + var markup = componentInstance.mountComponent(id, transaction, emptyObject); + return ReactMarkupChecksum.addChecksumToMarkup(markup); + }, null); + } finally { + ReactServerRenderingTransaction.release(transaction); + // Revert to the DOM batching strategy since these two renderers + // currently share these stateful modules. + ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); + } + } + + /** + * @param {ReactElement} element + * @return {string} the HTML markup, without the extra React ID and checksum + * (for generating static pages) + */ + function renderToStaticMarkup(element) { + !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined; + + var transaction; + try { + ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy); + + var id = ReactInstanceHandles.createReactRootID(); + transaction = ReactServerRenderingTransaction.getPooled(true); + + return transaction.perform(function () { + var componentInstance = instantiateReactComponent(element, null); + return componentInstance.mountComponent(id, transaction, emptyObject); + }, null); + } finally { + ReactServerRenderingTransaction.release(transaction); + // Revert to the DOM batching strategy since these two renderers + // currently share these stateful modules. + ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy); + } + } + + module.exports = { + renderToString: renderToString, + renderToStaticMarkup: renderToStaticMarkup + }; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 151 */ +/***/ function(module, exports) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactServerBatchingStrategy + * @typechecks + */ + + 'use strict'; + + var ReactServerBatchingStrategy = { + isBatchingUpdates: false, + batchedUpdates: function (callback) { + // Don't do anything here. During the server rendering we don't want to + // schedule any updates. We will simply ignore them. + } + }; + + module.exports = ReactServerBatchingStrategy; + +/***/ }, +/* 152 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactServerRenderingTransaction + * @typechecks + */ + + 'use strict'; + + var PooledClass = __webpack_require__(55); + var CallbackQueue = __webpack_require__(54); + var Transaction = __webpack_require__(56); + + var assign = __webpack_require__(38); + var emptyFunction = __webpack_require__(14); + + /** + * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks + * during the performing of the transaction. + */ + var ON_DOM_READY_QUEUEING = { + /** + * Initializes the internal `onDOMReady` queue. + */ + initialize: function () { + this.reactMountReady.reset(); + }, + + close: emptyFunction + }; + + /** + * Executed within the scope of the `Transaction` instance. Consider these as + * being member methods, but with an implied ordering while being isolated from + * each other. + */ + var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING]; + + /** + * @class ReactServerRenderingTransaction + * @param {boolean} renderToStaticMarkup + */ + function ReactServerRenderingTransaction(renderToStaticMarkup) { + this.reinitializeTransaction(); + this.renderToStaticMarkup = renderToStaticMarkup; + this.reactMountReady = CallbackQueue.getPooled(null); + this.useCreateElement = false; + } + + var Mixin = { + /** + * @see Transaction + * @abstract + * @final + * @return {array} Empty list of operation wrap procedures. + */ + getTransactionWrappers: function () { + return TRANSACTION_WRAPPERS; + }, + + /** + * @return {object} The queue to collect `onDOMReady` callbacks with. + */ + getReactMountReady: function () { + return this.reactMountReady; + }, + + /** + * `PooledClass` looks for this, and will invoke this before allowing this + * instance to be reused. + */ + destructor: function () { + CallbackQueue.release(this.reactMountReady); + this.reactMountReady = null; + } + }; + + assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin); + + PooledClass.addPoolingTo(ReactServerRenderingTransaction); + + module.exports = ReactServerRenderingTransaction; + +/***/ }, +/* 153 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactIsomorphic + */ + + 'use strict'; + + var ReactChildren = __webpack_require__(109); + var ReactComponent = __webpack_require__(122); + var ReactClass = __webpack_require__(121); + var ReactDOMFactories = __webpack_require__(154); + var ReactElement = __webpack_require__(41); + var ReactElementValidator = __webpack_require__(155); + var ReactPropTypes = __webpack_require__(106); + var ReactVersion = __webpack_require__(145); + + var assign = __webpack_require__(38); + var onlyChild = __webpack_require__(157); + + var createElement = ReactElement.createElement; + var createFactory = ReactElement.createFactory; + var cloneElement = ReactElement.cloneElement; + + if (process.env.NODE_ENV !== 'production') { + createElement = ReactElementValidator.createElement; + createFactory = ReactElementValidator.createFactory; + cloneElement = ReactElementValidator.cloneElement; + } + + var React = { + + // Modern + + Children: { + map: ReactChildren.map, + forEach: ReactChildren.forEach, + count: ReactChildren.count, + toArray: ReactChildren.toArray, + only: onlyChild + }, + + Component: ReactComponent, + + createElement: createElement, + cloneElement: cloneElement, + isValidElement: ReactElement.isValidElement, + + // Classic + + PropTypes: ReactPropTypes, + createClass: ReactClass.createClass, + createFactory: createFactory, + createMixin: function (mixin) { + // Currently a noop. Will be used to validate and trace mixins. + return mixin; + }, + + // This looks DOM specific but these are actually isomorphic helpers + // since they are just generating DOM strings. + DOM: ReactDOMFactories, + + version: ReactVersion, + + // Hook for JSX spread, don't use this for anything else. + __spread: assign + }; + + module.exports = React; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 154 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMFactories + * @typechecks static-only + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactElementValidator = __webpack_require__(155); + + var mapObject = __webpack_require__(156); + + /** + * Create a factory that creates HTML tag elements. + * + * @param {string} tag Tag name (e.g. `div`). + * @private + */ + function createDOMFactory(tag) { + if (process.env.NODE_ENV !== 'production') { + return ReactElementValidator.createFactory(tag); + } + return ReactElement.createFactory(tag); + } + + /** + * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes. + * This is also accessible via `React.DOM`. + * + * @public + */ + var ReactDOMFactories = mapObject({ + a: 'a', + abbr: 'abbr', + address: 'address', + area: 'area', + article: 'article', + aside: 'aside', + audio: 'audio', + b: 'b', + base: 'base', + bdi: 'bdi', + bdo: 'bdo', + big: 'big', + blockquote: 'blockquote', + body: 'body', + br: 'br', + button: 'button', + canvas: 'canvas', + caption: 'caption', + cite: 'cite', + code: 'code', + col: 'col', + colgroup: 'colgroup', + data: 'data', + datalist: 'datalist', + dd: 'dd', + del: 'del', + details: 'details', + dfn: 'dfn', + dialog: 'dialog', + div: 'div', + dl: 'dl', + dt: 'dt', + em: 'em', + embed: 'embed', + fieldset: 'fieldset', + figcaption: 'figcaption', + figure: 'figure', + footer: 'footer', + form: 'form', + h1: 'h1', + h2: 'h2', + h3: 'h3', + h4: 'h4', + h5: 'h5', + h6: 'h6', + head: 'head', + header: 'header', + hgroup: 'hgroup', + hr: 'hr', + html: 'html', + i: 'i', + iframe: 'iframe', + img: 'img', + input: 'input', + ins: 'ins', + kbd: 'kbd', + keygen: 'keygen', + label: 'label', + legend: 'legend', + li: 'li', + link: 'link', + main: 'main', + map: 'map', + mark: 'mark', + menu: 'menu', + menuitem: 'menuitem', + meta: 'meta', + meter: 'meter', + nav: 'nav', + noscript: 'noscript', + object: 'object', + ol: 'ol', + optgroup: 'optgroup', + option: 'option', + output: 'output', + p: 'p', + param: 'param', + picture: 'picture', + pre: 'pre', + progress: 'progress', + q: 'q', + rp: 'rp', + rt: 'rt', + ruby: 'ruby', + s: 's', + samp: 'samp', + script: 'script', + section: 'section', + select: 'select', + small: 'small', + source: 'source', + span: 'span', + strong: 'strong', + style: 'style', + sub: 'sub', + summary: 'summary', + sup: 'sup', + table: 'table', + tbody: 'tbody', + td: 'td', + textarea: 'textarea', + tfoot: 'tfoot', + th: 'th', + thead: 'thead', + time: 'time', + title: 'title', + tr: 'tr', + track: 'track', + u: 'u', + ul: 'ul', + 'var': 'var', + video: 'video', + wbr: 'wbr', + + // SVG + circle: 'circle', + clipPath: 'clipPath', + defs: 'defs', + ellipse: 'ellipse', + g: 'g', + image: 'image', + line: 'line', + linearGradient: 'linearGradient', + mask: 'mask', + path: 'path', + pattern: 'pattern', + polygon: 'polygon', + polyline: 'polyline', + radialGradient: 'radialGradient', + rect: 'rect', + stop: 'stop', + svg: 'svg', + text: 'text', + tspan: 'tspan' + + }, createDOMFactory); + + module.exports = ReactDOMFactories; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 155 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactElementValidator + */ + + /** + * ReactElementValidator provides a wrapper around a element factory + * which validates the props passed to the element. This is intended to be + * used only in DEV and could be replaced by a static type checker for languages + * that support it. + */ + + 'use strict'; + + var ReactElement = __webpack_require__(41); + var ReactPropTypeLocations = __webpack_require__(64); + var ReactPropTypeLocationNames = __webpack_require__(65); + var ReactCurrentOwner = __webpack_require__(4); + + var canDefineProperty = __webpack_require__(42); + var getIteratorFn = __webpack_require__(107); + var invariant = __webpack_require__(12); + var warning = __webpack_require__(24); + + function getDeclarationErrorAddendum() { + if (ReactCurrentOwner.current) { + var name = ReactCurrentOwner.current.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + } + + /** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + var ownerHasKeyUseWarning = {}; + + var loggedTypeFailures = {}; + + /** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + function validateExplicitKey(element, parentType) { + if (!element._store || element._store.validated || element.key != null) { + return; + } + element._store.validated = true; + + var addenda = getAddendaForKeyUse('uniqueKey', element, parentType); + if (addenda === null) { + // we already showed the warning + return; + } + process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined; + } + + /** + * Shared warning and monitoring code for the key warnings. + * + * @internal + * @param {string} messageType A key used for de-duping warnings. + * @param {ReactElement} element Component that requires a key. + * @param {*} parentType element's parent's type. + * @returns {?object} A set of addenda to use in the warning message, or null + * if the warning has already been shown before (and shouldn't be shown again). + */ + function getAddendaForKeyUse(messageType, element, parentType) { + var addendum = getDeclarationErrorAddendum(); + if (!addendum) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + if (parentName) { + addendum = ' Check the top-level render call using <' + parentName + '>.'; + } + } + + var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {}); + if (memoizer[addendum]) { + return null; + } + memoizer[addendum] = true; + + var addenda = { + parentOrOwner: addendum, + url: ' See https://fb.me/react-warning-keys for more information.', + childOwner: null + }; + + // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + if (element && element._owner && element._owner !== ReactCurrentOwner.current) { + // Give the component that originally created this child. + addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.'; + } + + return addenda; + } + + /** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + function validateChildKeys(node, parentType) { + if (typeof node !== 'object') { + return; + } + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + if (ReactElement.isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (ReactElement.isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + // Entry iterators provide implicit keys. + if (iteratorFn) { + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + while (!(step = iterator.next()).done) { + if (ReactElement.isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } + + /** + * Assert that the props are valid + * + * @param {string} componentName Name of the component for error messages. + * @param {object} propTypes Map of prop name to a ReactPropType + * @param {object} props + * @param {string} location e.g. "prop", "context", "child context" + * @private + */ + function checkPropTypes(componentName, propTypes, props, location) { + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined; + error = propTypes[propName](props, propName, componentName, location); + } catch (ex) { + error = ex; + } + process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined; + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var addendum = getDeclarationErrorAddendum(); + process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined; + } + } + } + } + + /** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + function validatePropTypes(element) { + var componentClass = element.type; + if (typeof componentClass !== 'function') { + return; + } + var name = componentClass.displayName || componentClass.name; + if (componentClass.propTypes) { + checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop); + } + if (typeof componentClass.getDefaultProps === 'function') { + process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined; + } + } + + var ReactElementValidator = { + + createElement: function (type, props, children) { + var validType = typeof type === 'string' || typeof type === 'function'; + // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined; + + var element = ReactElement.createElement.apply(this, arguments); + + // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + if (element == null) { + return element; + } + + // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + if (validType) { + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + validatePropTypes(element); + + return element; + }, + + createFactory: function (type) { + var validatedFactory = ReactElementValidator.createElement.bind(null, type); + // Legacy hook TODO: Warn if this is accessed + validatedFactory.type = type; + + if (process.env.NODE_ENV !== 'production') { + if (canDefineProperty) { + Object.defineProperty(validatedFactory, 'type', { + enumerable: false, + get: function () { + process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined; + Object.defineProperty(this, 'type', { + value: type + }); + return type; + } + }); + } + } + + return validatedFactory; + }, + + cloneElement: function (element, props, children) { + var newElement = ReactElement.cloneElement.apply(this, arguments); + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], newElement.type); + } + validatePropTypes(newElement); + return newElement; + } + + }; + + module.exports = ReactElementValidator; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 156 */ +/***/ function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule mapObject + */ + + 'use strict'; + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + /** + * Executes the provided `callback` once for each enumerable own property in the + * object and constructs a new object from the results. The `callback` is + * invoked with three arguments: + * + * - the property value + * - the property name + * - the object being traversed + * + * Properties that are added after the call to `mapObject` will not be visited + * by `callback`. If the values of existing properties are changed, the value + * passed to `callback` will be the value at the time `mapObject` visits them. + * Properties that are deleted before being visited are not visited. + * + * @grep function objectMap() + * @grep function objMap() + * + * @param {?object} object + * @param {function} callback + * @param {*} context + * @return {?object} + */ + function mapObject(object, callback, context) { + if (!object) { + return null; + } + var result = {}; + for (var name in object) { + if (hasOwnProperty.call(object, name)) { + result[name] = callback.call(context, object[name], name, object); + } + } + return result; + } + + module.exports = mapObject; + +/***/ }, +/* 157 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule onlyChild + */ + 'use strict'; + + var ReactElement = __webpack_require__(41); + + var invariant = __webpack_require__(12); + + /** + * Returns the first child in a collection of children and verifies that there + * is only one child in the collection. The current implementation of this + * function assumes that a single child gets passed without a wrapper, but the + * purpose of this helper function is to abstract away the particular structure + * of children. + * + * @param {?object} children Child collection structure. + * @return {ReactComponent} The first and only `ReactComponent` contained in the + * structure. + */ + function onlyChild(children) { + !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined; + return children; + } + + module.exports = onlyChild; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 158 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule deprecated + */ + + 'use strict'; + + var assign = __webpack_require__(38); + var warning = __webpack_require__(24); + + /** + * This will log a single deprecation notice per function and forward the call + * on to the new API. + * + * @param {string} fnName The name of the function + * @param {string} newModule The module that fn will exist in + * @param {string} newPackage The module that fn will exist in + * @param {*} ctx The context this forwarded call should run in + * @param {function} fn The function to forward on to + * @return {function} The function that will warn once and then call fn + */ + function deprecated(fnName, newModule, newPackage, ctx, fn) { + var warned = false; + if (process.env.NODE_ENV !== 'production') { + var newFn = function () { + process.env.NODE_ENV !== 'production' ? warning(warned, + // Require examples in this string must be split to prevent React's + // build tools from mistaking them for real requires. + // Otherwise the build tools will attempt to build a '%s' module. + 'React.%s is deprecated. Please use %s.%s from require' + '(\'%s\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined; + warned = true; + return fn.apply(ctx, arguments); + }; + // We need to make sure all properties of the original fn are copied over. + // In particular, this is needed to support PropTypes + return assign(newFn, fn); + } + + return fn; + } + + module.exports = deprecated; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + +/***/ }, +/* 159 */, +/* 160 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3 + // http://underscorejs.org + // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + // Underscore may be freely distributed under the MIT license. + + (function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (true) { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return _; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + }.call(this)); + + +/***/ }, +/* 161 */, +/* 162 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _Icon = __webpack_require__(163); + + var _Icon2 = _interopRequireDefault(_Icon); + + var _InputError = __webpack_require__(164); + + var _InputError2 = _interopRequireDefault(_InputError); + + var _PasswordValidator = __webpack_require__(166); + + var _PasswordValidator2 = _interopRequireDefault(_PasswordValidator); + + var _classnamesBind = __webpack_require__(165); + + var _classnamesBind2 = _interopRequireDefault(_classnamesBind); + + var cx = _classnamesBind2['default'].bind({}); + + var Input = (function (_React$Component) { + _inherits(Input, _React$Component); + + function Input(props) { + var _this = this; + + _classCallCheck(this, Input); + + _get(Object.getPrototypeOf(Input.prototype), 'constructor', this).call(this, props); + + this.handleChange = function (event) { + _this.setState({ + value: event.target.value, + empty: _underscore2['default'].isEmpty(event.target.value) + }); + + if (_this.props.validator) { + _this.checkRules(event.target.value); + }; + + if (_this.props.validate) { + _this.validateInput(event.target.value); + } + + if (_this.props.onChange) { + _this.props.onChange(event); + } + }; + + this.validateInput = function (value) { + // trigger custom validation method in the parent component + if (_this.props.validate && _this.props.validate(value)) { + _this.setState({ + valid: true, + errorVisible: false + }); + } else { + _this.setState({ + valid: false, + errorMessage: !_underscore2['default'].isEmpty(value) ? _this.props.errorMessage : _this.props.emptyMessage + }); + } + }; + + this.componentWillReceiveProps = function (newProps) { + // perform update only when new value exists and not empty + if (newProps.value) { + if (!_underscore2['default'].isUndefined(newProps.value) && newProps.value.length > 0) { + if (_this.props.validate) { + _this.validateInput(newProps.value); + } + _this.setState({ + value: newProps.value, + empty: _underscore2['default'].isEmpty(newProps.value) + }); + } + } + }; + + this.handleFocus = function (event) { + _this.setState({ + focus: true, + validatorVisible: true + }); + + if (_this.props.validator) { + _this.setState({ + errorVisible: false + }); + } + }; + + this.handleBlur = function (event) { + _this.setState({ + focus: false, + errorVisible: !_this.state.valid, + validatorVisible: false + }); + }; + + this.checkRules = function (value) { + var validData = { + minChars: !_underscore2['default'].isEmpty(value) ? value.length >= parseInt(_this.state.minCharacters) : false, + capitalLetters: !_underscore2['default'].isEmpty(value) ? _this.countCapitals(value) : false, + numbers: !_underscore2['default'].isEmpty(value) ? _this.countNumbers(value) > 0 : false, + words: !_underscore2['default'].isEmpty(value) ? !_this.checkWords(value) : false + }; + var allValid = validData.minChars && validData.capitalLetters && validData.numbers && validData.words; + + _this.setState({ + isValidatorValid: validData, + allValidatorValid: allValid, + valid: allValid + }); + }; + + this.countCapitals = function (value) { + return value.replace(/[^A-Z]/g, "").length; + }; + + this.countNumbers = function (value) { + return (/\d/.test(value) + ); + }; + + this.checkWords = function (value) { + return _underscore2['default'].some(_this.state.forbiddenWords, function (word) { + var matched = word === value ? true : ""; + return matched; + }); + }; + + this.state = { + valid: this.props.isValid && this.props.isValid() || true, + empty: _underscore2['default'].isEmpty(this.props.value), + focus: false, + value: null, + iconsVisible: !this.props.validator, + errorMessage: this.props.emptyMessage, + validator: this.props.validator, + validatorVisible: false, + type: this.props.type, + minCharacters: this.props.minCharacters, + requireCapitals: this.props.requireCapitals, + requireNumbers: this.props.requireNumbers, + forbiddenWords: this.props.forbiddenWords, + isValidatorValid: { + minChars: false, + capitalLetters: false, + numbers: false, + words: false, + all: false + }, + allValidatorValid: false + }; + } + + _createClass(Input, [{ + key: 'isValid', + value: function isValid() { + if (this.props.validate) { + if (_underscore2['default'].isEmpty(this.state.value) || !this.props.validate(this.state.value)) { + this.setState({ + valid: false, + errorVisible: true + }); + } + } + + return this.state.valid; + } + }, { + key: 'mouseEnterError', + value: function mouseEnterError() { + this.setState({ + errorVisible: true + }); + } + }, { + key: 'hideError', + value: function hideError() { + this.setState({ + errorVisible: false, + validatorVisible: false + }); + } + + // validator function + }, { + key: 'render', + value: function render() { + + var inputGroupClasses = cx({ + 'input_group': true, + 'input_valid': this.state.valid, + 'input_error': !this.state.valid, + 'input_empty': this.state.empty, + 'input_hasValue': !this.state.empty, + 'input_focused': this.state.focus, + 'input_unfocused': !this.state.focus + }); + + var validator; + + if (this.state.validator) { + validator = _react2['default'].createElement(_PasswordValidator2['default'], { + ref: 'passwordValidator', + visible: this.state.validatorVisible, + name: this.props.text, + value: this.state.value, + validData: this.state.isValidatorValid, + valid: this.state.allValidatorValid, + forbiddenWords: this.state.forbiddenWords, + minCharacters: this.props.minCharacters, + requireCapitals: this.props.requireCapitals, + requireNumbers: this.props.requireNumbers + }); + }; + + return _react2['default'].createElement( + 'div', + { className: inputGroupClasses }, + _react2['default'].createElement( + 'label', + { className: 'input_label', htmlFor: this.props.text }, + _react2['default'].createElement( + 'span', + { className: 'label_text' }, + this.props.text + ) + ), + _react2['default'].createElement('input', _extends({}, this.props, { + placeholder: this.props.placeholder, + className: 'input', + id: this.props.text, + defaultValue: this.props.defaultValue, + value: this.state.value, + onChange: this.handleChange, + onFocus: this.handleFocus, + onBlur: this.handleBlur, + autoComplete: 'off' + })), + _react2['default'].createElement(_InputError2['default'], { + visible: this.state.errorVisible, + errorMessage: this.state.errorMessage + }), + _react2['default'].createElement( + 'div', + { className: 'validationIcons' }, + _react2['default'].createElement( + 'i', + { className: 'input_error_icon', onMouseEnter: this.mouseEnterError }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'input_valid_icon' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick' }), + ' ' + ) + ), + validator + ); + } + }]); + + return Input; + })(_react2['default'].Component); + + exports['default'] = Input; + ; + module.exports = exports['default']; + +/***/ }, +/* 163 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var Icon = (function (_React$Component) { + _inherits(Icon, _React$Component); + + function Icon() { + _classCallCheck(this, Icon); + + _get(Object.getPrototypeOf(Icon.prototype), 'constructor', this).apply(this, arguments); + } + + _createClass(Icon, [{ + key: 'render', + value: function render() { + switch (this.props.type) { + + case 'circle_error': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 20 20' }, + _react2['default'].createElement('path', { d: 'M10,0.982c4.973,0,9.018,4.046,9.018,9.018S14.973,19.018,10,19.018S0.982,14.973,0.982,10 S5.027,0.982,10,0.982 M10,0C4.477,0,0,4.477,0,10c0,5.523,4.477,10,10,10s10-4.477,10-10C20,4.477,15.523,0,10,0L10,0z M9,5.703 V5.441h2.5v0.262l-0.66,5.779H9.66L9,5.703z M9.44,12.951h1.621v1.491H9.44V12.951z' }) + ); + + case 'circle_tick': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 23 23' }, + _react2['default'].createElement('path', { d: 'M11.5,23C5.2,23,0,17.8,0,11.5S5.2,0,11.5,0S23,5.2,23,11.5S17.8,23,11.5,23z M11.5,1C5.7,1,1,5.7,1,11.5S5.7,22,11.5,22 S22,17.3,22,11.5S17.3,1,11.5,1z M10.4,15.2l6.7-7c0.2-0.2,0.2-0.5,0-0.7c-0.2-0.2-0.5-0.2-0.7,0L10,14.2L7,11 c-0.2-0.2-0.5-0.2-0.7,0c-0.2,0.2-0.2,0.5,0,0.7l3.4,3.5c0.1,0.1,0.2,0.1,0.3,0.1S10.3,15.3,10.4,15.2z' }) + ); + + case 'circle_tick_filled': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 20 20' }, + _react2['default'].createElement('path', { fill: '#4FB07F', d: 'M9.5,0C14.7,0,19,4.3,19,9.5S14.7,19,9.5,19S0,14.7,0,9.5S4.3,0,9.5,0z' }), + _react2['default'].createElement('path', { fill: '#FFFFFF', d: 'M8.7,12.9c-0.1,0-0.2,0-0.3-0.1l-2.4-2.5c-0.1-0.1-0.1-0.4,0-0.5c0.1-0.2,0.4-0.2,0.5,0L8.7,12l4.6-5 c0.1-0.1,0.4-0.1,0.5,0c0.1,0.2,0.1,0.4,0,0.5L9,12.8C9,12.8,8.9,12.9,8.7,12.9C8.8,12.9,8.8,12.9,8.7,12.9z' }) + ); + + case 'guthub': + return _react2['default'].createElement( + 'svg', + { viewBox: '0 0 34 34' }, + _react2['default'].createElement('path', { 'fill-rule': 'evenodd', 'clip-rule': 'evenodd', fill: '#191717', d: 'M32.6,16.3c0,7.2-4.7,13.3-11.1,15.5c-0.8,0.2-1.1-0.3-1.1-0.8 c0-0.5,0-2.3,0-4.5c0-1.5-0.5-2.5-1.1-3c3.6-0.4,7.4-1.8,7.4-8c0-1.8-0.6-3.2-1.7-4.4c0.2-0.4,0.7-2.1-0.2-4.3c0,0-1.4-0.4-4.5,1.7 c-1.3-0.4-2.7-0.5-4.1-0.5c-1.4,0-2.8,0.2-4.1,0.5C9.1,6.3,7.7,6.8,7.7,6.8C6.8,9,7.4,10.7,7.6,11.1c-1,1.1-1.7,2.6-1.7,4.4 c0,6.2,3.8,7.6,7.4,8.1c-0.5,0.4-0.9,1.1-1,2.2c-0.9,0.4-3.3,1.1-4.7-1.4c0,0-0.9-1.6-2.5-1.7c0,0-1.6,0-0.1,1c0,0,1.1,0.5,1.8,2.4 c0,0,1,3.2,5.5,2.2c0,1.4,0,2.4,0,2.8c0,0.4-0.3,0.9-1.1,0.8C4.7,29.6,0,23.5,0,16.3C0,7.3,7.3,0,16.3,0C25.3,0,32.6,7.3,32.6,16.3z ' }) + ); + } + } + }]); + + return Icon; + })(_react2['default'].Component); + + exports['default'] = Icon; + module.exports = exports['default']; + +/***/ }, +/* 164 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _classnamesBind = __webpack_require__(165); + + var _classnamesBind2 = _interopRequireDefault(_classnamesBind); + + var cx = _classnamesBind2['default'].bind({}); + + var InputError = (function (_React$Component) { + _inherits(InputError, _React$Component); + + function InputError(props) { + _classCallCheck(this, InputError); + + _get(Object.getPrototypeOf(InputError.prototype), 'constructor', this).call(this, props); + this.state = { + message: 'Input is invalid' + }; + } + + _createClass(InputError, [{ + key: 'render', + value: function render() { + var errorClass = cx({ + 'error_container': true, + 'visible': this.props.visible, + 'invisible': !this.props.visible + }); + + return _react2['default'].createElement( + 'div', + { className: errorClass }, + _react2['default'].createElement( + 'span', + null, + this.props.errorMessage + ) + ); + } + }]); + + return InputError; + })(_react2['default'].Component); + + exports['default'] = InputError; + module.exports = exports['default']; + +/***/ }, +/* 165 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + Copyright (c) 2015 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames + */ + /* global define */ + + (function () { + 'use strict'; + + var hasOwn = {}.hasOwnProperty; + + function classNames () { + var classes = ''; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!arg) continue; + + var argType = typeof arg; + + if (argType === 'string' || argType === 'number') { + classes += ' ' + (this && this[arg] || arg); + } else if (Array.isArray(arg)) { + classes += ' ' + classNames.apply(this, arg); + } else if (argType === 'object') { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes += ' ' + (this && this[key] || key); + } + } + } + } + + return classes.substr(1); + } + + if (typeof module !== 'undefined' && module.exports) { + module.exports = classNames; + } else if (true) { + // register as 'classnames', consistent with npm package name + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { + return classNames; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else { + window.classNames = classNames; + } + }()); + + +/***/ }, +/* 166 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _Icon = __webpack_require__(163); + + var _Icon2 = _interopRequireDefault(_Icon); + + var _classnamesBind = __webpack_require__(165); + + var _classnamesBind2 = _interopRequireDefault(_classnamesBind); + + var cx = _classnamesBind2['default'].bind({}); + + var PasswordValidator = (function (_React$Component) { + _inherits(PasswordValidator, _React$Component); + + function PasswordValidator(props) { + _classCallCheck(this, PasswordValidator); + + _get(Object.getPrototypeOf(PasswordValidator.prototype), 'constructor', this).call(this, props); + this.state = { + value: null, + minCharacters: this.props.minCharacters, + requireCapitals: this.props.requireCapitals, + requireNumbers: this.props.requireNumbers, + forbiddenWords: this.props.forbiddenWords, + name: this.props.name + }; + } + + _createClass(PasswordValidator, [{ + key: 'render', + value: function render() { + var validatorClass = cx({ + 'password_validator': true, + 'visible': this.props.visible, + 'invisible': !this.props.visible + }); + + var forbiddenWords = this.state.forbiddenWords.map(function (word, i) { + return _react2['default'].createElement( + 'span', + { key: i, className: 'bad_word' }, + '"', + word, + '"' + ); + }); + + var validatorTitle; + + if (this.props.valid) { + validatorTitle = _react2['default'].createElement( + 'h4', + { className: 'validator_title valid' }, + this.props.name, + ' IS OK' + ); + } else { + validatorTitle = _react2['default'].createElement( + 'h4', + { className: 'validator_title invalid' }, + this.props.name, + ' RULES' + ); + } + + return _react2['default'].createElement( + 'div', + { className: validatorClass }, + _react2['default'].createElement( + 'div', + { className: 'validator_container' }, + validatorTitle, + _react2['default'].createElement( + 'ul', + { className: 'rules_list' }, + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.minChars }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + this.state.minCharacters, + ' characters minimum' + ) + ), + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.capitalLetters }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + 'Contains at least ', + this.state.requireCapitals, + ' capital letter' + ) + ), + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.numbers }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + 'Contains at least ', + this.state.requireNumbers, + ' number' + ) + ), + _react2['default'].createElement( + 'li', + { className: cx({ 'valid': this.props.validData.words }) }, + _react2['default'].createElement( + 'i', + { className: 'icon_valid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_tick_filled' }), + ' ' + ), + _react2['default'].createElement( + 'i', + { className: 'icon_invalid' }, + ' ', + _react2['default'].createElement(_Icon2['default'], { type: 'circle_error' }), + ' ' + ), + _react2['default'].createElement( + 'span', + { className: 'error_message' }, + 'Can\'t be ', + forbiddenWords + ) + ) + ) + ) + ); + } + }]); + + return PasswordValidator; + })(_react2['default'].Component); + + exports['default'] = PasswordValidator; + module.exports = exports['default']; + +/***/ }, +/* 167 */ +/***/ function(module, exports) { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.getQueryVariable = getQueryVariable; + + function getQueryVariable(variable) { + var query = window.location.search.substring(1); + var vars = query.split("&"); + for (var i = 0; i < vars.length; i++) { + var pair = vars[i].split("="); + if (pair[0] == variable) { + return pair[1]; + } + } + return '/'; + } + +/***/ }, +/* 168 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _react = __webpack_require__(147); + + var _react2 = _interopRequireDefault(_react); + + var _underscore = __webpack_require__(160); + + var _underscore2 = _interopRequireDefault(_underscore); + + var _jquery = __webpack_require__(161); + + var _jquery2 = _interopRequireDefault(_jquery); + + var _componentsInput = __webpack_require__(162); + + var _componentsInput2 = _interopRequireDefault(_componentsInput); + + var _componentsIcon = __webpack_require__(163); + + var _componentsIcon2 = _interopRequireDefault(_componentsIcon); + + var _componentsInputError = __webpack_require__(164); + + var _componentsInputError2 = _interopRequireDefault(_componentsInputError); + + var _componentsUtils = __webpack_require__(167); + + var RegisterComponent = (function (_React$Component) { + _inherits(RegisterComponent, _React$Component); + + function RegisterComponent(props) { + var _this = this; + + _classCallCheck(this, RegisterComponent); + + _get(Object.getPrototypeOf(RegisterComponent.prototype), 'constructor', this).call(this, props); + + this.handlePasswordInput = function (event) { + if (!_underscore2['default'].isEmpty(_this.state.confirmPassword)) { + _this.refs.passwordConfirm.isValid(); + }; + _this.refs.passwordConfirm.hideError(); + _this.setState({ + password: event.target.value + }); + }; + + this.handleConfirmPasswordInput = function (event) { + _this.setState({ + confirmPassword: event.target.value + }); + }; + + this.saveAndContinue = function (event) { + event.preventDefault(); + + var canProceed = _this.validateEmail(_this.state.email) && _this.refs.password.isValid() && _this.refs.passwordConfirm.isValid(); + + if (canProceed) { + (function () { + var data = { + email: _this.state.email, + password: _this.state.password + }, + self = _this, + visible = undefined; + + _jquery2['default'].post('/register/', data).done(function (result) { + var res = JSON.parse(result); + if (res.r) { + self.setState({ + errorVisible: true, + errorMessage: res.message + }); + } else { + var next = decodeURIComponent((0, _componentsUtils.getQueryVariable)('continue')); + window.location = next; + } + }); + })(); + } else { + _this.refs.email.isValid(); + _this.refs.password.isValid(); + _this.refs.passwordConfirm.isValid(); + } + }; + + this.isConfirmedPassword = function (event) { + return event == _this.state.password; + }; + + this.handleEmailInput = function (event) { + _this.setState({ + email: event.target.value + }); + }; + + this.validateEmail = function (event) { + // from http://stackoverflow.com/questions/46155/validate-email-address-in-javascript + var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(event); + }; + + this.isEmpty = function (value) { + return !_underscore2['default'].isEmpty(value); + }; + + this.updateStatesValue = function (value) { + _this.setState({ + statesValue: value + }); + }; + + this.state = { + email: null, + password: null, + confirmPassword: null, + forbiddenWords: ["password", "user", "username"], + errorVisible: false, + errorMessage: '注册失败, 请联系管理员' + }; + } + + _createClass(RegisterComponent, [{ + key: 'render', + value: function render() { + return _react2['default'].createElement( + 'div', + { className: 'create_account_screen' }, + _react2['default'].createElement( + 'div', + { className: 'create_account_form' }, + _react2['default'].createElement( + 'h1', + null, + '创建新用户' + ), + _react2['default'].createElement( + 'p', + null, + '开启CODE之旅.' + ), + _react2['default'].createElement( + 'form', + { onSubmit: this.saveAndContinue }, + _react2['default'].createElement(_componentsInput2['default'], { + text: '邮箱地址', + ref: 'email', + type: 'text', + defaultValue: this.state.email, + validate: this.validateEmail, + value: this.state.email, + onChange: this.handleEmailInput, + errorMessage: 'Email格式错误', + emptyMessage: 'Email不能为空', + errorVisible: this.state.showEmailError + }), + _react2['default'].createElement(_componentsInput2['default'], { + text: '密码', + type: 'password', + ref: 'password', + validator: 'true', + minCharacters: '8', + requireCapitals: '1', + requireNumbers: '1', + forbiddenWords: this.state.forbiddenWords, + value: this.state.passsword, + emptyMessage: '密码输入错误', + onChange: this.handlePasswordInput + }), + _react2['default'].createElement(_componentsInput2['default'], { + text: '确认密码', + ref: 'passwordConfirm', + type: 'password', + validate: this.isConfirmedPassword, + value: this.state.confirmPassword, + onChange: this.handleConfirmPasswordInput, + emptyMessage: '密码为必选', + errorMessage: '2次输入的密码不相同, 请确认' + }), + _react2['default'].createElement(_componentsInputError2['default'], { + visible: this.state.errorVisible, + errorMessage: this.state.errorMessage + }), + _react2['default'].createElement( + 'button', + { + type: 'submit', + className: 'button button_wide' }, + '创建' + ) + ) + ) + ); + } + }]); + + return RegisterComponent; + })(_react2['default'].Component); + + exports.RegisterComponent = RegisterComponent; + + var Register = (function (_React$Component2) { + _inherits(Register, _React$Component2); + + function Register() { + _classCallCheck(this, Register); + + _get(Object.getPrototypeOf(Register.prototype), 'constructor', this).apply(this, arguments); + } + + _createClass(Register, [{ + key: 'render', + value: function render() { + return _react2['default'].createElement( + 'div', + { className: 'application_wrapper' }, + _react2['default'].createElement( + 'div', + { className: 'application_routeHandler' }, + _react2['default'].createElement(RegisterComponent, null) + ) + ); + } + }]); + + return Register; + })(_react2['default'].Component); + + exports['default'] = Register; + +/***/ } +]); +//# sourceMappingURL=register.js.map \ No newline at end of file diff --git a/dist/js/mod/register.js.map b/dist/js/mod/register.js.map new file mode 100644 index 0000000..38e6bcb --- /dev/null +++ b/dist/js/mod/register.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./hub/static/jsx/register.jsx","webpack:///./~/react-dom/index.js?f91c","webpack:///./~/react/lib/ReactDOM.js?b76f","webpack:///(webpack)/~/node-libs-browser/~/process/browser.js?6f0e","webpack:///./~/react/lib/ReactCurrentOwner.js?61db","webpack:///./~/react/lib/ReactDOMTextComponent.js?8b6e","webpack:///./~/react/lib/DOMChildrenOperations.js?8e2a","webpack:///./~/react/lib/Danger.js?f653","webpack:///./~/react/~/fbjs/lib/ExecutionEnvironment.js?2035","webpack:///./~/react/~/fbjs/lib/createNodesFromMarkup.js?f183","webpack:///./~/react/~/fbjs/lib/createArrayFromMixed.js?9dc3","webpack:///./~/react/~/fbjs/lib/toArray.js?6a21","webpack:///./~/react/~/fbjs/lib/invariant.js?568c","webpack:///./~/react/~/fbjs/lib/getMarkupWrap.js?522e","webpack:///./~/react/~/fbjs/lib/emptyFunction.js?bcf9","webpack:///./~/react/lib/ReactMultiChildUpdateTypes.js?d4a0","webpack:///./~/react/~/fbjs/lib/keyMirror.js?741f","webpack:///./~/react/lib/ReactPerf.js?ef93","webpack:///./~/react/lib/setInnerHTML.js?38eb","webpack:///./~/react/lib/setTextContent.js?e257","webpack:///./~/react/lib/escapeTextContentForBrowser.js?9b98","webpack:///./~/react/lib/DOMPropertyOperations.js?930e","webpack:///./~/react/lib/DOMProperty.js?827c","webpack:///./~/react/lib/quoteAttributeValueForBrowser.js?459e","webpack:///./~/react/~/fbjs/lib/warning.js?0260","webpack:///./~/react/lib/ReactComponentBrowserEnvironment.js?c882","webpack:///./~/react/lib/ReactDOMIDOperations.js?efce","webpack:///./~/react/lib/ReactMount.js?2f23","webpack:///./~/react/lib/ReactBrowserEventEmitter.js?9c0a","webpack:///./~/react/lib/EventConstants.js?41f3","webpack:///./~/react/lib/EventPluginHub.js?c6b1","webpack:///./~/react/lib/EventPluginRegistry.js?4190","webpack:///./~/react/lib/EventPluginUtils.js?0958","webpack:///./~/react/lib/ReactErrorUtils.js?6b31","webpack:///./~/react/lib/accumulateInto.js?b434","webpack:///./~/react/lib/forEachAccumulated.js?b898","webpack:///./~/react/lib/ReactEventEmitterMixin.js?8a20","webpack:///./~/react/lib/ViewportMetrics.js?eb12","webpack:///./~/react/lib/Object.assign.js?4a55","webpack:///./~/react/lib/isEventSupported.js?be9a","webpack:///./~/react/lib/ReactDOMFeatureFlags.js?756f","webpack:///./~/react/lib/ReactElement.js?ab2f","webpack:///./~/react/lib/canDefineProperty.js?e9a0","webpack:///./~/react/lib/ReactEmptyComponentRegistry.js?2383","webpack:///./~/react/lib/ReactInstanceHandles.js?776d","webpack:///./~/react/lib/ReactRootIndex.js?ade8","webpack:///./~/react/lib/ReactInstanceMap.js?a83e","webpack:///./~/react/lib/ReactMarkupChecksum.js?0d75","webpack:///./~/react/lib/adler32.js?f32a","webpack:///./~/react/lib/ReactReconciler.js?6bfa","webpack:///./~/react/lib/ReactRef.js?7333","webpack:///./~/react/lib/ReactOwner.js?40e0","webpack:///./~/react/lib/ReactUpdateQueue.js?fd2c","webpack:///./~/react/lib/ReactUpdates.js?ce09","webpack:///./~/react/lib/CallbackQueue.js?bea8","webpack:///./~/react/lib/PooledClass.js?c29a","webpack:///./~/react/lib/Transaction.js?6dff","webpack:///./~/react/~/fbjs/lib/emptyObject.js?2c63","webpack:///./~/react/~/fbjs/lib/containsNode.js?4397","webpack:///./~/react/~/fbjs/lib/isTextNode.js?dcbb","webpack:///./~/react/~/fbjs/lib/isNode.js?d4c4","webpack:///./~/react/lib/instantiateReactComponent.js?75da","webpack:///./~/react/lib/ReactCompositeComponent.js?cd59","webpack:///./~/react/lib/ReactComponentEnvironment.js?1a40","webpack:///./~/react/lib/ReactPropTypeLocations.js?bc16","webpack:///./~/react/lib/ReactPropTypeLocationNames.js?7dd9","webpack:///./~/react/lib/shouldUpdateReactComponent.js?c0e1","webpack:///./~/react/lib/ReactEmptyComponent.js?b7b9","webpack:///./~/react/lib/ReactNativeComponent.js?cf5b","webpack:///./~/react/lib/validateDOMNesting.js?d9ad","webpack:///./~/react/lib/ReactDefaultInjection.js?3d36","webpack:///./~/react/lib/BeforeInputEventPlugin.js?87a5","webpack:///./~/react/lib/EventPropagators.js?d7c3","webpack:///./~/react/lib/FallbackCompositionState.js?9096","webpack:///./~/react/lib/getTextContentAccessor.js?165c","webpack:///./~/react/lib/SyntheticCompositionEvent.js?0a93","webpack:///./~/react/lib/SyntheticEvent.js?66c3","webpack:///./~/react/lib/SyntheticInputEvent.js?60ca","webpack:///./~/react/~/fbjs/lib/keyOf.js?65e9","webpack:///./~/react/lib/ChangeEventPlugin.js?e8a9","webpack:///./~/react/lib/getEventTarget.js?ec01","webpack:///./~/react/lib/isTextInputElement.js?ec60","webpack:///./~/react/lib/ClientReactRootIndex.js?570d","webpack:///./~/react/lib/DefaultEventPluginOrder.js?3d21","webpack:///./~/react/lib/EnterLeaveEventPlugin.js?5f5f","webpack:///./~/react/lib/SyntheticMouseEvent.js?5b2d","webpack:///./~/react/lib/SyntheticUIEvent.js?0511","webpack:///./~/react/lib/getEventModifierState.js?ce5c","webpack:///./~/react/lib/HTMLDOMPropertyConfig.js?d228","webpack:///./~/react/lib/ReactBrowserComponentMixin.js?863c","webpack:///./~/react/lib/findDOMNode.js?ec3f","webpack:///./~/react/lib/ReactDefaultBatchingStrategy.js?ef70","webpack:///./~/react/lib/ReactDOMComponent.js?1302","webpack:///./~/react/lib/AutoFocusUtils.js?e582","webpack:///./~/react/~/fbjs/lib/focusNode.js?40cb","webpack:///./~/react/lib/CSSPropertyOperations.js?222a","webpack:///./~/react/lib/CSSProperty.js?bbb1","webpack:///./~/react/~/fbjs/lib/camelizeStyleName.js?f471","webpack:///./~/react/~/fbjs/lib/camelize.js?4c11","webpack:///./~/react/lib/dangerousStyleValue.js?a8dd","webpack:///./~/react/~/fbjs/lib/hyphenateStyleName.js?a841","webpack:///./~/react/~/fbjs/lib/hyphenate.js?603e","webpack:///./~/react/~/fbjs/lib/memoizeStringOnly.js?85a1","webpack:///./~/react/lib/ReactDOMButton.js?38df","webpack:///./~/react/lib/ReactDOMInput.js?9d21","webpack:///./~/react/lib/LinkedValueUtils.js?813d","webpack:///./~/react/lib/ReactPropTypes.js?3c83","webpack:///./~/react/lib/getIteratorFn.js?1507","webpack:///./~/react/lib/ReactDOMOption.js?9449","webpack:///./~/react/lib/ReactChildren.js?4f05","webpack:///./~/react/lib/traverseAllChildren.js?56de","webpack:///./~/react/lib/ReactDOMSelect.js?9e06","webpack:///./~/react/lib/ReactDOMTextarea.js?ee2b","webpack:///./~/react/lib/ReactMultiChild.js?c87d","webpack:///./~/react/lib/ReactChildReconciler.js?ff46","webpack:///./~/react/lib/flattenChildren.js?0d06","webpack:///./~/react/~/fbjs/lib/shallowEqual.js?e187","webpack:///./~/react/lib/ReactEventListener.js?2365","webpack:///./~/react/~/fbjs/lib/EventListener.js?fc63","webpack:///./~/react/~/fbjs/lib/getUnboundedScrollPosition.js?beb0","webpack:///./~/react/lib/ReactInjection.js?1366","webpack:///./~/react/lib/ReactClass.js?0d74","webpack:///./~/react/lib/ReactComponent.js?702a","webpack:///./~/react/lib/ReactNoopUpdateQueue.js?ad0b","webpack:///./~/react/lib/ReactReconcileTransaction.js?9178","webpack:///./~/react/lib/ReactInputSelection.js?76e1","webpack:///./~/react/lib/ReactDOMSelection.js?fe14","webpack:///./~/react/lib/getNodeForCharacterOffset.js?c1de","webpack:///./~/react/~/fbjs/lib/getActiveElement.js?690f","webpack:///./~/react/lib/SelectEventPlugin.js?9763","webpack:///./~/react/lib/ServerReactRootIndex.js?0345","webpack:///./~/react/lib/SimpleEventPlugin.js?6065","webpack:///./~/react/lib/SyntheticClipboardEvent.js?2b3d","webpack:///./~/react/lib/SyntheticFocusEvent.js?a7dc","webpack:///./~/react/lib/SyntheticKeyboardEvent.js?ec44","webpack:///./~/react/lib/getEventCharCode.js?9d81","webpack:///./~/react/lib/getEventKey.js?666a","webpack:///./~/react/lib/SyntheticDragEvent.js?39dc","webpack:///./~/react/lib/SyntheticTouchEvent.js?c035","webpack:///./~/react/lib/SyntheticWheelEvent.js?c8d4","webpack:///./~/react/lib/SVGDOMPropertyConfig.js?ef35","webpack:///./~/react/lib/ReactDefaultPerf.js?5540","webpack:///./~/react/lib/ReactDefaultPerfAnalysis.js?221c","webpack:///./~/react/~/fbjs/lib/performanceNow.js?a0fc","webpack:///./~/react/~/fbjs/lib/performance.js?36da","webpack:///./~/react/lib/ReactVersion.js?c083","webpack:///./~/react/lib/renderSubtreeIntoContainer.js?8abc","webpack:///./~/react/react.js?3d67","webpack:///./~/react/lib/React.js?24ef","webpack:///./~/react/lib/ReactDOMServer.js?51e1","webpack:///./~/react/lib/ReactServerRendering.js?9368","webpack:///./~/react/lib/ReactServerBatchingStrategy.js?4093","webpack:///./~/react/lib/ReactServerRenderingTransaction.js?b78a","webpack:///./~/react/lib/ReactIsomorphic.js?7cc6","webpack:///./~/react/lib/ReactDOMFactories.js?5a92","webpack:///./~/react/lib/ReactElementValidator.js?a599","webpack:///./~/react/~/fbjs/lib/mapObject.js?ddb5","webpack:///./~/react/lib/onlyChild.js?27e3","webpack:///./~/react/lib/deprecated.js?c9fb","webpack:///./~/underscore/underscore.js?31a5","webpack:///./hub/static/jsx/components/Input.jsx?98f9","webpack:///./hub/static/jsx/components/Icon.jsx?b76e","webpack:///./hub/static/jsx/components/InputError.jsx?73f7","webpack:///./~/classnames/bind.js?bb51","webpack:///./hub/static/jsx/components/PasswordValidator.jsx?d6c4","webpack:///./hub/static/jsx/components/Utils.jsx?e0af","webpack:///./hub/static/jsx/signup.jsx"],"names":[],"mappings":";;;;;;;;qCAAqB,CAAW;;;;kCACd,GAAO;;;;mCACJ,GAAU;;;;AAE/B,uBAAS,MAAM,CAAC,2DAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,C;;;;;;ACJ7D;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+HAA8H;;AAE9H;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;;AC3FA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;AC1FtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;;AAEA,oC;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,UAAU;AACvB,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA,EAAC;;AAED,wC;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B,cAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,sBAAqB,4BAA4B;AACjD;AACA;AACA;;AAEA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,cAAc;AAC3B,eAAc,kBAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,wBAAwB;AAC7C;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA,yB;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,UAAU;AACrB,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA,uC;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,yBAAyB;AACpC,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB,aAAa;AAC/B;AACA;AACA;AACA;;AAEA,0B;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA,2BAA0B;AAC1B;AACA;AACA;;AAEA,4B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED,6C;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA6B,sBAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd,eAAc;AACd;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa;AACb,aAAY;AACZ,aAAY;AACZ,eAAc;AACd,gBAAe;AACf;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,8C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C,+BAA8B;AAC9B;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA,aAAY;AACZ;AACA,sEAAqE;;AAErE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,oDAAoD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,8B;;;;;;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA,gD;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uFAAsF,aAAa;AACnG;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,0B;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mD;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,cAAc;AAC3B,cAAa,cAAc;AAC3B;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED,uC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC;AACA,aAAY,GAAG;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,8CAA8C;AACzD,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,WAAW;AACtB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,WAAW;AACtB,YAAW,0BAA0B;AACrC,YAAW,QAAQ;AACnB;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,WAAW;AACtB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,WAAW;AACtB;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ,kCAAkC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,SAAS;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,WAAW;AACxB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,QAAQ;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA,qLAAoL;;AAEpL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB,eAAc,eAAe;AAC7B;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oLAAmL;;AAEnL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,YAAY;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,WAAW;AACzB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf,eAAc;AACd;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,eAAc,OAAO;AACrB,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED,6B;;;;;;;ACj1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED,2C;;;;;;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,oCAAmC,gCAAgC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA,iC;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,gBAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA,gBAAe,OAAO;AACtB;AACA;;AAEA,IAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;;AAEA,yGAAwG;AACxG;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,UAAU;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;AACA;AACA,mCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,mC;;;;;;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA,aAAY,WAAW;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iC;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,qC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB,8BAA8B;AACvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yB;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,YAAW,cAAc;AACzB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6BAA4B,QAAQ,oBAAoB,EAAE;AAC1D;AACA,IAAG;AACH;AACA;AACA;;AAEA,oC;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,uC;;;;;;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,0B;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,aAAa;AAC1B,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kC;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2B;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;;AChQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B,YAAW,eAAe;AAC1B,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+B;;;;;;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA,gC;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,4BAA4B;AACvC;AACA,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA,eAAc,0BAA0B;AACxC;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB,cAAa,SAAS;AACtB;AACA,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,2DAA0D;AAC1D;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,sDAAqD;AACrD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,8B;;;;;;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,8B;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+B;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA,6B;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,EAAE;AACb,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;AAEA,yB;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,UAAU;AACrB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4C;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA,IAAG;;AAEH;AACA;AACA,uEAAsE;AACtE;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gJAA+I;AAC/I;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA6B;AAC7B,kCAAiC,kBAAkB;AACnD;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,eAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA,0C;;;;;;;ACrrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED,yC;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA,6C;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA,IAAG;AACH,mCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,sC;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,aAAa;AACxB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,UAAU;AACrB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,eAAe;AAC1B,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA;AACA,wCAAuC;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qC;;;;;;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,G;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oCAAmC;AACnC;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,2BAA2B;AACjD,wBAAuB,kCAAkC;AACzD,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA,uBAAsB,4BAA4B;AAClD,wBAAuB,mCAAmC;AAC1D,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,eAAe;AAC1B,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;ACpZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;;AAEA;AACA,kBAAiB,eAAe;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,2C;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,4C;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA6B;AAC7B;;AAEA;AACA;;AAEA;;AAEA,iC;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wB;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,6BAA6B,UAAU,0BAA0B,UAAU,uBAAuB,UAAU,8BAA8B,UAAU,0BAA0B,UAAU,0BAA0B,UAAU,+BAA+B;;AAEjS,0C;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8BAA6B,qBAAqB;AAClD;AACA,IAAG;AACH;AACA,8BAA6B,qBAAqB;AAClD;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,wC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,mC;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wC;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wC;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,0BAA0B;AACrC,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,+C;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAqB;;AAErB,uBAAsB,iBAAiB;AACvC,oBAAmB,cAAc;AACjC,mBAAkB,eAAe;;AAEjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAsH;AACtH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0HAAyH;AACzH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,yBAAyB;AACxC;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qNAAoN,YAAY;AAChO;AACA;AACA;AACA;AACA;AACA,qOAAoO,+BAA+B;AACnQ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA,qDAAoD;AACpD;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,aAAa;AAC1B,cAAa,0DAA0D;AACvE,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC,cAAa,aAAa;AAC1B,cAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,uCAAsC,KAAK;AAC3C;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAwD;AACxD,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,oC;;;;;;;ACj8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,4B;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA4C;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,0BAA0B;AAC1D,qBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAqE;AACrE;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED,wC;;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8B;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,oC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,2B;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sC;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,qC;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA,4B;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gC;;;;;;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,mC;;;;;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,4BAA2B;AAC3B,OAAM;AACN;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,2BAA0B;AAC1B,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,oBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACnWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,2BAA0B;AAC1B,IAAG;;AAEH;AACA,+BAA8B,2CAA2C;;AAEzE;AACA,iBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;;AAEA,iC;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,iBAAiB;AAC5B,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gC;;;;;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA,YAAW,GAAG;AACd,YAAW,QAAQ;AACnB,YAAW,UAAU;AACrB,YAAW,GAAG;AACd;AACA,aAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB;AACvB;;AAEA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2LAA2L,yCAAyC;AACpO;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,GAAG;AACd,YAAW,UAAU;AACrB,YAAW,GAAG;AACd,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sC;;;;;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,YAAW,kBAAkB;AAC7B,YAAW,QAAQ;AACnB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,sBAAsB;AACrC;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAoB;AACpB;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iC;;;;;;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,iBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kC;;;;;;;AC/eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB,YAAW,gBAAgB;AAC3B,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,wKAAuK;AACvK;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kC;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+B;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,EAAE;AACb,aAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,qC;;;;;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,SAAS;AACtB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA,gC;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAwB,eAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA,eAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,KAAK;AAClC;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,0BAA0B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,WAAW;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,0BAA0B;AACvC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,8CAA6C;AAC7C,IAAG;AACH;AACA;AACA;AACA;AACA,yCAAwC;AACxC,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,sCAAqC;AACrC,IAAG;AACH;AACA;AACA,IAAG;AACH,2BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA,6HAA4H;AAC5H;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+OAA8O;;AAE9O;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA,+NAA8N;AAC9N;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAwF,aAAa;AACrG;AACA;;AAEA,uDAAsD;AACtD;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,OAAO;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB,eAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6B;;;;;;;AClwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,wIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,UAAU;AACvB;AACA;AACA,0DAAyD;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,WAAW;AACxB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uC;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,UAAU;AACxB;AACA;AACA;AACA,cAAa,UAAU;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,4C;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,0BAAyB;AACzB,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,sC;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAa,WAAW;AACxB;AACA;;AAEA;AACA,cAAa,uBAAuB;AACpC,cAAa,OAAO;AACpB;AACA;AACA;;AAEA,oC;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4C;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA,mC;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,WAAW;AACtB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,oC;;;;;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,cAAc;AACpC,wBAAuB,qBAAqB;AAC5C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,yBAAyB;AAC/C,wBAAuB,gCAAgC;AACvD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,eAAe;AACrC,wBAAuB,sBAAsB;AAC7C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,iBAAiB;AACvC,wBAAuB,wBAAwB;AAC/C;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,sBAAsB;AAC5C,wBAAuB,6BAA6B;AACpD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,mBAAmB;AACzC,wBAAuB,0BAA0B;AACjD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,oBAAoB;AAC1C,wBAAuB,2BAA2B;AAClD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,qBAAqB;AAC3C,wBAAuB,4BAA4B;AACnD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,uBAAuB;AAC7C,wBAAuB,8BAA8B;AACrD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,kBAAkB;AACxC,wBAAuB,yBAAyB;AAChD;AACA,IAAG;AACH;AACA;AACA,uBAAsB,gBAAgB;AACtC,wBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA0B,gBAAgB;AAC1C;;AAEA;;AAEA;;AAEA;AACA,cAAa,OAAO;AACpB,cAAa,eAAe;AAC5B,cAAa,OAAO;AACpB,cAAa,OAAO;AACpB,eAAc,EAAE;AAChB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oC;;;;;;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,0C;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,yC;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mC;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8B;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,qC;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA,sC;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uC;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA,sEAAqE,aAAa;AAClF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB,wBAAuB;AACvB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,2BAA0B;AAC1B;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA,mC;;;;;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,yBAAyB;AAC1C;AACA,2BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,yBAAyB;AAC1C;AACA,2BAA0B;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,2C;;;;;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,iC;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,oC;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,2B;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,wD;;;;;;ACfA;;AAEA;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA,wB;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iC;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW,aAAa;AACxB,aAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,aAAa;AACxB,aAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,G;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8C;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAc,MAAM;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kD;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wB;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED,oC;;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gGAA+F;AAC/F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,UAAU;AACrB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA6I;AAC7I;AACA,QAAO;AACP;AACA;AACA,uIAAsI;AACtI;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,sBAAsB;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wC;;;;;;;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,aAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6B;;;;;;;;AC/CA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,YAAY;AAClD;AACA;AACA,MAAK;AACL;AACA,wCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,2CAA0C;AAC1C,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6DAA4D,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA,sBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8CAA6C,YAAY;AACzD;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAqB,cAAc;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAqB,eAAe;AACpC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,6CAA4C,mBAAmB;AAC/D;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;AACf,eAAc;AACd,eAAc;AACd,iBAAgB;AAChB,iBAAgB;AAChB,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP,sBAAqB;AACrB;;AAEA;AACA;AACA,MAAK;AACL,kBAAiB;;AAEjB;AACA,mDAAkD,EAAE,iBAAiB;;AAErE;AACA,yBAAwB,8BAA8B;AACtD,4BAA2B;;AAE3B;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mDAAkD,iBAAiB;;AAEnE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;kCC3gDiB,GAAO;;;;uCACX,GAAY;;;;iCACT,GAAQ;;;;uCACF,GAAc;;;;8CACP,GAAqB;;;;2CAC5B,GAAiB;;;;AAExC,KAAI,EAAE,GAAG,4BAAW,IAAI,CAAC,EAAE,CAAC,CAAC;;KAER,KAAK;eAAL,KAAK;;AACX,cADM,KAAK,CACV,KAAK,EAAE;;;+BADF,KAAK;;AAElB,oCAFa,KAAK,6CAEZ,KAAK,EAAE;;cA0BjB,YAAY,GAAG,UAAC,KAAK,EAAK;AACtB,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AACzB,sBAAK,EAAE,wBAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;cACvC,CAAC,CAAC;;AAEH,iBAAI,MAAK,KAAK,CAAC,SAAS,EAAE;AACtB,uBAAK,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;cACtC,CAAC;;AAEF,iBAAI,MAAK,KAAK,CAAC,QAAQ,EAAE;AACrB,uBAAK,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;cAC1C;;AAED,iBAAI,MAAK,KAAK,CAAC,QAAQ,EAAE;AACrB,uBAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;cAC9B;UACJ;;cAED,aAAa,GAAI,UAAC,KAAK,EAAM;;AAEzB,iBAAI,MAAK,KAAK,CAAC,QAAQ,IAAI,MAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAC;AAClD,uBAAK,QAAQ,CAAC;AACV,0BAAK,EAAE,IAAI;AACX,iCAAY,EAAE,KAAK;kBACtB,CAAC,CAAC;cACN,MAAM;AACH,uBAAK,QAAQ,CAAC;AACV,0BAAK,EAAE,KAAK;AACZ,iCAAY,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAK,KAAK,CAAC,YAAY,GAAG,MAAK,KAAK,CAAC,YAAY;kBACtF,CAAC,CAAC;cACN;UAEJ;;cAED,yBAAyB,GAAI,UAAC,QAAQ,EAAM;;AAExC,iBAAI,QAAQ,CAAC,KAAK,EAAE;AAChB,qBAAG,CAAC,wBAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,yBAAI,MAAK,KAAK,CAAC,QAAQ,EAAE;AACrB,+BAAK,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;sBACtC;AACD,2BAAK,QAAQ,CAAC;AACV,8BAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,8BAAK,EAAE,wBAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;sBACnC,CAAC,CAAC;kBACN;cACJ;UACJ;;cAeD,WAAW,GAAG,UAAC,KAAK,EAAK;AACrB,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,IAAI;AACX,iCAAgB,EAAE,IAAI;cACzB,CAAC,CAAC;;AAEH,iBAAI,MAAK,KAAK,CAAC,SAAS,EAAE;AACtB,uBAAK,QAAQ,CAAC;AACV,iCAAY,EAAE,KAAK;kBACtB,CAAC,CAAC;cACN;UACJ;;cAED,UAAU,GAAG,UAAC,KAAK,EAAK;AACpB,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,KAAK;AACZ,6BAAY,EAAE,CAAC,MAAK,KAAK,CAAC,KAAK;AAC/B,iCAAgB,EAAE,KAAK;cAC1B,CAAC,CAAC;UACN;;cAgBD,UAAU,GAAI,UAAC,KAAK,EAAM;AACtB,iBAAI,SAAS,GAAG;AACZ,yBAAQ,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAK,KAAK,CAAC,aAAa,CAAC,GAAE,KAAK;AACvF,+BAAc,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAK,aAAa,CAAC,KAAK,CAAC,GAAE,KAAK;AACpE,wBAAO,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AACjE,sBAAK,EAAE,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;cAC7D,CAAC;AACF,iBAAI,QAAQ,GAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,KAAM,CAAC;;AAExG,mBAAK,QAAQ,CAAC;AACV,iCAAgB,EAAE,SAAS;AAC3B,kCAAiB,EAAE,QAAQ;AAC3B,sBAAK,EAAE,QAAQ;cAClB,CAAC,CAAC;UACN;;cAED,aAAa,GAAI,UAAC,KAAK,EAAM;AACzB,oBAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;UAC9C;;cAED,YAAY,GAAI,UAAC,KAAK,EAAM;AACxB,oBAAO,KAAI,CAAC,IAAI,CAAC,KAAK,CAAC;eAAC;UAC3B;;cAED,UAAU,GAAI,UAAC,KAAK,EAAM;AACtB,oBAAQ,wBAAE,IAAI,CAAC,MAAK,KAAK,CAAC,cAAc,EAAE,UAAU,IAAI,EAAE;AACtD,qBAAI,OAAO,GAAI,IAAI,KAAK,KAAK,GAAI,IAAI,GAAG,EAAE,CAAC;AAC3C,wBAAO,OAAO;cACjB,CAAC,CAAC;UACN;;AAxJG,aAAI,CAAC,KAAK,GAAG;AACT,kBAAK,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAK,IAAI;AAC3D,kBAAK,EAAE,wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAClC,kBAAK,EAAE,KAAK;AACZ,kBAAK,EAAE,IAAI;AACX,yBAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS;AACnC,yBAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;AACrC,sBAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;AAC/B,6BAAgB,EAAE,KAAK;AACvB,iBAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACrB,0BAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AACvC,4BAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;AAC3C,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,6BAAgB,EAAE;AACd,yBAAQ,EAAE,KAAK;AACf,+BAAc,EAAE,KAAK;AACrB,wBAAO,EAAE,KAAK;AACd,sBAAK,EAAE,KAAK;AACZ,oBAAG,EAAE,KAAK;cACb;AACD,8BAAiB,EAAE,KAAK;UAC3B,CAAC;MACL;;kBA1BgB,KAAK;;gBA8Ef,mBAAG;AACN,iBAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,qBAAI,wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACvE,yBAAI,CAAC,QAAQ,CAAC;AACV,8BAAK,EAAE,KAAK;AACZ,qCAAY,EAAE,IAAI;sBACrB,CAAC,CAAC;kBACN;cACJ;;AAED,oBAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;UAC3B;;;gBAuBc,2BAAG;AACd,iBAAI,CAAC,QAAQ,CAAC;AACV,6BAAY,EAAE,IAAI;cACrB,CAAC,CAAC;UACN;;;gBAEQ,qBAAG;AACR,iBAAI,CAAC,QAAQ,CAAC;AACV,6BAAY,EAAE,KAAK;AACnB,iCAAgB,EAAE,KAAK;cAC1B,CAAC,CAAC;UACN;;;;;gBAkCK,kBAAG;;AAEL,iBAAI,iBAAiB,GAAG,EAAE,CAAC;AACvB,8BAAa,EAAM,IAAI;AACvB,8BAAa,EAAM,IAAI,CAAC,KAAK,CAAC,KAAK;AACnC,8BAAa,EAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AACpC,8BAAa,EAAM,IAAI,CAAC,KAAK,CAAC,KAAK;AACnC,iCAAgB,EAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AACpC,gCAAe,EAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AACnC,kCAAiB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;cACvC,CAAC,CAAC;;AAEH,iBAAI,SAAS,CAAC;;AAEd,iBAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACtB,0BAAS,GACL;AACJ,wBAAG,EAAC,mBAAmB;AACvB,4BAAO,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB;AACrC,yBAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;AACtB,0BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,8BAAS,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB;AACvC,0BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAkB;AACpC,mCAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe;AAC1C,kCAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc;AACxC,oCAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAgB;AAC5C,mCAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe;mBACpC;cACT,CAAC;;AAEF,oBACQ;;mBAAK,SAAS,EAAE,iBAAkB;iBAElC;;uBAAO,SAAS,EAAC,aAAa,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;qBACxD;;2BAAM,SAAS,EAAC,YAAY;yBAAE,IAAI,CAAC,KAAK,CAAC,IAAI;sBAAQ;kBAC7C;iBAER,uDACA,IAAI,CAAC,KAAK;AACd,gCAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAY;AACpC,8BAAS,EAAC,OAAO;AACjB,uBAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;AACpB,iCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;AACtC,0BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,6BAAQ,EAAE,IAAI,CAAC,YAAa;AAC5B,4BAAO,EAAE,IAAI,CAAC,WAAY;AAC1B,2BAAM,EAAE,IAAI,CAAC,UAAW;AACxB,iCAAY,EAAC,KAAK;oBACZ;iBAEF;AACJ,4BAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;AACjC,iCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;mBAChC;iBAEF;;uBAAK,SAAS,EAAC,iBAAiB;qBAChC;;2BAAG,SAAS,EAAC,kBAAkB,EAAC,YAAY,EAAE,IAAI,CAAC,eAAgB;;yBAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;sBAAK;qBACrG;;2BAAG,SAAS,EAAC,kBAAkB;;yBAAE,sDAAM,IAAI,EAAC,aAAa,GAAE;;sBAAK;kBAC1D;iBAET,SAAS;cAEJ,CACR;UACL;;;YA7NgB,KAAK;IAAS,mBAAM,SAAS;;sBAA7B,KAAK;AA8NzB,EAAC;;;;;;;;;;;;;;;;;;;;;;;kCCvOgB,GAAO;;;;KAEJ,IAAI;aAAJ,IAAI;;YAAJ,IAAI;2BAAJ,IAAI;;gCAAJ,IAAI;;;gBAAJ,IAAI;;YAEjB,kBAAG;AACP,eAAO,IAAI,CAAC,KAAK,CAAC,IAAI;;AAEpB,cAAK,cAAc;AACjB,kBACE;;eAAK,OAAO,EAAC,WAAW;aACxB,2CAAM,CAAC,EAAC,uSAE2E,GAAE;YAC/E,CACP;;AAEH,cAAK,aAAa;AAChB,kBACE;;eAAK,OAAO,EAAC,WAAW;aACxB,2CAAM,CAAC,EAAC,qUAE8F,GAAE;YAClG,CACP;;AAEH,cAAK,oBAAoB;AACvB,kBACE;;eAAK,OAAO,EAAC,WAAW;aACtB,2CAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,sEAAsE,GAAE;aAC/F,2CAAM,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,4MACoF,GAAE;YACzG,CACP;;AAEH,cAAK,QAAQ;AACX,kBACE;;eAAK,OAAO,EAAC,WAAW;aACxB,2CAAM,aAAU,SAAS,EAAC,aAAU,SAAS,EAAC,IAAI,EAAC,SAAS,EAAC,CAAC,EAAC,qjBAK5D,GAAE;YACC,CACP;AAAA,QACJ;MACF;;;UA5CkB,IAAI;IAAS,mBAAM,SAAS;;sBAA5B,IAAI;;;;;;;;;;;;;;;;;;;;;;;kCCFP,GAAO;;;;uCACX,GAAY;;;;2CACH,GAAiB;;;;AAExC,KAAI,EAAE,GAAG,4BAAW,IAAI,CAAC,EAAE,CAAC,CAAC;;KAER,UAAU;eAAV,UAAU;;AAChB,cADM,UAAU,CACf,KAAK,EAAE;+BADF,UAAU;;AAEvB,oCAFa,UAAU,6CAEjB,KAAK,EAAE;AACb,aAAI,CAAC,KAAK,GAAG;AACT,oBAAO,EAAE,kBAAkB;UAC9B,CAAC;MACL;;kBANgB,UAAU;;gBAQrB,kBAAG;AACL,iBAAI,UAAU,GAAG,EAAE,CAAC;AAChB,kCAAiB,EAAI,IAAI;AACzB,0BAAS,EAAY,IAAI,CAAC,KAAK,CAAC,OAAO;AACvC,4BAAW,EAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;cAC3C,CAAC,CAAC;;AAEH,oBACQ;;mBAAK,SAAS,EAAE,UAAW;iBACvB;;;qBAAO,IAAI,CAAC,KAAK,CAAC,YAAY;kBAAQ;cACpC,CACb;UACJ;;;YApBgB,UAAU;IAAS,mBAAM,SAAS;;sBAAlC,UAAU;;;;;;;ACN/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAgB;;AAEhB;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,EAAC;;;;;;;;;;;;;;;;;;;;;;;kCC/CiB,GAAO;;;;uCACX,GAAY;;;;iCACT,GAAQ;;;;2CACF,GAAiB;;;;AAExC,KAAI,EAAE,GAAG,4BAAW,IAAI,CAAC,EAAE,CAAC,CAAC;;KAER,iBAAiB;eAAjB,iBAAiB;;AACvB,cADM,iBAAiB,CACtB,KAAK,EAAE;+BADF,iBAAiB;;AAE9B,oCAFa,iBAAiB,6CAExB,KAAK,EAAE;AACb,aAAI,CAAC,KAAK,GAAG;AACT,kBAAK,EAAE,IAAI;AACX,0BAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AACvC,4BAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;AAC3C,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,2BAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACzC,iBAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;UACxB;MACJ;;kBAXgB,iBAAiB;;gBAa5B,kBAAG;AACL,iBAAI,cAAc,GAAG,EAAE,CAAC;AACpB,qCAAoB,EAAI,IAAI;AAC5B,0BAAS,EAAe,IAAI,CAAC,KAAK,CAAC,OAAO;AAC1C,4BAAW,EAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;cAC9C,CAAC,CAAC;;AAEH,iBAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,UAAS,IAAI,EAAE,CAAC,EAAE;AACjE,wBACQ;;uBAAM,GAAG,EAAE,CAAE,EAAC,SAAS,EAAC,UAAU;;qBAChC,IAAI;;kBACH,CACV;cACJ,CAAC,CAAC;;AAEH,iBAAI,cAAc,CAAC;;AAEnB,iBAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,+BAAc,GACV;;uBAAI,SAAS,EAAC,uBAAuB;qBACpC,IAAI,CAAC,KAAK,CAAC,IAAI;;kBACf;cACR,MAAM;AACH,+BAAc,GACV;;uBAAI,SAAS,EAAC,yBAAyB;qBACtC,IAAI,CAAC,KAAK,CAAC,IAAI;;kBACf;cACR;;AAED,oBACQ;;mBAAK,SAAS,EAAE,cAAe;iBAC3B;;uBAAK,SAAS,EAAC,qBAAqB;qBACnC,cAAc;qBACf;;2BAAI,SAAS,EAAC,YAAY;yBACtB;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAC,CAAE;6BACxD;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;iCAAE,IAAI,CAAC,KAAK,CAAC,aAAa;;8BAA2B;0BACpF;yBAEL;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,EAAC,CAAE;6BAC9D;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;;iCAAoB,IAAI,CAAC,KAAK,CAAC,eAAe;;8BAAuB;0BACpG;yBAEL;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAC,CAAE;6BACvD;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;;iCAAoB,IAAI,CAAC,KAAK,CAAC,cAAc;;8BAAe;0BAC3F;yBAEL;;+BAAI,SAAS,EAAE,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAC,CAAE;6BACrD;;mCAAG,SAAS,EAAC,YAAY;;iCAAE,sDAAM,IAAI,EAAC,oBAAoB,GAAE;;8BAAK;6BACjE;;mCAAG,SAAS,EAAC,cAAc;;iCAAE,sDAAM,IAAI,EAAC,cAAc,GAAE;;8BAAK;6BAC7D;;mCAAM,SAAS,EAAC,eAAe;;iCAAW,cAAc;8BAAQ;0BAChE;sBACJ;kBACH;cACJ,CACL;UACJ;;;YA1EgB,iBAAiB;IAAS,mBAAM,SAAS;;sBAAzC,iBAAiB;;;;;;;;;;;;;;ACP/B,UAAS,gBAAgB,CAAC,QAAQ,EACzC;AACI,SAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChD,SAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,UAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;AAC5B,aAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAC;AAAC,oBAAO,IAAI,CAAC,CAAC,CAAC,CAAC;UAAC;MAC3C;AACD,YAAO,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;kCCRG,GAAO;;;;uCACX,GAAY;;;;mCACZ,GAAQ;;;;4CACJ,GAAoB;;;;2CACrB,GAAmB;;;;iDACb,GAAyB;;;;4CACjB,GAAoB;;KAEtC,iBAAiB;eAAjB,iBAAiB;;AACf,cADF,iBAAiB,CACd,KAAK,EAAE;;;+BADV,iBAAiB;;AAEtB,oCAFK,iBAAiB,6CAEhB,KAAK,EAAE;;cAWjB,mBAAmB,GAAG,UAAC,KAAK,EAAM;AAC9B,iBAAI,CAAC,wBAAE,OAAO,CAAC,MAAK,KAAK,CAAC,eAAe,CAAC,EAAE;AACxC,uBAAK,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;cACvC,CAAC;AACF,mBAAK,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACtC,mBAAK,QAAQ,CAAC;AACV,yBAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;cAC/B,CAAC,CAAC;UACN;;cAED,0BAA0B,GAAG,UAAC,KAAK,EAAM;AACrC,mBAAK,QAAQ,CAAC;AACV,gCAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;cACtC,CAAC,CAAC;UACN;;cAED,eAAe,GAAG,UAAC,KAAK,EAAM;AAC1B,kBAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,iBAAI,UAAU,GAAG,MAAK,aAAa,CAAC,MAAK,KAAK,CAAC,KAAK,CAAC,IAC1C,MAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAC5B,MAAK,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;;AAE/C,iBAAI,UAAU,EAAE;;AACZ,yBAAI,IAAI,GAAG;AACP,8BAAK,EAAE,MAAK,KAAK,CAAC,KAAK;AACvB,iCAAQ,EAAE,MAAK,KAAK,CAAC,QAAQ;sBAChC;yBAAE,IAAI,QAAO;yBAAE,OAAO,aAAC;;AAGxB,yCAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAS,MAAM,EAAE;AAC7C,6BAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7B,6BAAI,GAAG,CAAC,CAAC,EAAE;AACP,iCAAI,CAAC,QAAQ,CAAC;AACV,6CAAY,EAAE,IAAI;AAClB,6CAAY,EAAE,GAAG,CAAC,OAAO;8BAC5B,CAAC,CAAC;0BACN,MAAM;AACH,iCAAI,IAAI,GAAG,kBAAkB,CAAC,uCAAiB,UAAU,CAAC,CAAC,CAAC;AAC5D,mCAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;0BAC1B;sBACJ,CAAC,CAAC;;cACN,MAAM;AACH,uBAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC1B,uBAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC7B,uBAAK,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;cACvC;UACJ;;cAED,mBAAmB,GAAG,UAAC,KAAK,EAAM;AAC9B,oBAAQ,KAAK,IAAI,MAAK,KAAK,CAAC,QAAQ,CAAE;UACzC;;cAED,gBAAgB,GAAG,UAAC,KAAK,EAAM;AAC3B,mBAAK,QAAQ,CAAC;AACV,sBAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;cAC5B,CAAC,CAAC;UACN;;cAED,aAAa,GAAG,UAAC,KAAK,EAAM;;AAExB,iBAAI,EAAE,GAAG,2JAA2J,CAAC;AACrK,oBAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;UACzB;;cAED,OAAO,GAAG,UAAC,KAAK,EAAM;AAClB,oBAAO,CAAC,wBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;UAC5B;;cAED,iBAAiB,GAAG,UAAC,KAAK,EAAM;AAC5B,mBAAK,QAAQ,CAAC;AACV,4BAAW,EAAE,KAAK;cACrB,CAAC,CAAC;UACN;;AAnFG,aAAI,CAAC,KAAK,GAAG;AACT,kBAAK,EAAE,IAAI;AACX,qBAAQ,EAAE,IAAI;AACd,4BAAe,EAAE,IAAI;AACrB,2BAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC;AAChD,yBAAY,EAAE,KAAK;AACnB,yBAAY,EAAE,cAAc;UAC/B,CAAC;MACL;;kBAXQ,iBAAiB;;gBAwFpB,kBAAG;AACL,oBACQ;;mBAAK,SAAS,EAAC,uBAAuB;iBAClC;;uBAAK,SAAS,EAAC,qBAAqB;qBAChC;;;;sBAAc;qBACd;;;;sBAAgB;qBACxB;;2BAAM,QAAQ,EAAE,IAAI,CAAC,eAAgB;yBAEjC;AACI,iCAAI,EAAC,MAAM;AACX,gCAAG,EAAC,OAAO;AACX,iCAAI,EAAC,MAAM;AACX,yCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AAC/B,qCAAQ,EAAE,IAAI,CAAC,aAAc;AAC7B,kCAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;AACxB,qCAAQ,EAAE,IAAI,CAAC,gBAAiB;AAChC,yCAAY,EAAC,WAAW;AACxB,yCAAY,EAAC,WAAW;AACxB,yCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe;2BAC1C;yBAEF;AACI,iCAAI,EAAC,IAAI;AACT,iCAAI,EAAC,UAAU;AACf,gCAAG,EAAC,UAAU;AACd,sCAAS,EAAC,MAAM;AAChB,0CAAa,EAAC,GAAG;AACjB,4CAAe,EAAC,GAAG;AACnB,2CAAc,EAAC,GAAG;AAClB,2CAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe;AAC1C,kCAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU;AAC5B,yCAAY,EAAC,QAAQ;AACrB,qCAAQ,EAAE,IAAI,CAAC,mBAAoB;2BACrC;yBAEF;AACI,iCAAI,EAAC,MAAM;AACX,gCAAG,EAAC,iBAAiB;AACrB,iCAAI,EAAC,UAAU;AACf,qCAAQ,EAAE,IAAI,CAAC,mBAAoB;AACnC,kCAAK,EAAE,IAAI,CAAC,KAAK,CAAC,eAAgB;AAClC,qCAAQ,EAAE,IAAI,CAAC,0BAA2B;AAC1C,yCAAY,EAAC,OAAO;AACpB,yCAAY,EAAC,iBAAiB;2BAChC;yBAEF;AACI,oCAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;AACjC,yCAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;2BACxC;yBAEF;;;AACI,qCAAI,EAAC,QAAQ;AACb,0CAAS,EAAC,oBAAoB;;0BAEzB;sBACR;kBACL;cACJ,CACF;UACL;;;YApJQ,iBAAiB;IAAS,mBAAM,SAAS;;;;KAuJjC,QAAQ;eAAR,QAAQ;;cAAR,QAAQ;+BAAR,QAAQ;;oCAAR,QAAQ;;;kBAAR,QAAQ;;gBACnB,kBAAG;AACL,oBACQ;;mBAAK,SAAS,EAAC,qBAAqB;iBAChC;;uBAAK,SAAS,EAAC,0BAA0B;qBACrC,iCAAC,iBAAiB,OAAE;kBAClB;cACJ,CACZ;UACL;;;YATgB,QAAQ;IAAS,mBAAM,SAAS;;sBAAhC,QAAQ,C","file":"register.js","sourcesContent":["import ReactDOM from 'react-dom';\nimport React from 'react';\nimport Register from './signup';\n\nReactDOM.render(<Register/>, document.getElementById('main'));\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/register.jsx\n **/","'use strict';\n\nmodule.exports = require('react/lib/ReactDOM');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-dom/index.js\n ** module id = 1\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdates = require('./ReactUpdates');\nvar ReactVersion = require('./ReactVersion');\n\nvar findDOMNode = require('./findDOMNode');\nvar renderSubtreeIntoContainer = require('./renderSubtreeIntoContainer');\nvar warning = require('fbjs/lib/warning');\n\nReactDefaultInjection.inject();\n\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\n\nvar React = {\n findDOMNode: findDOMNode,\n render: render,\n unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n version: ReactVersion,\n\n /* eslint-disable camelcase */\n unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n CurrentOwner: ReactCurrentOwner,\n InstanceHandles: ReactInstanceHandles,\n Mount: ReactMount,\n Reconciler: ReactReconciler,\n TextComponent: ReactDOMTextComponent\n });\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n // First check if devtools is not installed\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');\n }\n }\n\n // If we're in IE8, check to see if we are in compatibility mode and provide\n // information on preventing compatibility mode\n var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : undefined;\n\n var expectedFeatures = [\n // shims\n Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,\n\n // shams\n Object.create, Object.freeze];\n\n for (var i = 0; i < expectedFeatures.length; i++) {\n if (!expectedFeatures[i]) {\n console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');\n break;\n }\n }\n }\n}\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOM.js\n ** module id = 2\n ** module chunks = 0 1\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/process/browser.js\n ** module id = 3\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCurrentOwner.js\n ** module id = 4\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactMount = require('./ReactMount');\n\nvar assign = require('./Object.assign');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setTextContent = require('./setTextContent');\nvar validateDOMNesting = require('./validateDOMNesting');\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n * - When mounting text into the DOM, adjacent text nodes are merged.\n * - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings in elements so that they can undergo\n * the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (props) {\n // This constructor and its argument is currently used by mocks.\n};\n\nassign(ReactDOMTextComponent.prototype, {\n\n /**\n * @param {ReactText} text\n * @internal\n */\n construct: function (text) {\n // TODO: This is really a ReactText (ReactNode), not a ReactElement\n this._currentElement = text;\n this._stringText = '' + text;\n\n // Properties\n this._rootNodeID = null;\n this._mountIndex = 0;\n },\n\n /**\n * Creates the markup for this text node. This node is not intended to have\n * any features besides containing text content.\n *\n * @param {string} rootID DOM ID of the root node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {string} Markup for this text node.\n * @internal\n */\n mountComponent: function (rootID, transaction, context) {\n if (process.env.NODE_ENV !== 'production') {\n if (context[validateDOMNesting.ancestorInfoContextKey]) {\n validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);\n }\n }\n\n this._rootNodeID = rootID;\n if (transaction.useCreateElement) {\n var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n var el = ownerDocument.createElement('span');\n DOMPropertyOperations.setAttributeForID(el, rootID);\n // Populate node cache\n ReactMount.getID(el);\n setTextContent(el, this._stringText);\n return el;\n } else {\n var escapedText = escapeTextContentForBrowser(this._stringText);\n\n if (transaction.renderToStaticMarkup) {\n // Normally we'd wrap this in a `span` for the reasons stated above, but\n // since this is a situation where React won't take over (static pages),\n // we can simply return the text as it is.\n return escapedText;\n }\n\n return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';\n }\n },\n\n /**\n * Updates this component by updating the text content.\n *\n * @param {ReactText} nextText The next text content\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n receiveComponent: function (nextText, transaction) {\n if (nextText !== this._currentElement) {\n this._currentElement = nextText;\n var nextStringText = '' + nextText;\n if (nextStringText !== this._stringText) {\n // TODO: Save this as pending props and use performUpdateIfNecessary\n // and/or updateComponent to do the actual update for consistency with\n // other component types?\n this._stringText = nextStringText;\n var node = ReactMount.getNode(this._rootNodeID);\n DOMChildrenOperations.updateTextContent(node, nextStringText);\n }\n }\n },\n\n unmountComponent: function () {\n ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n }\n\n});\n\nmodule.exports = ReactDOMTextComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextComponent.js\n ** module id = 5\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar Danger = require('./Danger');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\nvar ReactPerf = require('./ReactPerf');\n\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nfunction insertChildAt(parentNode, childNode, index) {\n // By exploiting arrays returning `undefined` for an undefined index, we can\n // rely exclusively on `insertBefore(node, null)` instead of also using\n // `appendChild(node)`. However, using `undefined` is not allowed by all\n // browsers so we must replace it with `null`.\n\n // fix render order error in safari\n // IE8 will throw error when index out of list size.\n var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);\n\n parentNode.insertBefore(childNode, beforeChild);\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\n\n updateTextContent: setTextContent,\n\n /**\n * Updates a component's children by processing a series of updates. The\n * update configurations are each expected to have a `parentNode` property.\n *\n * @param {array<object>} updates List of update configurations.\n * @param {array<string>} markupList List of markup strings.\n * @internal\n */\n processUpdates: function (updates, markupList) {\n var update;\n // Mapping from parent IDs to initial child orderings.\n var initialChildren = null;\n // List of children that will be moved or removed.\n var updatedChildren = null;\n\n for (var i = 0; i < updates.length; i++) {\n update = updates[i];\n if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\n var updatedIndex = update.fromIndex;\n var updatedChild = update.parentNode.childNodes[updatedIndex];\n var parentID = update.parentID;\n\n !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;\n\n initialChildren = initialChildren || {};\n initialChildren[parentID] = initialChildren[parentID] || [];\n initialChildren[parentID][updatedIndex] = updatedChild;\n\n updatedChildren = updatedChildren || [];\n updatedChildren.push(updatedChild);\n }\n }\n\n var renderedMarkup;\n // markupList is either a list of markup or just a list of elements\n if (markupList.length && typeof markupList[0] === 'string') {\n renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\n } else {\n renderedMarkup = markupList;\n }\n\n // Remove updated children first so that `toIndex` is consistent.\n if (updatedChildren) {\n for (var j = 0; j < updatedChildren.length; j++) {\n updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\n }\n }\n\n for (var k = 0; k < updates.length; k++) {\n update = updates[k];\n switch (update.type) {\n case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);\n break;\n case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);\n break;\n case ReactMultiChildUpdateTypes.SET_MARKUP:\n setInnerHTML(update.parentNode, update.content);\n break;\n case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n setTextContent(update.parentNode, update.content);\n break;\n case ReactMultiChildUpdateTypes.REMOVE_NODE:\n // Already removed by the for-loop above.\n break;\n }\n }\n }\n\n};\n\nReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {\n updateTextContent: 'updateTextContent'\n});\n\nmodule.exports = DOMChildrenOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMChildrenOperations.js\n ** module id = 6\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar createNodesFromMarkup = require('fbjs/lib/createNodesFromMarkup');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getMarkupWrap = require('fbjs/lib/getMarkupWrap');\nvar invariant = require('fbjs/lib/invariant');\n\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\/>]+)/;\nvar RESULT_INDEX_ATTR = 'data-danger-index';\n\n/**\n * Extracts the `nodeName` from a string of markup.\n *\n * NOTE: Extracting the `nodeName` does not require a regular expression match\n * because we make assumptions about React-generated markup (i.e. there are no\n * spaces surrounding the opening tag and there is at least one attribute).\n *\n * @param {string} markup String of markup.\n * @return {string} Node name of the supplied markup.\n * @see http://jsperf.com/extract-nodename\n */\nfunction getNodeName(markup) {\n return markup.substring(1, markup.indexOf(' '));\n}\n\nvar Danger = {\n\n /**\n * Renders markup into an array of nodes. The markup is expected to render\n * into a list of root nodes. Also, the length of `resultList` and\n * `markupList` should be the same.\n *\n * @param {array<string>} markupList List of markup strings to render.\n * @return {array<DOMElement>} List of rendered nodes.\n * @internal\n */\n dangerouslyRenderMarkup: function (markupList) {\n !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;\n var nodeName;\n var markupByNodeName = {};\n // Group markup by `nodeName` if a wrap is necessary, else by '*'.\n for (var i = 0; i < markupList.length; i++) {\n !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;\n nodeName = getNodeName(markupList[i]);\n nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\n markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\n markupByNodeName[nodeName][i] = markupList[i];\n }\n var resultList = [];\n var resultListAssignmentCount = 0;\n for (nodeName in markupByNodeName) {\n if (!markupByNodeName.hasOwnProperty(nodeName)) {\n continue;\n }\n var markupListByNodeName = markupByNodeName[nodeName];\n\n // This for-in loop skips the holes of the sparse array. The order of\n // iteration should follow the order of assignment, which happens to match\n // numerical index order, but we don't rely on that.\n var resultIndex;\n for (resultIndex in markupListByNodeName) {\n if (markupListByNodeName.hasOwnProperty(resultIndex)) {\n var markup = markupListByNodeName[resultIndex];\n\n // Push the requested markup with an additional RESULT_INDEX_ATTR\n // attribute. If the markup does not start with a < character, it\n // will be discarded below (with an appropriate console.error).\n markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,\n // This index will be parsed back out below.\n '$1 ' + RESULT_INDEX_ATTR + '=\"' + resultIndex + '\" ');\n }\n }\n\n // Render each group of markup with similar wrapping `nodeName`.\n var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.\n );\n\n for (var j = 0; j < renderNodes.length; ++j) {\n var renderNode = renderNodes[j];\n if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\n\n resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\n renderNode.removeAttribute(RESULT_INDEX_ATTR);\n\n !!resultList.hasOwnProperty(resultIndex) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined;\n\n resultList[resultIndex] = renderNode;\n\n // This should match resultList.length and markupList.length when\n // we're done.\n resultListAssignmentCount += 1;\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Danger: Discarding unexpected node:', renderNode);\n }\n }\n }\n\n // Although resultList was populated out of order, it should now be a dense\n // array.\n !(resultListAssignmentCount === resultList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined;\n\n !(resultList.length === markupList.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined;\n\n return resultList;\n },\n\n /**\n * Replaces a node with a string of markup at its current position within its\n * parent. The markup must render into a single root node.\n *\n * @param {DOMElement} oldChild Child node to replace.\n * @param {string} markup Markup to render in place of the child node.\n * @internal\n */\n dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined;\n !(oldChild.tagName.toLowerCase() !== 'html') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined;\n\n var newChild;\n if (typeof markup === 'string') {\n newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n } else {\n newChild = markup;\n }\n oldChild.parentNode.replaceChild(newChild, oldChild);\n }\n\n};\n\nmodule.exports = Danger;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Danger.js\n ** module id = 7\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 8\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createNodesFromMarkup\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n var nodeNameMatch = markup.match(nodeNamePattern);\n return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n var node = dummyNode;\n !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined;\n var nodeName = getNodeName(markup);\n\n var wrap = nodeName && getMarkupWrap(nodeName);\n if (wrap) {\n node.innerHTML = wrap[1] + markup + wrap[2];\n\n var wrapDepth = wrap[0];\n while (wrapDepth--) {\n node = node.lastChild;\n }\n } else {\n node.innerHTML = markup;\n }\n\n var scripts = node.getElementsByTagName('script');\n if (scripts.length) {\n !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined;\n createArrayFromMixed(scripts).forEach(handleScript);\n }\n\n var nodes = createArrayFromMixed(node.childNodes);\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/createNodesFromMarkup.js\n ** module id = 9\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createArrayFromMixed\n * @typechecks\n */\n\n'use strict';\n\nvar toArray = require('./toArray');\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n * A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n * Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n return(\n // not null/false\n !!obj && (\n // arrays are objects, NodeLists are functions in Safari\n typeof obj == 'object' || typeof obj == 'function') &&\n // quacks like an array\n 'length' in obj &&\n // not window\n !('setInterval' in obj) &&\n // no DOM node should be considered an array-like\n // a 'select' element has 'length' and 'item' properties on IE8\n typeof obj.nodeType != 'number' && (\n // a real array\n Array.isArray(obj) ||\n // arguments\n 'callee' in obj ||\n // HTMLCollection/NodeList\n 'item' in obj)\n );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n * var createArrayFromMixed = require('createArrayFromMixed');\n *\n * function takesOneOrMoreThings(things) {\n * things = createArrayFromMixed(things);\n * ...\n * }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n if (!hasArrayNature(obj)) {\n return [obj];\n } else if (Array.isArray(obj)) {\n return obj.slice();\n } else {\n return toArray(obj);\n }\n}\n\nmodule.exports = createArrayFromMixed;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/createArrayFromMixed.js\n ** module id = 10\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule toArray\n * @typechecks\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n var length = obj.length;\n\n // Some browse builtin objects can report typeof 'function' (e.g. NodeList in\n // old versions of Safari).\n !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined;\n\n !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined;\n\n !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined;\n\n // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n // without method will throw during the slice call and skip straight to the\n // fallback.\n if (obj.hasOwnProperty) {\n try {\n return Array.prototype.slice.call(obj);\n } catch (e) {\n // IE < 9 does not support Array#slice on collections objects\n }\n }\n\n // Fall back to copying key by key. This assumes all keys have a value,\n // so will not preserve sparsely populated inputs.\n var ret = Array(length);\n for (var ii = 0; ii < length; ii++) {\n ret[ii] = obj[ii];\n }\n return ret;\n}\n\nmodule.exports = toArray;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/toArray.js\n ** module id = 11\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function (condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/invariant.js\n ** module id = 12\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getMarkupWrap\n */\n\n/*eslint-disable fb-www/unsafe-html */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n '*': [1, '?<div>', '</div>'],\n\n 'area': [1, '<map>', '</map>'],\n 'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n 'legend': [1, '<fieldset>', '</fieldset>'],\n 'param': [1, '<object>', '</object>'],\n 'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n 'optgroup': selectWrap,\n 'option': selectWrap,\n\n 'caption': tableWrap,\n 'colgroup': tableWrap,\n 'tbody': tableWrap,\n 'tfoot': tableWrap,\n 'thead': tableWrap,\n\n 'td': trWrap,\n 'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n markupWrap[nodeName] = svgWrap;\n shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;\n if (!markupWrap.hasOwnProperty(nodeName)) {\n nodeName = '*';\n }\n if (!shouldWrap.hasOwnProperty(nodeName)) {\n if (nodeName === '*') {\n dummyNode.innerHTML = '<link />';\n } else {\n dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n }\n shouldWrap[nodeName] = !dummyNode.firstChild;\n }\n return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getMarkupWrap.js\n ** module id = 13\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyFunction\n */\n\n\"use strict\";\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nfunction emptyFunction() {}\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyFunction.js\n ** module id = 14\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n INSERT_MARKUP: null,\n MOVE_EXISTING: null,\n REMOVE_NODE: null,\n SET_MARKUP: null,\n TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\n ** module id = 15\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyMirror\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('./invariant');\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function (obj) {\n var ret = {};\n var key;\n !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;\n for (key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n ret[key] = key;\n }\n return ret;\n};\n\nmodule.exports = keyMirror;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyMirror.js\n ** module id = 16\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPerf\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * ReactPerf is a general AOP system designed to measure performance. This\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\n */\nvar ReactPerf = {\n /**\n * Boolean to enable/disable measurement. Set to false by default to prevent\n * accidental logging and perf loss.\n */\n enableMeasure: false,\n\n /**\n * Holds onto the measure function in use. By default, don't measure\n * anything, but we'll override this if we inject a measure function.\n */\n storedMeasure: _noMeasure,\n\n /**\n * @param {object} object\n * @param {string} objectName\n * @param {object<string>} methodNames\n */\n measureMethods: function (object, objectName, methodNames) {\n if (process.env.NODE_ENV !== 'production') {\n for (var key in methodNames) {\n if (!methodNames.hasOwnProperty(key)) {\n continue;\n }\n object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);\n }\n }\n },\n\n /**\n * Use this to wrap methods you want to measure. Zero overhead in production.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\n measure: function (objName, fnName, func) {\n if (process.env.NODE_ENV !== 'production') {\n var measuredFunc = null;\n var wrapper = function () {\n if (ReactPerf.enableMeasure) {\n if (!measuredFunc) {\n measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\n }\n return measuredFunc.apply(this, arguments);\n }\n return func.apply(this, arguments);\n };\n wrapper.displayName = objName + '_' + fnName;\n return wrapper;\n }\n return func;\n },\n\n injection: {\n /**\n * @param {function} measure\n */\n injectMeasure: function (measure) {\n ReactPerf.storedMeasure = measure;\n }\n }\n};\n\n/**\n * Simply passes through the measured function, without measuring it.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\nfunction _noMeasure(objName, fnName, func) {\n return func;\n}\n\nmodule.exports = ReactPerf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPerf.js\n ** module id = 17\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n/* globals MSApp */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = function (node, html) {\n node.innerHTML = html;\n};\n\n// Win8 apps: Allow all html to be inserted\nif (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n setInnerHTML = function (node, html) {\n MSApp.execUnsafeLocalFunction(function () {\n node.innerHTML = html;\n });\n };\n}\n\nif (ExecutionEnvironment.canUseDOM) {\n // IE8: When updating a just created node with innerHTML only leading\n // whitespace is removed. When updating an existing node with innerHTML\n // whitespace in root TextNodes is also collapsed.\n // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n // Feature detection; only IE8 is known to behave improperly like this.\n var testElement = document.createElement('div');\n testElement.innerHTML = ' ';\n if (testElement.innerHTML === '') {\n setInnerHTML = function (node, html) {\n // Magic theory: IE8 supposedly differentiates between added and updated\n // nodes when processing innerHTML, innerHTML on updated nodes suffers\n // from worse whitespace behavior. Re-adding a node like this triggers\n // the initial and more favorable whitespace behavior.\n // TODO: What to do on a detached node?\n if (node.parentNode) {\n node.parentNode.replaceChild(node, node);\n }\n\n // We also implement a workaround for non-visible tags disappearing into\n // thin air on IE8, this only happens if there is no visible text\n // in-front of the non-visible tags. Piggyback on the whitespace fix\n // and simply check if any non-visible tags appear in the source.\n if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n // Recover leading whitespace by temporarily prepending any character.\n // \\uFEFF has the potential advantage of being zero-width/invisible.\n // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n // the actual Unicode character (by Babel, for example).\n // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n // deleteData leaves an empty `TextNode` which offsets the index of all\n // children. Definitely want to avoid this.\n var textNode = node.firstChild;\n if (textNode.data.length === 1) {\n node.removeChild(textNode);\n } else {\n textNode.deleteData(0, 1);\n }\n } else {\n node.innerHTML = html;\n }\n };\n }\n}\n\nmodule.exports = setInnerHTML;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setInnerHTML.js\n ** module id = 18\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n if (!('textContent' in document.documentElement)) {\n setTextContent = function (node, text) {\n setInnerHTML(node, escapeTextContentForBrowser(text));\n };\n }\n}\n\nmodule.exports = setTextContent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setTextContent.js\n ** module id = 19\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\nvar ESCAPE_LOOKUP = {\n '&': '&',\n '>': '>',\n '<': '<',\n '\"': '"',\n '\\'': '''\n};\n\nvar ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escaper(match) {\n return ESCAPE_LOOKUP[match];\n}\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n return ('' + text).replace(ESCAPE_REGEX, escaper);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/escapeTextContentForBrowser.js\n ** module id = 20\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactPerf = require('./ReactPerf');\n\nvar quoteAttributeValueForBrowser = require('./quoteAttributeValueForBrowser');\nvar warning = require('fbjs/lib/warning');\n\n// Simplified subset\nvar VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\\w\\.\\-]*$/;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n return true;\n }\n if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;\n return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var reactProps = {\n children: true,\n dangerouslySetInnerHTML: true,\n key: true,\n ref: true\n };\n var warnedProperties = {};\n\n var warnUnknownProperty = function (name) {\n if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n return;\n }\n\n warnedProperties[name] = true;\n var lowerCasedName = name.toLowerCase();\n\n // data-* attributes should be lowercase; suggest the lowercase version\n var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\n // For now, only warn when we have a suggested correction. This prevents\n // logging too much when using transferPropsTo.\n process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;\n };\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n /**\n * Creates markup for the ID property.\n *\n * @param {string} id Unescaped ID.\n * @return {string} Markup string.\n */\n createMarkupForID: function (id) {\n return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n },\n\n setAttributeForID: function (node, id) {\n node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n },\n\n /**\n * Creates markup for a property.\n *\n * @param {string} name\n * @param {*} value\n * @return {?string} Markup string, or null if the property was invalid.\n */\n createMarkupForProperty: function (name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n if (shouldIgnoreValue(propertyInfo, value)) {\n return '';\n }\n var attributeName = propertyInfo.attributeName;\n if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n return attributeName + '=\"\"';\n }\n return attributeName + '=' + quoteAttributeValueForBrowser(value);\n } else if (DOMProperty.isCustomAttribute(name)) {\n if (value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n } else if (process.env.NODE_ENV !== 'production') {\n warnUnknownProperty(name);\n }\n return null;\n },\n\n /**\n * Creates markup for a custom property.\n *\n * @param {string} name\n * @param {*} value\n * @return {string} Markup string, or empty string if the property was invalid.\n */\n createMarkupForCustomAttribute: function (name, value) {\n if (!isAttributeNameSafe(name) || value == null) {\n return '';\n }\n return name + '=' + quoteAttributeValueForBrowser(value);\n },\n\n /**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n setValueForProperty: function (node, name, value) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, value);\n } else if (shouldIgnoreValue(propertyInfo, value)) {\n this.deleteValueForProperty(node, name);\n } else if (propertyInfo.mustUseAttribute) {\n var attributeName = propertyInfo.attributeName;\n var namespace = propertyInfo.attributeNamespace;\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n if (namespace) {\n node.setAttributeNS(namespace, attributeName, '' + value);\n } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n node.setAttribute(attributeName, '');\n } else {\n node.setAttribute(attributeName, '' + value);\n }\n } else {\n var propName = propertyInfo.propertyName;\n // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\n // property type before comparing; only `value` does and is string.\n if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propName] = value;\n }\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n DOMPropertyOperations.setValueForAttribute(node, name, value);\n } else if (process.env.NODE_ENV !== 'production') {\n warnUnknownProperty(name);\n }\n },\n\n setValueForAttribute: function (node, name, value) {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (value == null) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, '' + value);\n }\n },\n\n /**\n * Deletes the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\n deleteValueForProperty: function (node, name) {\n var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, undefined);\n } else if (propertyInfo.mustUseAttribute) {\n node.removeAttribute(propertyInfo.attributeName);\n } else {\n var propName = propertyInfo.propertyName;\n var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);\n if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {\n node[propName] = defaultValue;\n }\n }\n } else if (DOMProperty.isCustomAttribute(name)) {\n node.removeAttribute(name);\n } else if (process.env.NODE_ENV !== 'production') {\n warnUnknownProperty(name);\n }\n }\n\n};\n\nReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {\n setValueForProperty: 'setValueForProperty',\n setValueForAttribute: 'setValueForAttribute',\n deleteValueForProperty: 'deleteValueForProperty'\n});\n\nmodule.exports = DOMPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMPropertyOperations.js\n ** module id = 21\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n /**\n * Mapping from normalized, camelcased property names to a configuration that\n * specifies how the associated DOM property should be accessed or rendered.\n */\n MUST_USE_ATTRIBUTE: 0x1,\n MUST_USE_PROPERTY: 0x2,\n HAS_SIDE_EFFECTS: 0x4,\n HAS_BOOLEAN_VALUE: 0x8,\n HAS_NUMERIC_VALUE: 0x10,\n HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\n HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\n\n /**\n * Inject some specialized knowledge about the DOM. This takes a config object\n * with the following properties:\n *\n * isCustomAttribute: function that given an attribute name will return true\n * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n * attributes where it's impossible to enumerate all of the possible\n * attribute names,\n *\n * Properties: object mapping DOM property name to one of the\n * DOMPropertyInjection constants or null. If your attribute isn't in here,\n * it won't get written to the DOM.\n *\n * DOMAttributeNames: object mapping React attribute name to the DOM\n * attribute name. Attribute names not specified use the **lowercase**\n * normalized name.\n *\n * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n * attribute namespace URL. (Attribute names not specified use no namespace.)\n *\n * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n * Property names not specified use the normalized name.\n *\n * DOMMutationMethods: Properties that require special mutation methods. If\n * `value` is undefined, the mutation method should unset the property.\n *\n * @param {object} domPropertyConfig the config as described above.\n */\n injectDOMPropertyConfig: function (domPropertyConfig) {\n var Injection = DOMPropertyInjection;\n var Properties = domPropertyConfig.Properties || {};\n var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n if (domPropertyConfig.isCustomAttribute) {\n DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n }\n\n for (var propName in Properties) {\n !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property ' + '\\'%s\\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;\n\n var lowerCased = propName.toLowerCase();\n var propConfig = Properties[propName];\n\n var propertyInfo = {\n attributeName: lowerCased,\n attributeNamespace: null,\n propertyName: propName,\n mutationMethod: null,\n\n mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),\n mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),\n hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n };\n\n !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;\n !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;\n !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;\n\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[lowerCased] = propName;\n }\n\n if (DOMAttributeNames.hasOwnProperty(propName)) {\n var attributeName = DOMAttributeNames[propName];\n propertyInfo.attributeName = attributeName;\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[attributeName] = propName;\n }\n }\n\n if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n }\n\n if (DOMPropertyNames.hasOwnProperty(propName)) {\n propertyInfo.propertyName = DOMPropertyNames[propName];\n }\n\n if (DOMMutationMethods.hasOwnProperty(propName)) {\n propertyInfo.mutationMethod = DOMMutationMethods[propName];\n }\n\n DOMProperty.properties[propName] = propertyInfo;\n }\n }\n};\nvar defaultValueCache = {};\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n * > DOMProperty.isValid['id']\n * true\n * > DOMProperty.isValid['foobar']\n * undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n ID_ATTRIBUTE_NAME: 'data-reactid',\n\n /**\n * Map from property \"standard name\" to an object with info about how to set\n * the property in the DOM. Each object contains:\n *\n * attributeName:\n * Used when rendering markup or with `*Attribute()`.\n * attributeNamespace\n * propertyName:\n * Used on DOM node instances. (This includes properties that mutate due to\n * external factors.)\n * mutationMethod:\n * If non-null, used instead of the property or `setAttribute()` after\n * initial render.\n * mustUseAttribute:\n * Whether the property must be accessed and mutated using `*Attribute()`.\n * (This includes anything that fails `<propName> in <element>`.)\n * mustUseProperty:\n * Whether the property must be accessed and mutated as an object property.\n * hasSideEffects:\n * Whether or not setting a value causes side effects such as triggering\n * resources to be loaded or text selection changes. If true, we read from\n * the DOM before updating to ensure that the value is only set if it has\n * changed.\n * hasBooleanValue:\n * Whether the property should be removed when set to a falsey value.\n * hasNumericValue:\n * Whether the property must be numeric or parse as a numeric and should be\n * removed when set to a falsey value.\n * hasPositiveNumericValue:\n * Whether the property must be positive numeric or parse as a positive\n * numeric and should be removed when set to a falsey value.\n * hasOverloadedBooleanValue:\n * Whether the property can be used as a flag as well as with a value.\n * Removed when strictly equal to false; present without a value when\n * strictly equal to true; present with a value otherwise.\n */\n properties: {},\n\n /**\n * Mapping from lowercase property names to the properly cased version, used\n * to warn in the case of missing properties. Available only in __DEV__.\n * @type {Object}\n */\n getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,\n\n /**\n * All of the isCustomAttribute() functions that have been injected.\n */\n _isCustomAttributeFunctions: [],\n\n /**\n * Checks whether a property name is a custom attribute.\n * @method\n */\n isCustomAttribute: function (attributeName) {\n for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n if (isCustomAttributeFn(attributeName)) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Returns the default property value for a DOM property (i.e., not an\n * attribute). Most default values are '' or false, but not all. Worse yet,\n * some (in particular, `type`) vary depending on the type of element.\n *\n * TODO: Is it better to grab all the possible properties when creating an\n * element to avoid having to create the same element twice?\n */\n getDefaultValueForProperty: function (nodeName, prop) {\n var nodeDefaults = defaultValueCache[nodeName];\n var testElement;\n if (!nodeDefaults) {\n defaultValueCache[nodeName] = nodeDefaults = {};\n }\n if (!(prop in nodeDefaults)) {\n testElement = document.createElement(nodeName);\n nodeDefaults[prop] = testElement[prop];\n }\n return nodeDefaults[prop];\n },\n\n injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMProperty.js\n ** module id = 22\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule quoteAttributeValueForBrowser\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/quoteAttributeValueForBrowser.js\n ** module id = 23\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule warning\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function (condition, format) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n };\n}\n\nmodule.exports = warning;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/warning.js\n ** module id = 24\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar ReactMount = require('./ReactMount');\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,\n\n /**\n * If a particular environment requires that some resources be cleaned up,\n * specify this in the injected Mixin. In the DOM, we would likely want to\n * purge any cached node ID lookups.\n *\n * @private\n */\n unmountIDFromEnvironment: function (rootNodeID) {\n ReactMount.purgeID(rootNodeID);\n }\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\n ** module id = 25\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMIDOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Errors for properties that should not be updated with `updatePropertyByID()`.\n *\n * @type {object}\n * @private\n */\nvar INVALID_PROPERTY_ERRORS = {\n dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\n style: '`style` must be set using `updateStylesByID()`.'\n};\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n /**\n * Updates a DOM node with new property values. This should only be used to\n * update DOM properties in `DOMProperty`.\n *\n * @param {string} id ID of the node to update.\n * @param {string} name A valid property name, see `DOMProperty`.\n * @param {*} value New value of the property.\n * @internal\n */\n updatePropertyByID: function (id, name, value) {\n var node = ReactMount.getNode(id);\n !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;\n\n // If we're updating to null or undefined, we should remove the property\n // from the DOM node instead of inadvertantly setting to a string. This\n // brings us in line with the same behavior we have on initial render.\n if (value != null) {\n DOMPropertyOperations.setValueForProperty(node, name, value);\n } else {\n DOMPropertyOperations.deleteValueForProperty(node, name);\n }\n },\n\n /**\n * Replaces a DOM node that exists in the document with markup.\n *\n * @param {string} id ID of child to be replaced.\n * @param {string} markup Dangerous markup to inject in place of child.\n * @internal\n * @see {Danger.dangerouslyReplaceNodeWithMarkup}\n */\n dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {\n var node = ReactMount.getNode(id);\n DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\n },\n\n /**\n * Updates a component's children by processing a series of updates.\n *\n * @param {array<object>} updates List of update configurations.\n * @param {array<string>} markup List of markup strings.\n * @internal\n */\n dangerouslyProcessChildrenUpdates: function (updates, markup) {\n for (var i = 0; i < updates.length; i++) {\n updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\n }\n DOMChildrenOperations.processUpdates(updates, markup);\n }\n};\n\nReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {\n dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',\n dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'\n});\n\nmodule.exports = ReactDOMIDOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMIDOperations.js\n ** module id = 26\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactElement = require('./ReactElement');\nvar ReactEmptyComponentRegistry = require('./ReactEmptyComponentRegistry');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar containsNode = require('fbjs/lib/containsNode');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\nvar setInnerHTML = require('./setInnerHTML');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar nodeCache = {};\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);\n\n/** Mapping from reactRootID to React component instance. */\nvar instancesByReactRootID = {};\n\n/** Mapping from reactRootID to `container` nodes. */\nvar containersByReactRootID = {};\n\nif (process.env.NODE_ENV !== 'production') {\n /** __DEV__-only mapping from reactRootID to root elements. */\n var rootElementsByReactRootID = {};\n}\n\n// Used to store breadth-first search state in findComponentRoot.\nvar findComponentRootReusableArray = [];\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n var minLen = Math.min(string1.length, string2.length);\n for (var i = 0; i < minLen; i++) {\n if (string1.charAt(i) !== string2.charAt(i)) {\n return i;\n }\n }\n return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOC_NODE_TYPE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\n/**\n * @param {DOMElement} container DOM element that may contain a React component.\n * @return {?string} A \"reactRoot\" ID, if a React component is rendered.\n */\nfunction getReactRootID(container) {\n var rootElement = getReactRootElementInContainer(container);\n return rootElement && ReactMount.getID(rootElement);\n}\n\n/**\n * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\n * element can return its control whose name or ID equals ATTR_NAME. All\n * DOM nodes support `getAttributeNode` but this can also get called on\n * other objects so just return '' if we're given something other than a\n * DOM node (such as window).\n *\n * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\n * @return {string} ID of the supplied `domNode`.\n */\nfunction getID(node) {\n var id = internalGetID(node);\n if (id) {\n if (nodeCache.hasOwnProperty(id)) {\n var cached = nodeCache[id];\n if (cached !== node) {\n !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;\n\n nodeCache[id] = node;\n }\n } else {\n nodeCache[id] = node;\n }\n }\n\n return id;\n}\n\nfunction internalGetID(node) {\n // If node is something like a window, document, or text node, none of\n // which support attributes or a .getAttribute method, gracefully return\n // the empty string, as if the attribute were missing.\n return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Sets the React-specific ID of the given node.\n *\n * @param {DOMElement} node The DOM node whose ID will be set.\n * @param {string} id The value of the ID attribute.\n */\nfunction setID(node, id) {\n var oldID = internalGetID(node);\n if (oldID !== id) {\n delete nodeCache[oldID];\n }\n node.setAttribute(ATTR_NAME, id);\n nodeCache[id] = node;\n}\n\n/**\n * Finds the node with the supplied React-generated DOM ID.\n *\n * @param {string} id A React-generated DOM ID.\n * @return {DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNode(id) {\n if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n nodeCache[id] = ReactMount.findReactNodeByID(id);\n }\n return nodeCache[id];\n}\n\n/**\n * Finds the node with the supplied public React instance.\n *\n * @param {*} instance A public React instance.\n * @return {?DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNodeFromInstance(instance) {\n var id = ReactInstanceMap.get(instance)._rootNodeID;\n if (ReactEmptyComponentRegistry.isNullComponentID(id)) {\n return null;\n }\n if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n nodeCache[id] = ReactMount.findReactNodeByID(id);\n }\n return nodeCache[id];\n}\n\n/**\n * A node is \"valid\" if it is contained by a currently mounted container.\n *\n * This means that the node does not have to be contained by a document in\n * order to be considered valid.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @param {string} id The expected ID of the node.\n * @return {boolean} Whether the node is contained by a mounted container.\n */\nfunction isValid(node, id) {\n if (node) {\n !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;\n\n var container = ReactMount.findReactContainerForID(id);\n if (container && containsNode(container, node)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Causes the cache to forget about one React-specific ID.\n *\n * @param {string} id The ID to forget.\n */\nfunction purgeID(id) {\n delete nodeCache[id];\n}\n\nvar deepestNodeSoFar = null;\nfunction findDeepestCachedAncestorImpl(ancestorID) {\n var ancestor = nodeCache[ancestorID];\n if (ancestor && isValid(ancestor, ancestorID)) {\n deepestNodeSoFar = ancestor;\n } else {\n // This node isn't populated in the cache, so presumably none of its\n // descendants are. Break out of the loop.\n return false;\n }\n}\n\n/**\n * Return the deepest cached node whose ID is a prefix of `targetID`.\n */\nfunction findDeepestCachedAncestor(targetID) {\n deepestNodeSoFar = null;\n ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);\n\n var foundNode = deepestNodeSoFar;\n deepestNodeSoFar = null;\n return foundNode;\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {\n if (ReactDOMFeatureFlags.useCreateElement) {\n context = assign({}, context);\n if (container.nodeType === DOC_NODE_TYPE) {\n context[ownerDocumentContextKey] = container;\n } else {\n context[ownerDocumentContextKey] = container.ownerDocument;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (context === emptyObject) {\n context = {};\n }\n var tag = container.nodeName.toLowerCase();\n context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);\n }\n var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);\n componentInstance._renderedComponent._topLevelWrapper = componentInstance;\n ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {\n var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* forceHTML */shouldReuseMarkup);\n transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);\n ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container) {\n ReactReconciler.unmountComponent(instance);\n\n if (container.nodeType === DOC_NODE_TYPE) {\n container = container.documentElement;\n }\n\n // http://jsperf.com/emptying-a-node\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(node) {\n var reactRootID = getReactRootID(node);\n return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;\n}\n\n/**\n * Returns the first (deepest) ancestor of a node which is rendered by this copy\n * of React.\n */\nfunction findFirstReactDOMImpl(node) {\n // This node might be from another React instance, so we make sure not to\n // examine the node cache here\n for (; node && node.parentNode !== node; node = node.parentNode) {\n if (node.nodeType !== 1) {\n // Not a DOMElement, therefore not a React component\n continue;\n }\n var nodeID = internalGetID(node);\n if (!nodeID) {\n continue;\n }\n var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n\n // If containersByReactRootID contains the container we find by crawling up\n // the tree, we know that this instance of React rendered the node.\n // nb. isValid's strategy (with containsNode) does not work because render\n // trees may be nested and we don't want a false positive in that case.\n var current = node;\n var lastID;\n do {\n lastID = internalGetID(current);\n current = current.parentNode;\n if (current == null) {\n // The passed-in node has been detached from the container it was\n // originally rendered into.\n return null;\n }\n } while (lastID !== reactRootID);\n\n if (current === containersByReactRootID[reactRootID]) {\n return node;\n }\n }\n return null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar TopLevelWrapper = function () {};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (process.env.NODE_ENV !== 'production') {\n TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n // this.props is actually a ReactElement\n return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n * ReactMount.render(\n * component,\n * document.getElementById('container')\n * );\n *\n * <div id=\"container\"> <-- Supplied `container`.\n * <div data-reactid=\".3\"> <-- Rendered reactRoot of React\n * // ... component.\n * </div>\n * </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n TopLevelWrapper: TopLevelWrapper,\n\n /** Exposed for debugging purposes **/\n _instancesByReactRootID: instancesByReactRootID,\n\n /**\n * This is a hook provided to support rendering React components while\n * ensuring that the apparent scroll position of its `container` does not\n * change.\n *\n * @param {DOMElement} container The `container` being rendered into.\n * @param {function} renderCallback This must be called once to do the render.\n */\n scrollMonitor: function (container, renderCallback) {\n renderCallback();\n },\n\n /**\n * Take a component that's already mounted into the DOM and replace its props\n * @param {ReactComponent} prevComponent component instance already in the DOM\n * @param {ReactElement} nextElement component instance to render\n * @param {DOMElement} container container to render into\n * @param {?function} callback function triggered on completion\n */\n _updateRootComponent: function (prevComponent, nextElement, container, callback) {\n ReactMount.scrollMonitor(container, function () {\n ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n }\n });\n\n if (process.env.NODE_ENV !== 'production') {\n // Record the root element in case it later gets transplanted.\n rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);\n }\n\n return prevComponent;\n },\n\n /**\n * Register a component into the instance map and starts scroll value\n * monitoring\n * @param {ReactComponent} nextComponent component instance to render\n * @param {DOMElement} container container to render into\n * @return {string} reactRoot ID prefix\n */\n _registerComponent: function (nextComponent, container) {\n !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n\n var reactRootID = ReactMount.registerContainer(container);\n instancesByReactRootID[reactRootID] = nextComponent;\n return reactRootID;\n },\n\n /**\n * Render a new component into the DOM.\n * @param {ReactElement} nextElement element to render\n * @param {DOMElement} container container to render into\n * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n * @return {ReactComponent} nextComponent\n */\n _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case.\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n var componentInstance = instantiateReactComponent(nextElement, null);\n var reactRootID = ReactMount._registerComponent(componentInstance, container);\n\n // The initial render is synchronous but any updates that happen during\n // rendering, in componentWillMount or componentDidMount, will be batched\n // according to the current batching strategy.\n\n ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);\n\n if (process.env.NODE_ENV !== 'production') {\n // Record the root element in case it later gets transplanted.\n rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);\n }\n\n return componentInstance;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;\n return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n },\n\n _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :\n // Check if it quacks like an element\n nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;\n\n process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;\n\n var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n var prevComponent = instancesByReactRootID[getReactRootID(container)];\n\n if (prevComponent) {\n var prevWrappedElement = prevComponent._currentElement;\n var prevElement = prevWrappedElement.props;\n if (shouldUpdateReactComponent(prevElement, nextElement)) {\n var publicInst = prevComponent._renderedComponent.getPublicInstance();\n var updatedCallback = callback && function () {\n callback.call(publicInst);\n };\n ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);\n return publicInst;\n } else {\n ReactMount.unmountComponentAtNode(container);\n }\n }\n\n var reactRootElement = getReactRootElementInContainer(container);\n var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;\n\n if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n var rootElementSibling = reactRootElement;\n while (rootElementSibling) {\n if (internalGetID(rootElementSibling)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;\n break;\n }\n rootElementSibling = rootElementSibling.nextSibling;\n }\n }\n }\n\n var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();\n if (callback) {\n callback.call(component);\n }\n return component;\n },\n\n /**\n * Renders a React component into the DOM in the supplied `container`.\n *\n * If the React component was previously rendered into `container`, this will\n * perform an update on it and only mutate the DOM as necessary to reflect the\n * latest React component.\n *\n * @param {ReactElement} nextElement Component element to render.\n * @param {DOMElement} container DOM element to render into.\n * @param {?function} callback function triggered on completion\n * @return {ReactComponent} Component instance rendered in `container`.\n */\n render: function (nextElement, container, callback) {\n return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n },\n\n /**\n * Registers a container node into which React components will be rendered.\n * This also creates the \"reactRoot\" ID that will be assigned to the element\n * rendered within.\n *\n * @param {DOMElement} container DOM element to register as a container.\n * @return {string} The \"reactRoot\" ID of elements rendered within.\n */\n registerContainer: function (container) {\n var reactRootID = getReactRootID(container);\n if (reactRootID) {\n // If one exists, make sure it is a valid \"reactRoot\" ID.\n reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\n }\n if (!reactRootID) {\n // No valid \"reactRoot\" ID found, create one.\n reactRootID = ReactInstanceHandles.createReactRootID();\n }\n containersByReactRootID[reactRootID] = container;\n return reactRootID;\n },\n\n /**\n * Unmounts and destroys the React component rendered in the `container`.\n *\n * @param {DOMElement} container DOM element containing a React component.\n * @return {boolean} True if a component was found in and unmounted from\n * `container`\n */\n unmountComponentAtNode: function (container) {\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (Strictly speaking, unmounting won't cause a\n // render but we still don't expect to be in a render call here.)\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n var reactRootID = getReactRootID(container);\n var component = instancesByReactRootID[reactRootID];\n if (!component) {\n // Check if the node being unmounted was rendered by React, but isn't a\n // root node.\n var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n // Check if the container itself is a React root node.\n var containerID = internalGetID(container);\n var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;\n }\n\n return false;\n }\n ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);\n delete instancesByReactRootID[reactRootID];\n delete containersByReactRootID[reactRootID];\n if (process.env.NODE_ENV !== 'production') {\n delete rootElementsByReactRootID[reactRootID];\n }\n return true;\n },\n\n /**\n * Finds the container DOM element that contains React component to which the\n * supplied DOM `id` belongs.\n *\n * @param {string} id The ID of an element rendered by a React component.\n * @return {?DOMElement} DOM element that contains the `id`.\n */\n findReactContainerForID: function (id) {\n var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\n var container = containersByReactRootID[reactRootID];\n\n if (process.env.NODE_ENV !== 'production') {\n var rootElement = rootElementsByReactRootID[reactRootID];\n if (rootElement && rootElement.parentNode !== container) {\n process.env.NODE_ENV !== 'production' ? warning(\n // Call internalGetID here because getID calls isValid which calls\n // findReactContainerForID (this function).\n internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;\n var containerChild = container.firstChild;\n if (containerChild && reactRootID === internalGetID(containerChild)) {\n // If the container has a new child with the same ID as the old\n // root element, then rootElementsByReactRootID[reactRootID] is\n // just stale and needs to be updated. The case that deserves a\n // warning is when the container is empty.\n rootElementsByReactRootID[reactRootID] = containerChild;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;\n }\n }\n }\n\n return container;\n },\n\n /**\n * Finds an element rendered by React with the supplied ID.\n *\n * @param {string} id ID of a DOM node in the React component.\n * @return {DOMElement} Root DOM node of the React component.\n */\n findReactNodeByID: function (id) {\n var reactRoot = ReactMount.findReactContainerForID(id);\n return ReactMount.findComponentRoot(reactRoot, id);\n },\n\n /**\n * Traverses up the ancestors of the supplied node to find a node that is a\n * DOM representation of a React component rendered by this copy of React.\n *\n * @param {*} node\n * @return {?DOMEventTarget}\n * @internal\n */\n getFirstReactDOM: function (node) {\n return findFirstReactDOMImpl(node);\n },\n\n /**\n * Finds a node with the supplied `targetID` inside of the supplied\n * `ancestorNode`. Exploits the ID naming scheme to perform the search\n * quickly.\n *\n * @param {DOMEventTarget} ancestorNode Search from this root.\n * @pararm {string} targetID ID of the DOM representation of the component.\n * @return {DOMEventTarget} DOM node with the supplied `targetID`.\n * @internal\n */\n findComponentRoot: function (ancestorNode, targetID) {\n var firstChildren = findComponentRootReusableArray;\n var childIndex = 0;\n\n var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\n\n if (process.env.NODE_ENV !== 'production') {\n // This will throw on the next line; give an early warning\n process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\\'t find the root component node for data-reactid value ' + '`%s`. If you\\'re seeing this message, it probably means that ' + 'you\\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;\n }\n\n firstChildren[0] = deepestAncestor.firstChild;\n firstChildren.length = 1;\n\n while (childIndex < firstChildren.length) {\n var child = firstChildren[childIndex++];\n var targetChild;\n\n while (child) {\n var childID = ReactMount.getID(child);\n if (childID) {\n // Even if we find the node we're looking for, we finish looping\n // through its siblings to ensure they're cached so that we don't have\n // to revisit this node again. Otherwise, we make n^2 calls to getID\n // when visiting the many children of a single node in order.\n\n if (targetID === childID) {\n targetChild = child;\n } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\n // If we find a child whose ID is an ancestor of the given ID,\n // then we can be sure that we only want to search the subtree\n // rooted at this child, so we can throw out the rest of the\n // search state.\n firstChildren.length = childIndex = 0;\n firstChildren.push(child.firstChild);\n }\n } else {\n // If this child had no ID, then there's a chance that it was\n // injected automatically by the browser, as when a `<table>`\n // element sprouts an extra `<tbody>` child as a side effect of\n // `.innerHTML` parsing. Optimistically continue down this\n // branch, but not before examining the other siblings.\n firstChildren.push(child.firstChild);\n }\n\n child = child.nextSibling;\n }\n\n if (targetChild) {\n // Emptying firstChildren/findComponentRootReusableArray is\n // not necessary for correctness, but it helps the GC reclaim\n // any nodes that were left at the end of the search.\n firstChildren.length = 0;\n\n return targetChild;\n }\n }\n\n firstChildren.length = 0;\n\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;\n },\n\n _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {\n !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;\n\n if (shouldReuseMarkup) {\n var rootElement = getReactRootElementInContainer(container);\n if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n return;\n } else {\n var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n var rootMarkup = rootElement.outerHTML;\n rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n var normalizedMarkup = markup;\n if (process.env.NODE_ENV !== 'production') {\n // because rootMarkup is retrieved from the DOM, various normalizations\n // will have occurred which will not be present in `markup`. Here,\n // insert markup into a <div> or <iframe> depending on the container\n // type to perform the same normalizations before comparing.\n var normalizer;\n if (container.nodeType === ELEMENT_NODE_TYPE) {\n normalizer = document.createElement('div');\n normalizer.innerHTML = markup;\n normalizedMarkup = normalizer.innerHTML;\n } else {\n normalizer = document.createElement('iframe');\n document.body.appendChild(normalizer);\n normalizer.contentDocument.write(markup);\n normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n document.body.removeChild(normalizer);\n }\n }\n\n var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\\n%s', difference) : invariant(false) : undefined;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : undefined;\n }\n }\n }\n\n !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but ' + 'you didn\\'t use server rendering. We can\\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n\n if (transaction.useCreateElement) {\n while (container.lastChild) {\n container.removeChild(container.lastChild);\n }\n container.appendChild(markup);\n } else {\n setInnerHTML(container, markup);\n }\n },\n\n ownerDocumentContextKey: ownerDocumentContextKey,\n\n /**\n * React ID utilities.\n */\n\n getReactRootID: getReactRootID,\n\n getID: getID,\n\n setID: setID,\n\n getNode: getNode,\n\n getNodeFromInstance: getNodeFromInstance,\n\n isValid: isValid,\n\n purgeID: purgeID\n};\n\nReactPerf.measureMethods(ReactMount, 'ReactMount', {\n _renderNewRootComponent: '_renderNewRootComponent',\n _mountImageIntoNode: '_mountImageIntoNode'\n});\n\nmodule.exports = ReactMount;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMount.js\n ** module id = 27\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar ReactEventEmitterMixin = require('./ReactEventEmitterMixin');\nvar ReactPerf = require('./ReactPerf');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar assign = require('./Object.assign');\nvar isEventSupported = require('./isEventSupported');\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactEventListener, which is injected and can therefore support pluggable\n * event sources. This is the only work that occurs in the main thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginHub` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|EventPluginHub| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n topAbort: 'abort',\n topBlur: 'blur',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topChange: 'change',\n topClick: 'click',\n topCompositionEnd: 'compositionend',\n topCompositionStart: 'compositionstart',\n topCompositionUpdate: 'compositionupdate',\n topContextMenu: 'contextmenu',\n topCopy: 'copy',\n topCut: 'cut',\n topDoubleClick: 'dblclick',\n topDrag: 'drag',\n topDragEnd: 'dragend',\n topDragEnter: 'dragenter',\n topDragExit: 'dragexit',\n topDragLeave: 'dragleave',\n topDragOver: 'dragover',\n topDragStart: 'dragstart',\n topDrop: 'drop',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topFocus: 'focus',\n topInput: 'input',\n topKeyDown: 'keydown',\n topKeyPress: 'keypress',\n topKeyUp: 'keyup',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topMouseDown: 'mousedown',\n topMouseMove: 'mousemove',\n topMouseOut: 'mouseout',\n topMouseOver: 'mouseover',\n topMouseUp: 'mouseup',\n topPaste: 'paste',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topScroll: 'scroll',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topSelectionChange: 'selectionchange',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTextInput: 'textInput',\n topTimeUpdate: 'timeupdate',\n topTouchCancel: 'touchcancel',\n topTouchEnd: 'touchend',\n topTouchMove: 'touchmove',\n topTouchStart: 'touchstart',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting',\n topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n // directly.\n if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n mountAt[topListenersIDKey] = reactTopListenersCounter++;\n alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n }\n return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {\n\n /**\n * Injectable event backend\n */\n ReactEventListener: null,\n\n injection: {\n /**\n * @param {object} ReactEventListener\n */\n injectReactEventListener: function (ReactEventListener) {\n ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n }\n },\n\n /**\n * Sets whether or not any created callbacks should be enabled.\n *\n * @param {boolean} enabled True if callbacks should be enabled.\n */\n setEnabled: function (enabled) {\n if (ReactBrowserEventEmitter.ReactEventListener) {\n ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n }\n },\n\n /**\n * @return {boolean} True if callbacks are enabled.\n */\n isEnabled: function () {\n return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n },\n\n /**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} contentDocumentHandle Document which owns the container\n */\n listenTo: function (registrationName, contentDocumentHandle) {\n var mountAt = contentDocumentHandle;\n var isListening = getListeningForDocument(mountAt);\n var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n var topLevelTypes = EventConstants.topLevelTypes;\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n if (dependency === topLevelTypes.topWheel) {\n if (isEventSupported('wheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n } else if (isEventSupported('mousewheel')) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n } else {\n // Firefox needs to capture a different mouse scroll event.\n // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n }\n } else if (dependency === topLevelTypes.topScroll) {\n\n if (isEventSupported('scroll', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n } else {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n }\n } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n if (isEventSupported('focus', true)) {\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n } else if (isEventSupported('focusin')) {\n // IE has `focusin` and `focusout` events which bubble.\n // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n }\n\n // to make sure blur and focus event listeners are only attached once\n isListening[topLevelTypes.topBlur] = true;\n isListening[topLevelTypes.topFocus] = true;\n } else if (topEventMapping.hasOwnProperty(dependency)) {\n ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n }\n\n isListening[dependency] = true;\n }\n }\n },\n\n trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n },\n\n trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n },\n\n /**\n * Listens to window scroll and resize events. We cache scroll values so that\n * application code can access them without triggering reflows.\n *\n * NOTE: Scroll events do not bubble.\n *\n * @see http://www.quirksmode.org/dom/events/scroll.html\n */\n ensureScrollValueMonitoring: function () {\n if (!isMonitoringScrollValue) {\n var refresh = ViewportMetrics.refreshScrollValues;\n ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n isMonitoringScrollValue = true;\n }\n },\n\n eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,\n\n registrationNameModules: EventPluginHub.registrationNameModules,\n\n putListener: EventPluginHub.putListener,\n\n getListener: EventPluginHub.getListener,\n\n deleteListener: EventPluginHub.deleteListener,\n\n deleteAllListeners: EventPluginHub.deleteAllListeners\n\n});\n\nReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {\n putListener: 'putListener',\n deleteListener: 'deleteListener'\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserEventEmitter.js\n ** module id = 28\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n topAbort: null,\n topBlur: null,\n topCanPlay: null,\n topCanPlayThrough: null,\n topChange: null,\n topClick: null,\n topCompositionEnd: null,\n topCompositionStart: null,\n topCompositionUpdate: null,\n topContextMenu: null,\n topCopy: null,\n topCut: null,\n topDoubleClick: null,\n topDrag: null,\n topDragEnd: null,\n topDragEnter: null,\n topDragExit: null,\n topDragLeave: null,\n topDragOver: null,\n topDragStart: null,\n topDrop: null,\n topDurationChange: null,\n topEmptied: null,\n topEncrypted: null,\n topEnded: null,\n topError: null,\n topFocus: null,\n topInput: null,\n topKeyDown: null,\n topKeyPress: null,\n topKeyUp: null,\n topLoad: null,\n topLoadedData: null,\n topLoadedMetadata: null,\n topLoadStart: null,\n topMouseDown: null,\n topMouseMove: null,\n topMouseOut: null,\n topMouseOver: null,\n topMouseUp: null,\n topPaste: null,\n topPause: null,\n topPlay: null,\n topPlaying: null,\n topProgress: null,\n topRateChange: null,\n topReset: null,\n topScroll: null,\n topSeeked: null,\n topSeeking: null,\n topSelectionChange: null,\n topStalled: null,\n topSubmit: null,\n topSuspend: null,\n topTextInput: null,\n topTimeUpdate: null,\n topTouchCancel: null,\n topTouchEnd: null,\n topTouchMove: null,\n topTouchStart: null,\n topVolumeChange: null,\n topWaiting: null,\n topWheel: null\n});\n\nvar EventConstants = {\n topLevelTypes: topLevelTypes,\n PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventConstants.js\n ** module id = 29\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n if (event) {\n EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e, false);\n};\n\n/**\n * - `InstanceHandle`: [required] Module that performs logical traversals of DOM\n * hierarchy given ids of the logical DOM elements involved.\n */\nvar InstanceHandle = null;\n\nfunction validateInstanceHandle() {\n var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;\n process.env.NODE_ENV !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined;\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n /**\n * Methods for injecting dependencies.\n */\n injection: {\n\n /**\n * @param {object} InjectedMount\n * @public\n */\n injectMount: EventPluginUtils.injection.injectMount,\n\n /**\n * @param {object} InjectedInstanceHandle\n * @public\n */\n injectInstanceHandle: function (InjectedInstanceHandle) {\n InstanceHandle = InjectedInstanceHandle;\n if (process.env.NODE_ENV !== 'production') {\n validateInstanceHandle();\n }\n },\n\n getInstanceHandle: function () {\n if (process.env.NODE_ENV !== 'production') {\n validateInstanceHandle();\n }\n return InstanceHandle;\n },\n\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n },\n\n eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,\n\n registrationNameModules: EventPluginRegistry.registrationNameModules,\n\n /**\n * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\n *\n * @param {string} id ID of the DOM element.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {?function} listener The callback to store.\n */\n putListener: function (id, registrationName, listener) {\n !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined;\n\n var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n bankForRegistrationName[id] = listener;\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.didPutListener) {\n PluginModule.didPutListener(id, registrationName, listener);\n }\n },\n\n /**\n * @param {string} id ID of the DOM element.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n getListener: function (id, registrationName) {\n var bankForRegistrationName = listenerBank[registrationName];\n return bankForRegistrationName && bankForRegistrationName[id];\n },\n\n /**\n * Deletes a listener from the registration bank.\n *\n * @param {string} id ID of the DOM element.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n */\n deleteListener: function (id, registrationName) {\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(id, registrationName);\n }\n\n var bankForRegistrationName = listenerBank[registrationName];\n // TODO: This should never be null -- when is it?\n if (bankForRegistrationName) {\n delete bankForRegistrationName[id];\n }\n },\n\n /**\n * Deletes all listeners for the DOM element with the supplied ID.\n *\n * @param {string} id ID of the DOM element.\n */\n deleteAllListeners: function (id) {\n for (var registrationName in listenerBank) {\n if (!listenerBank[registrationName][id]) {\n continue;\n }\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(id, registrationName);\n }\n\n delete listenerBank[registrationName][id];\n }\n },\n\n /**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var events;\n var plugins = EventPluginRegistry.plugins;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n },\n\n /**\n * Enqueues a synthetic event that should be dispatched when\n * `processEventQueue` is invoked.\n *\n * @param {*} events An accumulation of synthetic events.\n * @internal\n */\n enqueueEvents: function (events) {\n if (events) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n },\n\n /**\n * Dispatches all synthetic events on the event queue.\n *\n * @internal\n */\n processEventQueue: function (simulated) {\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n if (simulated) {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n } else {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n }\n !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined;\n // This would be a good time to rethrow if any of the event handlers threw.\n ReactErrorUtils.rethrowCaughtError();\n },\n\n /**\n * These are needed for tests only. Do not use!\n */\n __purge: function () {\n listenerBank = {};\n },\n\n __getListenerBank: function () {\n return listenerBank;\n }\n\n};\n\nmodule.exports = EventPluginHub;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginHub.js\n ** module id = 30\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!EventPluginOrder) {\n // Wait until an `EventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var PluginModule = namesToPlugins[pluginName];\n var pluginIndex = EventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined;\n if (EventPluginRegistry.plugins[pluginIndex]) {\n continue;\n }\n !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined;\n EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n var publishedEvents = PluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined;\n EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined;\n EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n /**\n * Ordered list of injected plugins.\n */\n plugins: [],\n\n /**\n * Mapping from event name to dispatch config\n */\n eventNameDispatchConfigs: {},\n\n /**\n * Mapping from registration name to plugin module\n */\n registrationNameModules: {},\n\n /**\n * Mapping from registration name to event name\n */\n registrationNameDependencies: {},\n\n /**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n injectEventPluginOrder: function (InjectedEventPluginOrder) {\n !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined;\n // Clone the ordering so it cannot be dynamically mutated.\n EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n recomputePluginOrdering();\n },\n\n /**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n injectEventPluginsByName: function (injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var PluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined;\n namesToPlugins[pluginName] = PluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n },\n\n /**\n * Looks up the plugin for the supplied event.\n *\n * @param {object} event A synthetic event.\n * @return {?object} The plugin that created the supplied event.\n * @internal\n */\n getPluginModuleForEvent: function (event) {\n var dispatchConfig = event.dispatchConfig;\n if (dispatchConfig.registrationName) {\n return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n }\n for (var phase in dispatchConfig.phasedRegistrationNames) {\n if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n continue;\n }\n var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n if (PluginModule) {\n return PluginModule;\n }\n }\n return null;\n },\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _resetEventPlugins: function () {\n EventPluginOrder = null;\n for (var pluginName in namesToPlugins) {\n if (namesToPlugins.hasOwnProperty(pluginName)) {\n delete namesToPlugins[pluginName];\n }\n }\n EventPluginRegistry.plugins.length = 0;\n\n var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n for (var eventName in eventNameDispatchConfigs) {\n if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n delete eventNameDispatchConfigs[eventName];\n }\n }\n\n var registrationNameModules = EventPluginRegistry.registrationNameModules;\n for (var registrationName in registrationNameModules) {\n if (registrationNameModules.hasOwnProperty(registrationName)) {\n delete registrationNameModules[registrationName];\n }\n }\n }\n\n};\n\nmodule.exports = EventPluginRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginRegistry.js\n ** module id = 31\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `Mount`: [required] Module that can convert between React dom IDs and\n * actual node references.\n */\nvar injection = {\n Mount: null,\n injectMount: function (InjectedMount) {\n injection.Mount = InjectedMount;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined;\n }\n }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchIDs = event._dispatchIDs;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var idsIsArr = Array.isArray(dispatchIDs);\n var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n process.env.NODE_ENV !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined;\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {string} domID DOM id to pass to the callback.\n */\nfunction executeDispatch(event, simulated, listener, domID) {\n var type = event.type || 'unknown-event';\n event.currentTarget = injection.Mount.getNode(domID);\n if (simulated) {\n ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID);\n } else {\n ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID);\n }\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchIDs = event._dispatchIDs;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and IDs are two parallel arrays that are always in sync.\n executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, simulated, dispatchListeners, dispatchIDs);\n }\n event._dispatchListeners = null;\n event._dispatchIDs = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchIDs = event._dispatchIDs;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and IDs are two parallel arrays that are always in sync.\n if (dispatchListeners[i](event, dispatchIDs[i])) {\n return dispatchIDs[i];\n }\n }\n } else if (dispatchListeners) {\n if (dispatchListeners(event, dispatchIDs)) {\n return dispatchIDs;\n }\n }\n return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n event._dispatchIDs = null;\n event._dispatchListeners = null;\n return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n var dispatchListener = event._dispatchListeners;\n var dispatchID = event._dispatchIDs;\n !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined;\n var res = dispatchListener ? dispatchListener(event, dispatchID) : null;\n event._dispatchListeners = null;\n event._dispatchIDs = null;\n return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n isEndish: isEndish,\n isMoveish: isMoveish,\n isStartish: isStartish,\n\n executeDirectDispatch: executeDirectDispatch,\n executeDispatchesInOrder: executeDispatchesInOrder,\n executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n hasDispatches: hasDispatches,\n\n getNode: function (id) {\n return injection.Mount.getNode(id);\n },\n getID: function (node) {\n return injection.Mount.getID(node);\n },\n\n injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginUtils.js\n ** module id = 32\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n * @typechecks\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n try {\n return func(a, b);\n } catch (x) {\n if (caughtError === null) {\n caughtError = x;\n }\n return undefined;\n }\n}\n\nvar ReactErrorUtils = {\n invokeGuardedCallback: invokeGuardedCallback,\n\n /**\n * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n * handler are sure to be rethrown by rethrowCaughtError.\n */\n invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n /**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n rethrowCaughtError: function () {\n if (caughtError) {\n var error = caughtError;\n caughtError = null;\n throw error;\n }\n }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n /**\n * To help development we can get better devtools integration by simulating a\n * real browser event.\n */\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n var boundFunc = func.bind(null, a, b);\n var evtType = 'react-' + name;\n fakeNode.addEventListener(evtType, boundFunc, false);\n var evt = document.createEvent('Event');\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n fakeNode.removeEventListener(evtType, boundFunc, false);\n };\n }\n}\n\nmodule.exports = ReactErrorUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactErrorUtils.js\n ** module id = 33\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n *\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined;\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n var currentIsArray = Array.isArray(current);\n var nextIsArray = Array.isArray(next);\n\n if (currentIsArray && nextIsArray) {\n current.push.apply(current, next);\n return current;\n }\n\n if (currentIsArray) {\n current.push(next);\n return current;\n }\n\n if (nextIsArray) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\nmodule.exports = accumulateInto;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/accumulateInto.js\n ** module id = 34\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\nvar forEachAccumulated = function (arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n};\n\nmodule.exports = forEachAccumulated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/forEachAccumulated.js\n ** module id = 35\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventEmitterMixin\n */\n\n'use strict';\n\nvar EventPluginHub = require('./EventPluginHub');\n\nfunction runEventQueueInBatch(events) {\n EventPluginHub.enqueueEvents(events);\n EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n /**\n * Streams a fired top-level event to `EventPluginHub` where plugins have the\n * opportunity to create `ReactEvent`s to be dispatched.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native environment event.\n */\n handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n runEventQueueInBatch(events);\n }\n};\n\nmodule.exports = ReactEventEmitterMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventEmitterMixin.js\n ** module id = 36\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n currentScrollLeft: 0,\n\n currentScrollTop: 0,\n\n refreshScrollValues: function (scrollPosition) {\n ViewportMetrics.currentScrollLeft = scrollPosition.x;\n ViewportMetrics.currentScrollTop = scrollPosition.y;\n }\n\n};\n\nmodule.exports = ViewportMetrics;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ViewportMetrics.js\n ** module id = 37\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Object.assign\n */\n\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\n\n'use strict';\n\nfunction assign(target, sources) {\n if (target == null) {\n throw new TypeError('Object.assign target cannot be null or undefined');\n }\n\n var to = Object(target);\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\n var nextSource = arguments[nextIndex];\n if (nextSource == null) {\n continue;\n }\n\n var from = Object(nextSource);\n\n // We don't currently support accessors nor proxies. Therefore this\n // copy cannot throw. If we ever supported this then we must handle\n // exceptions and side-effects. We don't support symbols so they won't\n // be transferred.\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n }\n\n return to;\n}\n\nmodule.exports = assign;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Object.assign.js\n ** module id = 38\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature = document.implementation && document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = (eventName in document);\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isEventSupported.js\n ** module id = 39\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFeatureFlags\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n useCreateElement: false\n};\n\nmodule.exports = ReactDOMFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFeatureFlags.js\n ** module id = 40\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar assign = require('./Object.assign');\nvar canDefineProperty = require('./canDefineProperty');\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\n/**\n * Base constructor for all React elements. This is only used to make this\n * work with a dynamic instanceof check. Nothing should live on this prototype.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allow us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n if (process.env.NODE_ENV !== 'production') {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n if (canDefineProperty) {\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n } else {\n element._store.validated = false;\n element._self = self;\n element._source = source;\n }\n Object.freeze(element.props);\n Object.freeze(element);\n }\n\n return element;\n};\n\nReactElement.createElement = function (type, config, children) {\n var propName;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n ref = config.ref === undefined ? null : config.ref;\n key = config.key === undefined ? null : '' + config.key;\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (typeof props[propName] === 'undefined') {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\nReactElement.createFactory = function (type) {\n var factory = ReactElement.createElement.bind(null, type);\n // Expose the type on the factory and the prototype so that it can be\n // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n // This should not be named `constructor` since this may not be the function\n // that created the element, and it may not even be a constructor.\n // Legacy hook TODO: Warn if this is accessed\n factory.type = type;\n return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n};\n\nReactElement.cloneAndReplaceProps = function (oldElement, newProps) {\n var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);\n\n if (process.env.NODE_ENV !== 'production') {\n // If the key on the original is valid, then the clone is valid\n newElement._store.validated = oldElement._store.validated;\n }\n\n return newElement;\n};\n\nReactElement.cloneElement = function (element, config, children) {\n var propName;\n\n // Original props are copied\n var props = assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (config.ref !== undefined) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (config.key !== undefined) {\n key = '' + config.key;\n }\n // Remaining properties override existing props\n for (propName in config) {\n if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nmodule.exports = ReactElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElement.js\n ** module id = 41\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n try {\n Object.defineProperty({}, 'x', { get: function () {} });\n canDefineProperty = true;\n } catch (x) {\n // IE will fail on defineProperty\n }\n}\n\nmodule.exports = canDefineProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/canDefineProperty.js\n ** module id = 42\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponentRegistry\n */\n\n'use strict';\n\n// This registry keeps track of the React IDs of the components that rendered to\n// `null` (in reality a placeholder such as `noscript`)\nvar nullComponentIDsRegistry = {};\n\n/**\n * @param {string} id Component's `_rootNodeID`.\n * @return {boolean} True if the component is rendered to null.\n */\nfunction isNullComponentID(id) {\n return !!nullComponentIDsRegistry[id];\n}\n\n/**\n * Mark the component as having rendered to null.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction registerNullComponentID(id) {\n nullComponentIDsRegistry[id] = true;\n}\n\n/**\n * Unmark the component as having rendered to null: it renders to something now.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction deregisterNullComponentID(id) {\n delete nullComponentIDsRegistry[id];\n}\n\nvar ReactEmptyComponentRegistry = {\n isNullComponentID: isNullComponentID,\n registerNullComponentID: registerNullComponentID,\n deregisterNullComponentID: deregisterNullComponentID\n};\n\nmodule.exports = ReactEmptyComponentRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponentRegistry.js\n ** module id = 43\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceHandles\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactRootIndex = require('./ReactRootIndex');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar SEPARATOR = '.';\nvar SEPARATOR_LENGTH = SEPARATOR.length;\n\n/**\n * Maximum depth of traversals before we consider the possibility of a bad ID.\n */\nvar MAX_TREE_DEPTH = 10000;\n\n/**\n * Creates a DOM ID prefix to use when mounting React components.\n *\n * @param {number} index A unique integer\n * @return {string} React root ID.\n * @internal\n */\nfunction getReactRootIDString(index) {\n return SEPARATOR + index.toString(36);\n}\n\n/**\n * Checks if a character in the supplied ID is a separator or the end.\n *\n * @param {string} id A React DOM ID.\n * @param {number} index Index of the character to check.\n * @return {boolean} True if the character is a separator or end of the ID.\n * @private\n */\nfunction isBoundary(id, index) {\n return id.charAt(index) === SEPARATOR || index === id.length;\n}\n\n/**\n * Checks if the supplied string is a valid React DOM ID.\n *\n * @param {string} id A React DOM ID, maybe.\n * @return {boolean} True if the string is a valid React DOM ID.\n * @private\n */\nfunction isValidID(id) {\n return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;\n}\n\n/**\n * Checks if the first ID is an ancestor of or equal to the second ID.\n *\n * @param {string} ancestorID\n * @param {string} descendantID\n * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.\n * @internal\n */\nfunction isAncestorIDOf(ancestorID, descendantID) {\n return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);\n}\n\n/**\n * Gets the parent ID of the supplied React DOM ID, `id`.\n *\n * @param {string} id ID of a component.\n * @return {string} ID of the parent, or an empty string.\n * @private\n */\nfunction getParentID(id) {\n return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';\n}\n\n/**\n * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the\n * supplied `destinationID`. If they are equal, the ID is returned.\n *\n * @param {string} ancestorID ID of an ancestor node of `destinationID`.\n * @param {string} destinationID ID of the destination node.\n * @return {string} Next ID on the path from `ancestorID` to `destinationID`.\n * @private\n */\nfunction getNextDescendantID(ancestorID, destinationID) {\n !(isValidID(ancestorID) && isValidID(destinationID)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined;\n !isAncestorIDOf(ancestorID, destinationID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined;\n if (ancestorID === destinationID) {\n return ancestorID;\n }\n // Skip over the ancestor and the immediate separator. Traverse until we hit\n // another separator or we reach the end of `destinationID`.\n var start = ancestorID.length + SEPARATOR_LENGTH;\n var i;\n for (i = start; i < destinationID.length; i++) {\n if (isBoundary(destinationID, i)) {\n break;\n }\n }\n return destinationID.substr(0, i);\n}\n\n/**\n * Gets the nearest common ancestor ID of two IDs.\n *\n * Using this ID scheme, the nearest common ancestor ID is the longest common\n * prefix of the two IDs that immediately preceded a \"marker\" in both strings.\n *\n * @param {string} oneID\n * @param {string} twoID\n * @return {string} Nearest common ancestor ID, or the empty string if none.\n * @private\n */\nfunction getFirstCommonAncestorID(oneID, twoID) {\n var minLength = Math.min(oneID.length, twoID.length);\n if (minLength === 0) {\n return '';\n }\n var lastCommonMarkerIndex = 0;\n // Use `<=` to traverse until the \"EOL\" of the shorter string.\n for (var i = 0; i <= minLength; i++) {\n if (isBoundary(oneID, i) && isBoundary(twoID, i)) {\n lastCommonMarkerIndex = i;\n } else if (oneID.charAt(i) !== twoID.charAt(i)) {\n break;\n }\n }\n var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);\n !isValidID(longestCommonID) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined;\n return longestCommonID;\n}\n\n/**\n * Traverses the parent path between two IDs (either up or down). The IDs must\n * not be the same, and there must exist a parent path between them. If the\n * callback returns `false`, traversal is stopped.\n *\n * @param {?string} start ID at which to start traversal.\n * @param {?string} stop ID at which to end traversal.\n * @param {function} cb Callback to invoke each ID with.\n * @param {*} arg Argument to invoke the callback with.\n * @param {?boolean} skipFirst Whether or not to skip the first node.\n * @param {?boolean} skipLast Whether or not to skip the last node.\n * @private\n */\nfunction traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {\n start = start || '';\n stop = stop || '';\n !(start !== stop) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined;\n var traverseUp = isAncestorIDOf(stop, start);\n !(traverseUp || isAncestorIDOf(start, stop)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined;\n // Traverse from `start` to `stop` one depth at a time.\n var depth = 0;\n var traverse = traverseUp ? getParentID : getNextDescendantID;\n for (var id = start;; /* until break */id = traverse(id, stop)) {\n var ret;\n if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {\n ret = cb(id, traverseUp, arg);\n }\n if (ret === false || id === stop) {\n // Only break //after// visiting `stop`.\n break;\n }\n !(depth++ < MAX_TREE_DEPTH) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined;\n }\n}\n\n/**\n * Manages the IDs assigned to DOM representations of React components. This\n * uses a specific scheme in order to traverse the DOM efficiently (e.g. in\n * order to simulate events).\n *\n * @internal\n */\nvar ReactInstanceHandles = {\n\n /**\n * Constructs a React root ID\n * @return {string} A React root ID.\n */\n createReactRootID: function () {\n return getReactRootIDString(ReactRootIndex.createReactRootIndex());\n },\n\n /**\n * Constructs a React ID by joining a root ID with a name.\n *\n * @param {string} rootID Root ID of a parent component.\n * @param {string} name A component's name (as flattened children).\n * @return {string} A React ID.\n * @internal\n */\n createReactID: function (rootID, name) {\n return rootID + name;\n },\n\n /**\n * Gets the DOM ID of the React component that is the root of the tree that\n * contains the React component with the supplied DOM ID.\n *\n * @param {string} id DOM ID of a React component.\n * @return {?string} DOM ID of the React component that is the root.\n * @internal\n */\n getReactRootIDFromNodeID: function (id) {\n if (id && id.charAt(0) === SEPARATOR && id.length > 1) {\n var index = id.indexOf(SEPARATOR, 1);\n return index > -1 ? id.substr(0, index) : id;\n }\n return null;\n },\n\n /**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * NOTE: Does not invoke the callback on the nearest common ancestor because\n * nothing \"entered\" or \"left\" that element.\n *\n * @param {string} leaveID ID being left.\n * @param {string} enterID ID being entered.\n * @param {function} cb Callback to invoke on each entered/left ID.\n * @param {*} upArg Argument to invoke the callback with on left IDs.\n * @param {*} downArg Argument to invoke the callback with on entered IDs.\n * @internal\n */\n traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) {\n var ancestorID = getFirstCommonAncestorID(leaveID, enterID);\n if (ancestorID !== leaveID) {\n traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);\n }\n if (ancestorID !== enterID) {\n traverseParentPath(ancestorID, enterID, cb, downArg, true, false);\n }\n },\n\n /**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n *\n * NOTE: This traversal happens on IDs without touching the DOM.\n *\n * @param {string} targetID ID of the target node.\n * @param {function} cb Callback to invoke.\n * @param {*} arg Argument to invoke the callback with.\n * @internal\n */\n traverseTwoPhase: function (targetID, cb, arg) {\n if (targetID) {\n traverseParentPath('', targetID, cb, arg, true, false);\n traverseParentPath(targetID, '', cb, arg, false, true);\n }\n },\n\n /**\n * Same as `traverseTwoPhase` but skips the `targetID`.\n */\n traverseTwoPhaseSkipTarget: function (targetID, cb, arg) {\n if (targetID) {\n traverseParentPath('', targetID, cb, arg, true, true);\n traverseParentPath(targetID, '', cb, arg, true, true);\n }\n },\n\n /**\n * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For\n * example, passing `.0.$row-0.1` would result in `cb` getting called\n * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.\n *\n * NOTE: This traversal happens on IDs without touching the DOM.\n *\n * @param {string} targetID ID of the target node.\n * @param {function} cb Callback to invoke.\n * @param {*} arg Argument to invoke the callback with.\n * @internal\n */\n traverseAncestors: function (targetID, cb, arg) {\n traverseParentPath('', targetID, cb, arg, true, false);\n },\n\n getFirstCommonAncestorID: getFirstCommonAncestorID,\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _getNextDescendantID: getNextDescendantID,\n\n isAncestorIDOf: isAncestorIDOf,\n\n SEPARATOR: SEPARATOR\n\n};\n\nmodule.exports = ReactInstanceHandles;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceHandles.js\n ** module id = 44\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar ReactRootIndexInjection = {\n /**\n * @param {function} _createReactRootIndex\n */\n injectCreateReactRootIndex: function (_createReactRootIndex) {\n ReactRootIndex.createReactRootIndex = _createReactRootIndex;\n }\n};\n\nvar ReactRootIndex = {\n createReactRootIndex: null,\n injection: ReactRootIndexInjection\n};\n\nmodule.exports = ReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRootIndex.js\n ** module id = 45\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\nvar ReactInstanceMap = {\n\n /**\n * This API should be called `delete` but we'd have to make sure to always\n * transform these to strings for IE support. When this transform is fully\n * supported we can rename it.\n */\n remove: function (key) {\n key._reactInternalInstance = undefined;\n },\n\n get: function (key) {\n return key._reactInternalInstance;\n },\n\n has: function (key) {\n return key._reactInternalInstance !== undefined;\n },\n\n set: function (key, value) {\n key._reactInternalInstance = value;\n }\n\n};\n\nmodule.exports = ReactInstanceMap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstanceMap.js\n ** module id = 46\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMarkupChecksum\n */\n\n'use strict';\n\nvar adler32 = require('./adler32');\n\nvar TAG_END = /\\/?>/;\n\nvar ReactMarkupChecksum = {\n CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n /**\n * @param {string} markup Markup string\n * @return {string} Markup string with checksum attribute attached\n */\n addChecksumToMarkup: function (markup) {\n var checksum = adler32(markup);\n\n // Add checksum (handle both parent tags and self-closing tags)\n return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n },\n\n /**\n * @param {string} markup to use\n * @param {DOMElement} element root React element\n * @returns {boolean} whether or not the markup is the same\n */\n canReuseMarkup: function (markup, element) {\n var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n var markupChecksum = adler32(markup);\n return markupChecksum === existingChecksum;\n }\n};\n\nmodule.exports = ReactMarkupChecksum;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMarkupChecksum.js\n ** module id = 47\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule adler32\n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n var a = 1;\n var b = 0;\n var i = 0;\n var l = data.length;\n var m = l & ~0x3;\n while (i < m) {\n for (; i < Math.min(i + 4096, m); i += 4) {\n b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n }\n a %= MOD;\n b %= MOD;\n }\n for (; i < l; i++) {\n b += a += data.charCodeAt(i);\n }\n a %= MOD;\n b %= MOD;\n return a | b << 16;\n}\n\nmodule.exports = adler32;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/adler32.js\n ** module id = 48\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {ReactComponent} internalInstance\n * @param {string} rootID DOM ID of the root node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (internalInstance, rootID, transaction, context) {\n var markup = internalInstance.mountComponent(rootID, transaction, context);\n if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n return markup;\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function (internalInstance) {\n ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n internalInstance.unmountComponent();\n },\n\n /**\n * Update a component using a new element.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @internal\n */\n receiveComponent: function (internalInstance, nextElement, transaction, context) {\n var prevElement = internalInstance._currentElement;\n\n if (nextElement === prevElement && context === internalInstance._context) {\n // Since elements are immutable after the owner is rendered,\n // we can do a cheap identity compare here to determine if this is a\n // superfluous reconcile. It's possible for state to be mutable but such\n // change should trigger an update of the owner which would recreate\n // the element. We explicitly check for the existence of an owner since\n // it's possible for an element created outside a composite to be\n // deeply mutated and reused.\n\n // TODO: Bailing out early is just a perf optimization right?\n // TODO: Removing the return statement should affect correctness?\n return;\n }\n\n var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n if (refsChanged) {\n ReactRef.detachRefs(internalInstance, prevElement);\n }\n\n internalInstance.receiveComponent(nextElement, transaction, context);\n\n if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n },\n\n /**\n * Flush any dirty changes in a component.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (internalInstance, transaction) {\n internalInstance.performUpdateIfNecessary(transaction);\n }\n\n};\n\nmodule.exports = ReactReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconciler.js\n ** module id = 49\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = require('./ReactOwner');\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(component.getPublicInstance());\n } else {\n // Legacy ref\n ReactOwner.addComponentAsRefTo(component, ref, owner);\n }\n}\n\nfunction detachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(null);\n } else {\n // Legacy ref\n ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n }\n}\n\nReactRef.attachRefs = function (instance, element) {\n if (element === null || element === false) {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n attachRef(ref, instance, element._owner);\n }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n // If either the owner or a `ref` has changed, make sure the newest owner\n // has stored a reference to `this`, and the previous owner (if different)\n // has forgotten the reference to `this`. We use the element instead\n // of the public this.props because the post processing cannot determine\n // a ref. The ref conceptually lives on the element.\n\n // TODO: Should this even be possible? The owner cannot change because\n // it's forbidden by shouldUpdateReactComponent. The ref can change\n // if you swap the keys of but not the refs. Reconsider where this check\n // is made. It probably belongs where the key checking and\n // instantiateReactComponent is done.\n\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n\n return(\n // This has a few false positives w/r/t empty components.\n prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref\n );\n};\n\nReactRef.detachRefs = function (instance, element) {\n if (element === null || element === false) {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n detachRef(ref, instance, element._owner);\n }\n};\n\nmodule.exports = ReactRef;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRef.js\n ** module id = 50\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return (\n * <div onClick={this.handleClick}>\n * <CustomComponent ref=\"custom\" />\n * </div>\n * );\n * },\n * handleClick: function() {\n * this.refs.custom.handleClick();\n * },\n * componentDidMount: function() {\n * this.refs.custom.initialize();\n * }\n * });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n /**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid owner.\n * @final\n */\n isValidOwner: function (object) {\n return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n },\n\n /**\n * Adds a component by ref to an owner component.\n *\n * @param {ReactComponent} component Component to reference.\n * @param {string} ref Name by which to refer to the component.\n * @param {ReactOwner} owner Component on which to record the ref.\n * @final\n * @internal\n */\n addComponentAsRefTo: function (component, ref, owner) {\n !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n owner.attachRef(ref, component);\n },\n\n /**\n * Removes a component by ref from an owner component.\n *\n * @param {ReactComponent} component Component to dereference.\n * @param {string} ref Name of the ref to remove.\n * @param {ReactOwner} owner Component on which the ref is recorded.\n * @final\n * @internal\n */\n removeComponentAsRefFrom: function (component, ref, owner) {\n !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n // Check that `component` is still the current ref because we do not want to\n // detach the ref if another component stole it.\n if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {\n owner.detachRef(ref);\n }\n }\n\n};\n\nmodule.exports = ReactOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactOwner.js\n ** module id = 51\n ** module chunks = 0 1\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction enqueueUpdate(internalInstance) {\n ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (!internalInstance) {\n if (process.env.NODE_ENV !== 'production') {\n // Only warn when we have a callerName. Otherwise we should be silent.\n // We're probably calling from enqueueCallback. We don't want to warn\n // there because we already warned for the corresponding lifecycle method.\n process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined;\n }\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined;\n }\n\n return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n owner._warnedAboutRefsInRender = true;\n }\n }\n var internalInstance = ReactInstanceMap.get(publicInstance);\n if (internalInstance) {\n // During componentWillMount and render this will still be null but after\n // that will always render to something. At least for now. So we can use\n // this hack.\n return !!internalInstance._renderedComponent;\n } else {\n return false;\n }\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {\n !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n // Previously we would throw an error if we didn't have an internal\n // instance. Since we want to make it a no-op instead, we mirror the same\n // behavior we have in other enqueue* methods.\n // We also need to ignore callbacks in componentWillMount. See\n // enqueueUpdates.\n if (!internalInstance) {\n return null;\n }\n\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n // TODO: The callback here is ignored when setState is called from\n // componentWillMount. Either fix it or disallow doing so completely in\n // favor of getInitialState. Alternatively, we can disallow\n // componentWillMount during server-side rendering.\n enqueueUpdate(internalInstance);\n },\n\n enqueueCallbackInternal: function (internalInstance, callback) {\n !(typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n if (internalInstance._pendingCallbacks) {\n internalInstance._pendingCallbacks.push(callback);\n } else {\n internalInstance._pendingCallbacks = [callback];\n }\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingForceUpdate = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n if (!internalInstance) {\n return;\n }\n\n internalInstance._pendingStateQueue = [completeState];\n internalInstance._pendingReplaceState = true;\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n if (!internalInstance) {\n return;\n }\n\n var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n queue.push(partialState);\n\n enqueueUpdate(internalInstance);\n },\n\n /**\n * Sets a subset of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialProps Subset of the next props.\n * @internal\n */\n enqueueSetProps: function (publicInstance, partialProps) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');\n if (!internalInstance) {\n return;\n }\n ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps);\n },\n\n enqueueSetPropsInternal: function (internalInstance, partialProps) {\n var topLevelWrapper = internalInstance._topLevelWrapper;\n !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n // Merge with the pending element if it exists, otherwise with existing\n // element props.\n var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n var element = wrapElement.props;\n var props = assign({}, element.props, partialProps);\n topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n enqueueUpdate(topLevelWrapper);\n },\n\n /**\n * Replaces all of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} props New props.\n * @internal\n */\n enqueueReplaceProps: function (publicInstance, props) {\n var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');\n if (!internalInstance) {\n return;\n }\n ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props);\n },\n\n enqueueReplacePropsInternal: function (internalInstance, props) {\n var topLevelWrapper = internalInstance._topLevelWrapper;\n !topLevelWrapper ? process.env.NODE_ENV !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n // Merge with the pending element if it exists, otherwise with existing\n // element props.\n var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n var element = wrapElement.props;\n topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n enqueueUpdate(topLevelWrapper);\n },\n\n enqueueElementInternal: function (internalInstance, newElement) {\n internalInstance._pendingElement = newElement;\n enqueueUpdate(internalInstance);\n }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdateQueue.js\n ** module id = 52\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactPerf = require('./ReactPerf');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined;\n}\n\nvar NESTED_UPDATES = {\n initialize: function () {\n this.dirtyComponentsLength = dirtyComponents.length;\n },\n close: function () {\n if (this.dirtyComponentsLength !== dirtyComponents.length) {\n // Additional updates were enqueued by componentDidUpdate handlers or\n // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n // these new updates so that if A's componentDidUpdate calls setState on\n // B, B will update before the callback A's updater provided when calling\n // setState.\n dirtyComponents.splice(0, this.dirtyComponentsLength);\n flushBatchedUpdates();\n } else {\n dirtyComponents.length = 0;\n }\n }\n};\n\nvar UPDATE_QUEUEING = {\n initialize: function () {\n this.callbackQueue.reset();\n },\n close: function () {\n this.callbackQueue.notifyAll();\n }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n this.reinitializeTransaction();\n this.dirtyComponentsLength = null;\n this.callbackQueue = CallbackQueue.getPooled();\n this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);\n}\n\nassign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n destructor: function () {\n this.dirtyComponentsLength = null;\n CallbackQueue.release(this.callbackQueue);\n this.callbackQueue = null;\n ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n this.reconcileTransaction = null;\n },\n\n perform: function (method, scope, a) {\n // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n // with this transaction's wrappers around it.\n return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n ensureInjected();\n batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n var len = transaction.dirtyComponentsLength;\n !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined;\n\n // Since reconciling a component higher in the owner hierarchy usually (not\n // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n // them before their children by sorting the array.\n dirtyComponents.sort(mountOrderComparator);\n\n for (var i = 0; i < len; i++) {\n // If a component is unmounted before pending changes apply, it will still\n // be here, but we assume that it has cleared its _pendingCallbacks and\n // that performUpdateIfNecessary is a noop.\n var component = dirtyComponents[i];\n\n // If performUpdateIfNecessary happens to enqueue any new updates, we\n // shouldn't execute the callbacks until the next render happens, so\n // stash the callbacks first\n var callbacks = component._pendingCallbacks;\n component._pendingCallbacks = null;\n\n ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);\n\n if (callbacks) {\n for (var j = 0; j < callbacks.length; j++) {\n transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n }\n }\n }\n}\n\nvar flushBatchedUpdates = function () {\n // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n // array and perform any updates enqueued by mount-ready handlers (i.e.,\n // componentDidUpdate) but we need to check here too in order to catch\n // updates enqueued by setState callbacks and asap calls.\n while (dirtyComponents.length || asapEnqueued) {\n if (dirtyComponents.length) {\n var transaction = ReactUpdatesFlushTransaction.getPooled();\n transaction.perform(runBatchedUpdates, null, transaction);\n ReactUpdatesFlushTransaction.release(transaction);\n }\n\n if (asapEnqueued) {\n asapEnqueued = false;\n var queue = asapCallbackQueue;\n asapCallbackQueue = CallbackQueue.getPooled();\n queue.notifyAll();\n CallbackQueue.release(queue);\n }\n }\n};\nflushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n ensureInjected();\n\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (This is called by each top-level update\n // function, like setProps, setState, forceUpdate, etc.; creation and\n // destruction of top-level components is guarded in ReactMount.)\n\n if (!batchingStrategy.isBatchingUpdates) {\n batchingStrategy.batchedUpdates(enqueueUpdate, component);\n return;\n }\n\n dirtyComponents.push(component);\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined;\n asapCallbackQueue.enqueue(callback, context);\n asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n injectReconcileTransaction: function (ReconcileTransaction) {\n !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined;\n ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n },\n\n injectBatchingStrategy: function (_batchingStrategy) {\n !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined;\n !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined;\n !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined;\n batchingStrategy = _batchingStrategy;\n }\n};\n\nvar ReactUpdates = {\n /**\n * React references `ReactReconcileTransaction` using this property in order\n * to allow dependency injection.\n *\n * @internal\n */\n ReactReconcileTransaction: null,\n\n batchedUpdates: batchedUpdates,\n enqueueUpdate: enqueueUpdate,\n flushBatchedUpdates: flushBatchedUpdates,\n injection: ReactUpdatesInjection,\n asap: asap\n};\n\nmodule.exports = ReactUpdates;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdates.js\n ** module id = 53\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n this._callbacks = null;\n this._contexts = null;\n}\n\nassign(CallbackQueue.prototype, {\n\n /**\n * Enqueues a callback to be invoked when `notifyAll` is invoked.\n *\n * @param {function} callback Invoked when `notifyAll` is invoked.\n * @param {?object} context Context to call `callback` with.\n * @internal\n */\n enqueue: function (callback, context) {\n this._callbacks = this._callbacks || [];\n this._contexts = this._contexts || [];\n this._callbacks.push(callback);\n this._contexts.push(context);\n },\n\n /**\n * Invokes all enqueued callbacks and clears the queue. This is invoked after\n * the DOM representation of a component has been created or updated.\n *\n * @internal\n */\n notifyAll: function () {\n var callbacks = this._callbacks;\n var contexts = this._contexts;\n if (callbacks) {\n !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined;\n this._callbacks = null;\n this._contexts = null;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].call(contexts[i]);\n }\n callbacks.length = 0;\n contexts.length = 0;\n }\n },\n\n /**\n * Resets the internal queue.\n *\n * @internal\n */\n reset: function () {\n this._callbacks = null;\n this._contexts = null;\n },\n\n /**\n * `PooledClass` looks for this.\n */\n destructor: function () {\n this.reset();\n }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CallbackQueue.js\n ** module id = 54\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, copyFieldsFrom);\n return instance;\n } else {\n return new Klass(copyFieldsFrom);\n }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3);\n return instance;\n } else {\n return new Klass(a1, a2, a3);\n }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4);\n }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2, a3, a4, a5);\n return instance;\n } else {\n return new Klass(a1, a2, a3, a4, a5);\n }\n};\n\nvar standardReleaser = function (instance) {\n var Klass = this;\n !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances (optional).\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\n\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n oneArgumentPooler: oneArgumentPooler,\n twoArgumentPooler: twoArgumentPooler,\n threeArgumentPooler: threeArgumentPooler,\n fourArgumentPooler: fourArgumentPooler,\n fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/PooledClass.js\n ** module id = 55\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n * <pre>\n * wrappers (injected at creation time)\n * + +\n * | |\n * +-----------------|--------|--------------+\n * | v | |\n * | +---------------+ | |\n * | +--| wrapper1 |---|----+ |\n * | | +---------------+ v | |\n * | | +-------------+ | |\n * | | +----| wrapper2 |--------+ |\n * | | | +-------------+ | | |\n * | | | | | |\n * | v v v v | wrapper\n * | +---+ +---+ +---------+ +---+ +---+ | invariants\n * perform(anyMethod) | | | | | | | | | | | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n * | | | | | | | | | | | |\n * | | | | | | | | | | | |\n * | | | | | | | | | | | |\n * | +---+ +---+ +---------+ +---+ +---+ |\n * | initialize close |\n * +-----------------------------------------+\n * </pre>\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n * Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n * while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n * reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n * content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n * to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n * when the wrapped process is completed, or has failed.\n *\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n /**\n * Sets up this instance so that it is prepared for collecting metrics. Does\n * so such that this setup method may be used on an instance that is already\n * initialized, in a way that does not consume additional memory upon reuse.\n * That can be useful if you decide to make your subclass of this mixin a\n * \"PooledClass\".\n */\n reinitializeTransaction: function () {\n this.transactionWrappers = this.getTransactionWrappers();\n if (this.wrapperInitData) {\n this.wrapperInitData.length = 0;\n } else {\n this.wrapperInitData = [];\n }\n this._isInTransaction = false;\n },\n\n _isInTransaction: false,\n\n /**\n * @abstract\n * @return {Array<TransactionWrapper>} Array of transaction wrappers.\n */\n getTransactionWrappers: null,\n\n isInTransaction: function () {\n return !!this._isInTransaction;\n },\n\n /**\n * Executes the function within a safety window. Use this for the top level\n * methods that result in large amounts of computation/mutations that would\n * need to be safety checked. The optional arguments helps prevent the need\n * to bind in many cases.\n *\n * @param {function} method Member of scope to call.\n * @param {Object} scope Scope to invoke from.\n * @param {Object?=} a Argument to pass to the method.\n * @param {Object?=} b Argument to pass to the method.\n * @param {Object?=} c Argument to pass to the method.\n * @param {Object?=} d Argument to pass to the method.\n * @param {Object?=} e Argument to pass to the method.\n * @param {Object?=} f Argument to pass to the method.\n *\n * @return {*} Return value from `method`.\n */\n perform: function (method, scope, a, b, c, d, e, f) {\n !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;\n var errorThrown;\n var ret;\n try {\n this._isInTransaction = true;\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // one of these calls threw.\n errorThrown = true;\n this.initializeAll(0);\n ret = method.call(scope, a, b, c, d, e, f);\n errorThrown = false;\n } finally {\n try {\n if (errorThrown) {\n // If `method` throws, prefer to show that stack trace over any thrown\n // by invoking `closeAll`.\n try {\n this.closeAll(0);\n } catch (err) {}\n } else {\n // Since `method` didn't throw, we don't want to silence the exception\n // here.\n this.closeAll(0);\n }\n } finally {\n this._isInTransaction = false;\n }\n }\n return ret;\n },\n\n initializeAll: function (startIndex) {\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n try {\n // Catching errors makes debugging more difficult, so we start with the\n // OBSERVED_ERROR state before overwriting it with the real return value\n // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n // block, it means wrapper.initialize threw.\n this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n } finally {\n if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n // The initializer for wrapper i threw an error; initialize the\n // remaining wrappers but silence any exceptions from them to ensure\n // that the first error is the one to bubble up.\n try {\n this.initializeAll(i + 1);\n } catch (err) {}\n }\n }\n }\n },\n\n /**\n * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n * them the respective return values of `this.transactionWrappers.init[i]`\n * (`close`rs that correspond to initializers that failed will not be\n * invoked).\n */\n closeAll: function (startIndex) {\n !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n var initData = this.wrapperInitData[i];\n var errorThrown;\n try {\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // wrapper.close threw.\n errorThrown = true;\n if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n wrapper.close.call(this, initData);\n }\n errorThrown = false;\n } finally {\n if (errorThrown) {\n // The closer for wrapper i threw an error; close the remaining\n // wrappers but silence any exceptions from them to ensure that the\n // first error is the one to bubble up.\n try {\n this.closeAll(i + 1);\n } catch (e) {}\n }\n }\n }\n this.wrapperInitData.length = 0;\n }\n};\n\nvar Transaction = {\n\n Mixin: Mixin,\n\n /**\n * Token to look for to determine if an error occurred.\n */\n OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Transaction.js\n ** module id = 56\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyObject\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyObject.js\n ** module id = 57\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule containsNode\n * @typechecks\n */\n\n'use strict';\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n *\n * @param {?DOMNode} outerNode Outer DOM node.\n * @param {?DOMNode} innerNode Inner DOM node.\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\n */\nfunction containsNode(_x, _x2) {\n var _again = true;\n\n _function: while (_again) {\n var outerNode = _x,\n innerNode = _x2;\n _again = false;\n\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n _x = outerNode;\n _x2 = innerNode.parentNode;\n _again = true;\n continue _function;\n } else if (outerNode.contains) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n }\n}\n\nmodule.exports = containsNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/containsNode.js\n ** module id = 58\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextNode\n * @typechecks\n */\n\n'use strict';\n\nvar isNode = require('./isNode');\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/isTextNode.js\n ** module id = 59\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isNode\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\n'use strict';\n\nfunction isNode(object) {\n return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/isNode.js\n ** module id = 60\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCompositeComponent = require('./ReactCompositeComponent');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactNativeComponent = require('./ReactNativeComponent');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function () {};\nassign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node) {\n var instance;\n\n if (node === null || node === false) {\n instance = new ReactEmptyComponent(instantiateReactComponent);\n } else if (typeof node === 'object') {\n var element = node;\n !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;\n\n // Special case string values\n if (typeof element.type === 'string') {\n instance = ReactNativeComponent.createInternalComponent(element);\n } else if (isInternalComponentType(element.type)) {\n // This is temporarily available for custom components that are not string\n // representations. I.e. ART. Once those are updated to use the string\n // representation, we can drop this code path.\n instance = new element.type(element);\n } else {\n instance = new ReactCompositeComponentWrapper();\n }\n } else if (typeof node === 'string' || typeof node === 'number') {\n instance = ReactNativeComponent.createInstanceForText(node);\n } else {\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined;\n }\n\n // Sets up the instance. This can probably just move into the constructor now.\n instance.construct(node);\n\n // These two fields are used by the DOM and ART diffing algorithms\n // respectively. Instead of using expandos on components, we should be\n // storing the state needed by the diffing algorithms elsewhere.\n instance._mountIndex = 0;\n instance._mountImage = null;\n\n if (process.env.NODE_ENV !== 'production') {\n instance._isOwnerNecessary = false;\n instance._warnedAboutRefsInRender = false;\n }\n\n // Internal instances should fully constructed at this point, so they should\n // not get any new fields added to them at this point.\n if (process.env.NODE_ENV !== 'production') {\n if (Object.preventExtensions) {\n Object.preventExtensions(instance);\n }\n }\n\n return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/instantiateReactComponent.js\n ** module id = 61\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCompositeComponent\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactPerf = require('./ReactPerf');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum(component) {\n var owner = component._currentElement._owner || null;\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n var Component = ReactInstanceMap.get(this)._currentElement.type;\n return Component(this.props, this.context, this.updater);\n};\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n * - componentWillMount\n * - render\n * - [children's constructors]\n * - [children's componentWillMount and render]\n * - [children's componentDidMount]\n * - componentDidMount\n *\n * Update Phases:\n * - componentWillReceiveProps (only called if parent updated)\n * - shouldComponentUpdate\n * - componentWillUpdate\n * - render\n * - [children's constructors or receive props phases]\n * - componentDidUpdate\n *\n * - componentWillUnmount\n * - [children's componentWillUnmount]\n * - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponentMixin = {\n\n /**\n * Base constructor for all composite component.\n *\n * @param {ReactElement} element\n * @final\n * @internal\n */\n construct: function (element) {\n this._currentElement = element;\n this._rootNodeID = null;\n this._instance = null;\n\n // See ReactUpdateQueue\n this._pendingElement = null;\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n\n this._renderedComponent = null;\n\n this._context = null;\n this._mountOrder = 0;\n this._topLevelWrapper = null;\n\n // See ReactUpdates and ReactUpdateQueue.\n this._pendingCallbacks = null;\n },\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {string} rootID DOM ID of the root node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (rootID, transaction, context) {\n this._context = context;\n this._mountOrder = nextMountID++;\n this._rootNodeID = rootID;\n\n var publicProps = this._processProps(this._currentElement.props);\n var publicContext = this._processContext(context);\n\n var Component = this._currentElement.type;\n\n // Initialize the public class\n var inst;\n var renderedElement;\n\n // This is a way to detect if Component is a stateless arrow function\n // component, which is not newable. It might not be 100% reliable but is\n // something we can do until we start detecting that Component extends\n // React.Component. We already assume that typeof Component === 'function'.\n var canInstantiate = ('prototype' in Component);\n\n if (canInstantiate) {\n if (process.env.NODE_ENV !== 'production') {\n ReactCurrentOwner.current = this;\n try {\n inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n } finally {\n ReactCurrentOwner.current = null;\n }\n } else {\n inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n }\n }\n\n if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) {\n renderedElement = inst;\n inst = new StatelessComponent(Component);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This will throw later in _renderValidatedComponent, but add an early\n // warning now to help debugging\n if (inst.render == null) {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\\'t a React component.', Component.displayName || Component.name || 'Component') : undefined;\n } else {\n // We support ES6 inheriting from React.Component, the module pattern,\n // and stateless components, but not ES6 classes that don't extend\n process.env.NODE_ENV !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined;\n }\n }\n\n // These should be set up in the constructor, but as a convenience for\n // simpler class abstractions, we set them up after the fact.\n inst.props = publicProps;\n inst.context = publicContext;\n inst.refs = emptyObject;\n inst.updater = ReactUpdateQueue;\n\n this._instance = inst;\n\n // Store a reference from the instance back to the internal representation\n ReactInstanceMap.set(inst, this);\n\n if (process.env.NODE_ENV !== 'production') {\n // Since plain JS classes are defined without any special initialization\n // logic, we can not catch common errors early. Therefore, we have to\n // catch them here, at initialization time, instead.\n process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined;\n }\n\n var initialState = inst.state;\n if (initialState === undefined) {\n inst.state = initialState = null;\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n\n if (inst.componentWillMount) {\n inst.componentWillMount();\n // When mounting, calls to `setState` by `componentWillMount` will set\n // `this._pendingStateQueue` without triggering a re-render.\n if (this._pendingStateQueue) {\n inst.state = this._processPendingState(inst.props, inst.context);\n }\n }\n\n // If not a stateless component, we now render\n if (renderedElement === undefined) {\n renderedElement = this._renderValidatedComponent();\n }\n\n this._renderedComponent = this._instantiateReactComponent(renderedElement);\n\n var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context));\n if (inst.componentDidMount) {\n transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n }\n\n return markup;\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function () {\n var inst = this._instance;\n\n if (inst.componentWillUnmount) {\n inst.componentWillUnmount();\n }\n\n ReactReconciler.unmountComponent(this._renderedComponent);\n this._renderedComponent = null;\n this._instance = null;\n\n // Reset pending fields\n // Even if this component is scheduled for another update in ReactUpdates,\n // it would still be ignored because these fields are reset.\n this._pendingStateQueue = null;\n this._pendingReplaceState = false;\n this._pendingForceUpdate = false;\n this._pendingCallbacks = null;\n this._pendingElement = null;\n\n // These fields do not really need to be reset since this object is no\n // longer accessible.\n this._context = null;\n this._rootNodeID = null;\n this._topLevelWrapper = null;\n\n // Delete the reference from the instance to this internal representation\n // which allow the internals to be properly cleaned up even if the user\n // leaks a reference to the public instance.\n ReactInstanceMap.remove(inst);\n\n // Some existing components rely on inst.props even after they've been\n // destroyed (in event handlers).\n // TODO: inst.props = null;\n // TODO: inst.state = null;\n // TODO: inst.context = null;\n },\n\n /**\n * Filters the context object to only contain keys specified in\n * `contextTypes`\n *\n * @param {object} context\n * @return {?object}\n * @private\n */\n _maskContext: function (context) {\n var maskedContext = null;\n var Component = this._currentElement.type;\n var contextTypes = Component.contextTypes;\n if (!contextTypes) {\n return emptyObject;\n }\n maskedContext = {};\n for (var contextName in contextTypes) {\n maskedContext[contextName] = context[contextName];\n }\n return maskedContext;\n },\n\n /**\n * Filters the context object to only contain keys specified in\n * `contextTypes`, and asserts that they are valid.\n *\n * @param {object} context\n * @return {?object}\n * @private\n */\n _processContext: function (context) {\n var maskedContext = this._maskContext(context);\n if (process.env.NODE_ENV !== 'production') {\n var Component = this._currentElement.type;\n if (Component.contextTypes) {\n this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);\n }\n }\n return maskedContext;\n },\n\n /**\n * @param {object} currentContext\n * @return {object}\n * @private\n */\n _processChildContext: function (currentContext) {\n var Component = this._currentElement.type;\n var inst = this._instance;\n var childContext = inst.getChildContext && inst.getChildContext();\n if (childContext) {\n !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n if (process.env.NODE_ENV !== 'production') {\n this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);\n }\n for (var name in childContext) {\n !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined;\n }\n return assign({}, currentContext, childContext);\n }\n return currentContext;\n },\n\n /**\n * Processes props by setting default values for unspecified props and\n * asserting that the props are valid. Does not mutate its argument; returns\n * a new props object with defaults merged in.\n *\n * @param {object} newProps\n * @return {object}\n * @private\n */\n _processProps: function (newProps) {\n if (process.env.NODE_ENV !== 'production') {\n var Component = this._currentElement.type;\n if (Component.propTypes) {\n this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);\n }\n }\n return newProps;\n },\n\n /**\n * Assert that the props are valid\n *\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\n _checkPropTypes: function (propTypes, props, location) {\n // TODO: Stop validating prop types here and only use the element\n // validation.\n var componentName = this.getName();\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error;\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n error = propTypes[propName](props, propName, componentName, location);\n } catch (ex) {\n error = ex;\n }\n if (error instanceof Error) {\n // We may want to extend this logic for similar errors in\n // top-level render calls, so I'm abstracting it away into\n // a function to minimize refactoring in the future\n var addendum = getDeclarationErrorAddendum(this);\n\n if (location === ReactPropTypeLocations.prop) {\n // Preface gives us something to blacklist in warning module\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined;\n }\n }\n }\n }\n },\n\n receiveComponent: function (nextElement, transaction, nextContext) {\n var prevElement = this._currentElement;\n var prevContext = this._context;\n\n this._pendingElement = null;\n\n this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n },\n\n /**\n * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n * is set, update the component.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (transaction) {\n if (this._pendingElement != null) {\n ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);\n }\n\n if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n }\n },\n\n /**\n * Perform an update to a mounted component. The componentWillReceiveProps and\n * shouldComponentUpdate methods are called, then (assuming the update isn't\n * skipped) the remaining update lifecycle methods are called and the DOM\n * representation is updated.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @param {ReactElement} prevParentElement\n * @param {ReactElement} nextParentElement\n * @internal\n * @overridable\n */\n updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n var inst = this._instance;\n\n var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext);\n var nextProps;\n\n // Distinguish between a props update versus a simple state update\n if (prevParentElement === nextParentElement) {\n // Skip checking prop types again -- we don't read inst.props to avoid\n // warning for DOM component props in this upgrade\n nextProps = nextParentElement.props;\n } else {\n nextProps = this._processProps(nextParentElement.props);\n // An update here will schedule an update but immediately set\n // _pendingStateQueue which will ensure that any state updates gets\n // immediately reconciled instead of waiting for the next batch.\n\n if (inst.componentWillReceiveProps) {\n inst.componentWillReceiveProps(nextProps, nextContext);\n }\n }\n\n var nextState = this._processPendingState(nextProps, nextContext);\n\n var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined;\n }\n\n if (shouldUpdate) {\n this._pendingForceUpdate = false;\n // Will set `this.props`, `this.state` and `this.context`.\n this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n } else {\n // If it's determined that a component should not update, we still want\n // to set props and state but we shortcut the rest of the update.\n this._currentElement = nextParentElement;\n this._context = nextUnmaskedContext;\n inst.props = nextProps;\n inst.state = nextState;\n inst.context = nextContext;\n }\n },\n\n _processPendingState: function (props, context) {\n var inst = this._instance;\n var queue = this._pendingStateQueue;\n var replace = this._pendingReplaceState;\n this._pendingReplaceState = false;\n this._pendingStateQueue = null;\n\n if (!queue) {\n return inst.state;\n }\n\n if (replace && queue.length === 1) {\n return queue[0];\n }\n\n var nextState = assign({}, replace ? queue[0] : inst.state);\n for (var i = replace ? 1 : 0; i < queue.length; i++) {\n var partial = queue[i];\n assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n }\n\n return nextState;\n },\n\n /**\n * Merges new props and state, notifies delegate methods of update and\n * performs update.\n *\n * @param {ReactElement} nextElement Next element\n * @param {object} nextProps Next public object to set as properties.\n * @param {?object} nextState Next object to set as state.\n * @param {?object} nextContext Next public object to set as context.\n * @param {ReactReconcileTransaction} transaction\n * @param {?object} unmaskedContext\n * @private\n */\n _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n var inst = this._instance;\n\n var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n var prevProps;\n var prevState;\n var prevContext;\n if (hasComponentDidUpdate) {\n prevProps = inst.props;\n prevState = inst.state;\n prevContext = inst.context;\n }\n\n if (inst.componentWillUpdate) {\n inst.componentWillUpdate(nextProps, nextState, nextContext);\n }\n\n this._currentElement = nextElement;\n this._context = unmaskedContext;\n inst.props = nextProps;\n inst.state = nextState;\n inst.context = nextContext;\n\n this._updateRenderedComponent(transaction, unmaskedContext);\n\n if (hasComponentDidUpdate) {\n transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n }\n },\n\n /**\n * Call the component's `render` method and update the DOM accordingly.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n _updateRenderedComponent: function (transaction, context) {\n var prevComponentInstance = this._renderedComponent;\n var prevRenderedElement = prevComponentInstance._currentElement;\n var nextRenderedElement = this._renderValidatedComponent();\n if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n } else {\n // These two IDs are actually the same! But nothing should rely on that.\n var thisID = this._rootNodeID;\n var prevComponentID = prevComponentInstance._rootNodeID;\n ReactReconciler.unmountComponent(prevComponentInstance);\n\n this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);\n var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context));\n this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n }\n },\n\n /**\n * @protected\n */\n _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) {\n ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n },\n\n /**\n * @protected\n */\n _renderValidatedComponentWithoutOwnerOrContext: function () {\n var inst = this._instance;\n var renderedComponent = inst.render();\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n renderedComponent = null;\n }\n }\n\n return renderedComponent;\n },\n\n /**\n * @private\n */\n _renderValidatedComponent: function () {\n var renderedComponent;\n ReactCurrentOwner.current = this;\n try {\n renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n } finally {\n ReactCurrentOwner.current = null;\n }\n !(\n // TODO: An `isValidNode` function would probably be more appropriate\n renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n return renderedComponent;\n },\n\n /**\n * Lazily allocates the refs object and stores `component` as `ref`.\n *\n * @param {string} ref Reference name.\n * @param {component} component Component to store as `ref`.\n * @final\n * @private\n */\n attachRef: function (ref, component) {\n var inst = this.getPublicInstance();\n !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined;\n var publicComponentInstance = component.getPublicInstance();\n if (process.env.NODE_ENV !== 'production') {\n var componentName = component && component.getName ? component.getName() : 'a component';\n process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined;\n }\n var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n refs[ref] = publicComponentInstance;\n },\n\n /**\n * Detaches a reference name.\n *\n * @param {string} ref Name to dereference.\n * @final\n * @private\n */\n detachRef: function (ref) {\n var refs = this.getPublicInstance().refs;\n delete refs[ref];\n },\n\n /**\n * Get a text description of the component that can be used to identify it\n * in error messages.\n * @return {string} The name or null.\n * @internal\n */\n getName: function () {\n var type = this._currentElement.type;\n var constructor = this._instance && this._instance.constructor;\n return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n },\n\n /**\n * Get the publicly accessible representation of this component - i.e. what\n * is exposed by refs and returned by render. Can be null for stateless\n * components.\n *\n * @return {ReactComponent} the public component instance.\n * @internal\n */\n getPublicInstance: function () {\n var inst = this._instance;\n if (inst instanceof StatelessComponent) {\n return null;\n }\n return inst;\n },\n\n // Stub\n _instantiateReactComponent: null\n\n};\n\nReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {\n mountComponent: 'mountComponent',\n updateComponent: 'updateComponent',\n _renderValidatedComponent: '_renderValidatedComponent'\n});\n\nvar ReactCompositeComponent = {\n\n Mixin: ReactCompositeComponentMixin\n\n};\n\nmodule.exports = ReactCompositeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCompositeComponent.js\n ** module id = 62\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n /**\n * Optionally injectable environment dependent cleanup hook. (server vs.\n * browser etc). Example: A browser system caches DOM nodes based on component\n * ID and must remove that cache entry when this instance is unmounted.\n */\n unmountIDFromEnvironment: null,\n\n /**\n * Optionally injectable hook for swapping out mount images in the middle of\n * the tree.\n */\n replaceNodeWithMarkupByID: null,\n\n /**\n * Optionally injectable hook for processing a queue of child updates. Will\n * later move into MultiChildComponents.\n */\n processChildrenUpdates: null,\n\n injection: {\n injectEnvironment: function (environment) {\n !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined;\n ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;\n ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;\n ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n injected = true;\n }\n }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentEnvironment.js\n ** module id = 63\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar ReactPropTypeLocations = keyMirror({\n prop: null,\n context: null,\n childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocations.js\n ** module id = 64\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocationNames.js\n ** module id = 65\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n if (prevEmpty || nextEmpty) {\n return prevEmpty === nextEmpty;\n }\n\n var prevType = typeof prevElement;\n var nextType = typeof nextElement;\n if (prevType === 'string' || prevType === 'number') {\n return nextType === 'string' || nextType === 'number';\n } else {\n return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n }\n return false;\n}\n\nmodule.exports = shouldUpdateReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/shouldUpdateReactComponent.js\n ** module id = 66\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactEmptyComponentRegistry = require('./ReactEmptyComponentRegistry');\nvar ReactReconciler = require('./ReactReconciler');\n\nvar assign = require('./Object.assign');\n\nvar placeholderElement;\n\nvar ReactEmptyComponentInjection = {\n injectEmptyComponent: function (component) {\n placeholderElement = ReactElement.createElement(component);\n }\n};\n\nvar ReactEmptyComponent = function (instantiate) {\n this._currentElement = null;\n this._rootNodeID = null;\n this._renderedComponent = instantiate(placeholderElement);\n};\nassign(ReactEmptyComponent.prototype, {\n construct: function (element) {},\n mountComponent: function (rootID, transaction, context) {\n ReactEmptyComponentRegistry.registerNullComponentID(rootID);\n this._rootNodeID = rootID;\n return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context);\n },\n receiveComponent: function () {},\n unmountComponent: function (rootID, transaction, context) {\n ReactReconciler.unmountComponent(this._renderedComponent);\n ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);\n this._rootNodeID = null;\n this._renderedComponent = null;\n }\n});\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEmptyComponent.js\n ** module id = 67\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNativeComponent\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar autoGenerateWrapperClass = null;\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around native tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactNativeComponentInjection = {\n // This accepts a class that receives the tag string. This is a catch all\n // that can render any kind of tag.\n injectGenericComponentClass: function (componentClass) {\n genericComponentClass = componentClass;\n },\n // This accepts a text component class that takes the text string to be\n // rendered as props.\n injectTextComponentClass: function (componentClass) {\n textComponentClass = componentClass;\n },\n // This accepts a keyed object with classes as values. Each key represents a\n // tag. That particular tag will use this class instead of the generic one.\n injectComponentClasses: function (componentClasses) {\n assign(tagToComponentClass, componentClasses);\n }\n};\n\n/**\n * Get a composite component wrapper class for a specific tag.\n *\n * @param {ReactElement} element The tag for which to get the class.\n * @return {function} The React class constructor function.\n */\nfunction getComponentClassForElement(element) {\n if (typeof element.type === 'function') {\n return element.type;\n }\n var tag = element.type;\n var componentClass = tagToComponentClass[tag];\n if (componentClass == null) {\n tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);\n }\n return componentClass;\n}\n\n/**\n * Get a native internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined;\n return new genericComponentClass(element.type, element.props);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n return component instanceof textComponentClass;\n}\n\nvar ReactNativeComponent = {\n getComponentClassForElement: getComponentClassForElement,\n createInternalComponent: createInternalComponent,\n createInstanceForText: createInstanceForText,\n isTextComponent: isTextComponent,\n injection: ReactNativeComponentInjection\n};\n\nmodule.exports = ReactNativeComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNativeComponent.js\n ** module id = 68\n ** module chunks = 0 1\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example, <b><div></div></b> is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n // <p> tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for <title>, including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title'];\n\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n var buttonScopeTags = inScopeTags.concat(['button']);\n\n // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n var emptyAncestorInfo = {\n parentTag: null,\n\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n var updatedAncestorInfo = function (oldInfo, tag, instance) {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);\n var info = { tag: tag, instance: instance };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n }\n\n // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.parentTag = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n\n /**\n * Returns whether\n */\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n case 'option':\n return tag === '#text';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n case 'html':\n return tag === 'head' || tag === 'body';\n }\n\n // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frame':\n case 'head':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n\n /**\n * Returns whether\n */\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n\n case 'pre':\n case 'listing':\n\n case 'table':\n\n case 'hr':\n\n case 'xmp':\n\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n /**\n * Given a ReactCompositeComponent instance, return a list of its recursive\n * owners, starting at the root and ending with the instance itself.\n */\n var findOwnerStack = function (instance) {\n if (!instance) {\n return [];\n }\n\n var stack = [];\n /*eslint-disable space-after-keywords */\n do {\n /*eslint-enable space-after-keywords */\n stack.push(instance);\n } while (instance = instance._currentElement._owner);\n stack.reverse();\n return stack;\n };\n\n var didWarn = {};\n\n validateDOMNesting = function (childTag, childInstance, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.parentTag;\n var parentTag = parentInfo && parentInfo.tag;\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var problematic = invalidParent || invalidAncestor;\n\n if (problematic) {\n var ancestorTag = problematic.tag;\n var ancestorInstance = problematic.instance;\n\n var childOwner = childInstance && childInstance._currentElement._owner;\n var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n var childOwners = findOwnerStack(childOwner);\n var ancestorOwners = findOwnerStack(ancestorOwner);\n\n var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n var i;\n\n var deepestCommon = -1;\n for (i = 0; i < minStackLen; i++) {\n if (childOwners[i] === ancestorOwners[i]) {\n deepestCommon = i;\n } else {\n break;\n }\n }\n\n var UNKNOWN = '(unknown)';\n var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n return inst.getName() || UNKNOWN;\n });\n var ownerInfo = [].concat(\n // If the parent and child instances have a common owner ancestor, start\n // with that -- otherwise we just start with the parent's owners.\n deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n // If we're warning about an invalid (non-parent) ancestry, add '...'\n invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n if (didWarn[warnKey]) {\n return;\n }\n didWarn[warnKey] = true;\n\n if (invalidParent) {\n var info = '';\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined;\n }\n }\n };\n\n validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2);\n\n validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n // For testing\n validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.parentTag;\n var parentTag = parentInfo && parentInfo.tag;\n return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n };\n}\n\nmodule.exports = validateDOMNesting;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/validateDOMNesting.js\n ** module id = 69\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = require('./BeforeInputEventPlugin');\nvar ChangeEventPlugin = require('./ChangeEventPlugin');\nvar ClientReactRootIndex = require('./ClientReactRootIndex');\nvar DefaultEventPluginOrder = require('./DefaultEventPluginOrder');\nvar EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');\nvar ReactBrowserComponentMixin = require('./ReactBrowserComponentMixin');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactDOMComponent = require('./ReactDOMComponent');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactEventListener = require('./ReactEventListener');\nvar ReactInjection = require('./ReactInjection');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactReconcileTransaction = require('./ReactReconcileTransaction');\nvar SelectEventPlugin = require('./SelectEventPlugin');\nvar ServerReactRootIndex = require('./ServerReactRootIndex');\nvar SimpleEventPlugin = require('./SimpleEventPlugin');\nvar SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');\n\nvar alreadyInjected = false;\n\nfunction inject() {\n if (alreadyInjected) {\n // TODO: This is currently true because these injections are shared between\n // the client and the server package. They should be built independently\n // and not share any injection state. Then this problem will be solved.\n return;\n }\n alreadyInjected = true;\n\n ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n /**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);\n ReactInjection.EventPluginHub.injectMount(ReactMount);\n\n /**\n * Some important event plugins included by default (without having to require\n * them).\n */\n ReactInjection.EventPluginHub.injectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n });\n\n ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);\n\n ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);\n\n ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n ReactInjection.EmptyComponent.injectEmptyComponent('noscript');\n\n ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);\n\n ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n\n if (process.env.NODE_ENV !== 'production') {\n var url = ExecutionEnvironment.canUseDOM && window.location.href || '';\n if (/[?&]react_perf\\b/.test(url)) {\n var ReactDefaultPerf = require('./ReactDefaultPerf');\n ReactDefaultPerf.start();\n }\n }\n}\n\nmodule.exports = {\n inject: inject\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultInjection.js\n ** module id = 70\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015 Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar FallbackCompositionState = require('./FallbackCompositionState');\nvar SyntheticCompositionEvent = require('./SyntheticCompositionEvent');\nvar SyntheticInputEvent = require('./SyntheticInputEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n var opera = window.opera;\n return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onBeforeInput: null }),\n captured: keyOf({ onBeforeInputCapture: null })\n },\n dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionEnd: null }),\n captured: keyOf({ onCompositionEndCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionStart: null }),\n captured: keyOf({ onCompositionStartCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionUpdate: null }),\n captured: keyOf({ onCompositionUpdateCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case topLevelTypes.topCompositionStart:\n return eventTypes.compositionStart;\n case topLevelTypes.topCompositionEnd:\n return eventTypes.compositionEnd;\n case topLevelTypes.topCompositionUpdate:\n return eventTypes.compositionUpdate;\n }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case topLevelTypes.topKeyUp:\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n case topLevelTypes.topKeyDown:\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n case topLevelTypes.topKeyPress:\n case topLevelTypes.topMouseDown:\n case topLevelTypes.topBlur:\n // Events are not possible without cancelling IME.\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!currentComposition) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!currentComposition && eventType === eventTypes.compositionStart) {\n currentComposition = FallbackCompositionState.getPooled(topLevelTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (currentComposition) {\n fallbackData = currentComposition.getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case topLevelTypes.topCompositionEnd:\n return getDataFromCustomEvent(nativeEvent);\n case topLevelTypes.topKeyPress:\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case topLevelTypes.topTextInput:\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data;\n\n // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to blacklist it.\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n if (currentComposition) {\n if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = currentComposition.getData();\n FallbackCompositionState.release(currentComposition);\n currentComposition = null;\n return chars;\n }\n return null;\n }\n\n switch (topLevelType) {\n case topLevelTypes.topPaste:\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n case topLevelTypes.topKeyPress:\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case topLevelTypes.topCompositionEnd:\n return useFallbackCompositionData ? null : nativeEvent.data;\n default:\n return null;\n }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n }\n\n // If no characters are being inserted, no BeforeInput event should\n // be fired.\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n event.data = chars;\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)];\n }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/BeforeInputEventPlugin.js\n ** module id = 71\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\n\nvar warning = require('fbjs/lib/warning');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(id, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(id, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(domID, upwards, event) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined;\n }\n var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n var listener = listenerAtPhase(domID, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(id, ignoredDirection, event) {\n if (event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(id, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchIDs = accumulateInto(event._dispatchIDs, id);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event.dispatchMarker, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {\n EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n accumulateDirectDispatches: accumulateDirectDispatches,\n accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPropagators.js\n ** module id = 72\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n this._root = root;\n this._startText = this.getText();\n this._fallbackText = null;\n}\n\nassign(FallbackCompositionState.prototype, {\n destructor: function () {\n this._root = null;\n this._startText = null;\n this._fallbackText = null;\n },\n\n /**\n * Get current text of input.\n *\n * @return {string}\n */\n getText: function () {\n if ('value' in this._root) {\n return this._root.value;\n }\n return this._root[getTextContentAccessor()];\n },\n\n /**\n * Determine the differing substring between the initially stored\n * text content and the current content.\n *\n * @return {string}\n */\n getData: function () {\n if (this._fallbackText) {\n return this._fallbackText;\n }\n\n var start;\n var startValue = this._startText;\n var startLength = startValue.length;\n var end;\n var endValue = this.getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n this._fallbackText = endValue.slice(start, sliceTail);\n return this._fallbackText;\n }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/FallbackCompositionState.js\n ** module id = 73\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n if (!contentKey && ExecutionEnvironment.canUseDOM) {\n // Prefer textContent to innerText because many browsers support both but\n // SVG <text> elements don't support innerText even when <div> does.\n contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n }\n return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getTextContentAccessor.js\n ** module id = 74\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticCompositionEvent.js\n ** module id = 75\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: emptyFunction.thatReturnsNull,\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n */\nfunction SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n this.dispatchConfig = dispatchConfig;\n this.dispatchMarker = dispatchMarker;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = nativeEventTarget;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n } else {\n this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n}\n\nassign(SyntheticEvent.prototype, {\n\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n }\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else {\n event.returnValue = false;\n }\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n }\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else {\n event.cancelBubble = true;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: emptyFunction.thatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n this[propName] = null;\n }\n this.dispatchConfig = null;\n this.dispatchMarker = null;\n this.nativeEvent = null;\n }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n var Super = this;\n\n var prototype = Object.create(Super.prototype);\n assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = assign({}, Super.Interface, Interface);\n Class.augmentClass = Super.augmentClass;\n\n PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticEvent.js\n ** module id = 76\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\nvar InputEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticInputEvent.js\n ** module id = 77\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyOf\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\n\"use strict\";\n\nvar keyOf = function (oneKeyObj) {\n var key;\n for (key in oneKeyObj) {\n if (!oneKeyObj.hasOwnProperty(key)) {\n continue;\n }\n return key;\n }\n return null;\n};\n\nmodule.exports = keyOf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyOf.js\n ** module id = 78\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactUpdates = require('./ReactUpdates');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\nvar isEventSupported = require('./isEventSupported');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n change: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onChange: null }),\n captured: keyOf({ onChangeCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementID = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n // See `handleChange` comment below\n doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent));\n EventPropagators.accumulateTwoPhaseDispatches(event);\n\n // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n EventPluginHub.enqueueEvents(event);\n EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetID) {\n activeElement = target;\n activeElementID = targetID;\n activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n if (!activeElement) {\n return;\n }\n activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n activeElement = null;\n activeElementID = null;\n}\n\nfunction getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topChange) {\n return topLevelTargetID;\n }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topFocus) {\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForChangeEventIE8();\n startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);\n } else if (topLevelType === topLevelTypes.topBlur) {\n stopWatchingForChangeEventIE8();\n }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events\n isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);\n}\n\n/**\n * (For old IE.) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n get: function () {\n return activeElementValueProp.get.call(this);\n },\n set: function (val) {\n // Cast to a string so we can do equality checks.\n activeElementValue = '' + val;\n activeElementValueProp.set.call(this, val);\n }\n};\n\n/**\n * (For old IE.) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetID) {\n activeElement = target;\n activeElementID = targetID;\n activeElementValue = target.value;\n activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n // on DOM elements\n Object.defineProperty(activeElement, 'value', newValueProp);\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n\n/**\n * (For old IE.) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n // delete restores the original property definition\n delete activeElement.value;\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n\n activeElement = null;\n activeElementID = null;\n activeElementValue = null;\n activeElementValueProp = null;\n}\n\n/**\n * (For old IE.) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n var value = nativeEvent.srcElement.value;\n if (value === activeElementValue) {\n return;\n }\n activeElementValue = value;\n\n manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topInput) {\n // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n // what we want so fall through here and trigger an abstract event\n return topLevelTargetID;\n }\n}\n\n// For IE8 and IE9.\nfunction handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topFocus) {\n // In IE8, we can capture almost all .value changes by adding a\n // propertychange handler and looking for events with propertyName\n // equal to 'value'\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(topLevelTarget, topLevelTargetID);\n } else if (topLevelType === topLevelTypes.topBlur) {\n stopWatchingForValueChange();\n }\n}\n\n// For IE8 and IE9.\nfunction getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n if (activeElement && activeElement.value !== activeElementValue) {\n activeElementValue = activeElement.value;\n return activeElementID;\n }\n }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n if (topLevelType === topLevelTypes.topClick) {\n return topLevelTargetID;\n }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n\n var getTargetIDFunc, handleEventFunc;\n if (shouldUseChangeEvent(topLevelTarget)) {\n if (doesChangeEventBubble) {\n getTargetIDFunc = getTargetIDForChangeEvent;\n } else {\n handleEventFunc = handleEventsForChangeEventIE8;\n }\n } else if (isTextInputElement(topLevelTarget)) {\n if (isInputEventSupported) {\n getTargetIDFunc = getTargetIDForInputEvent;\n } else {\n getTargetIDFunc = getTargetIDForInputEventIE;\n handleEventFunc = handleEventsForInputEventIE;\n }\n } else if (shouldUseClickEvent(topLevelTarget)) {\n getTargetIDFunc = getTargetIDForClickEvent;\n }\n\n if (getTargetIDFunc) {\n var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);\n if (targetID) {\n var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget);\n event.type = 'change';\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);\n }\n }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ChangeEventPlugin.js\n ** module id = 79\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\nfunction getEventTarget(nativeEvent) {\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventTarget.js\n ** module id = 80\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n 'color': true,\n 'date': true,\n 'datetime': true,\n 'datetime-local': true,\n 'email': true,\n 'month': true,\n 'number': true,\n 'password': true,\n 'range': true,\n 'search': true,\n 'tel': true,\n 'text': true,\n 'time': true,\n 'url': true,\n 'week': true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');\n}\n\nmodule.exports = isTextInputElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isTextInputElement.js\n ** module id = 81\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ClientReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar nextReactRootIndex = 0;\n\nvar ClientReactRootIndex = {\n createReactRootIndex: function () {\n return nextReactRootIndex++;\n }\n};\n\nmodule.exports = ClientReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ClientReactRootIndex.js\n ** module id = 82\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = require('fbjs/lib/keyOf');\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DefaultEventPluginOrder.js\n ** module id = 83\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\nvar ReactMount = require('./ReactMount');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\nvar getFirstReactDOM = ReactMount.getFirstReactDOM;\n\nvar eventTypes = {\n mouseEnter: {\n registrationName: keyOf({ onMouseEnter: null }),\n dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n },\n mouseLeave: {\n registrationName: keyOf({ onMouseLeave: null }),\n dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n }\n};\n\nvar extractedEvents = [null, null];\n\nvar EnterLeaveEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n return null;\n }\n if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n // Must not be a mouse in or mouse out - ignoring.\n return null;\n }\n\n var win;\n if (topLevelTarget.window === topLevelTarget) {\n // `topLevelTarget` is probably a window object.\n win = topLevelTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = topLevelTarget.ownerDocument;\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n var fromID = '';\n var toID = '';\n if (topLevelType === topLevelTypes.topMouseOut) {\n from = topLevelTarget;\n fromID = topLevelTargetID;\n to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement);\n if (to) {\n toID = ReactMount.getID(to);\n } else {\n to = win;\n }\n to = to || win;\n } else {\n from = win;\n to = topLevelTarget;\n toID = topLevelTargetID;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget);\n leave.type = 'mouseleave';\n leave.target = from;\n leave.relatedTarget = to;\n\n var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget);\n enter.type = 'mouseenter';\n enter.target = to;\n enter.relatedTarget = from;\n\n EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);\n\n extractedEvents[0] = leave;\n extractedEvents[1] = enter;\n\n return extractedEvents;\n }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EnterLeaveEventPlugin.js\n ** module id = 84\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: function (event) {\n // Webkit, Firefox, IE9+\n // which: 1 2 3\n // button: 0 1 2 (standard)\n var button = event.button;\n if ('which' in event) {\n return button;\n }\n // IE<9\n // which: undefined\n // button: 0 0 0\n // button: 1 4 2 (onmouseup)\n return button === 2 ? 2 : button === 4 ? 1 : 0;\n },\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n // \"Proprietary\" Interface.\n pageX: function (event) {\n return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n },\n pageY: function (event) {\n return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticMouseEvent.js\n ** module id = 85\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n view: function (event) {\n if (event.view) {\n return event.view;\n }\n\n var target = getEventTarget(event);\n if (target != null && target.window === target) {\n // target is a window object\n return target;\n }\n\n var doc = target.ownerDocument;\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n if (doc) {\n return doc.defaultView || doc.parentWindow;\n } else {\n return window;\n }\n },\n detail: function (event) {\n return event.detail || 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticUIEvent.js\n ** module id = 86\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n 'Alt': 'altKey',\n 'Control': 'ctrlKey',\n 'Meta': 'metaKey',\n 'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventModifierState.js\n ** module id = 87\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar hasSVG;\nif (ExecutionEnvironment.canUseDOM) {\n var implementation = document.implementation;\n hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');\n}\n\nvar HTMLDOMPropertyConfig = {\n isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\\d_.\\-]*$/),\n Properties: {\n /**\n * Standard Properties\n */\n accept: null,\n acceptCharset: null,\n accessKey: null,\n action: null,\n allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n allowTransparency: MUST_USE_ATTRIBUTE,\n alt: null,\n async: HAS_BOOLEAN_VALUE,\n autoComplete: null,\n // autoFocus is polyfilled/normalized by AutoFocusUtils\n // autoFocus: HAS_BOOLEAN_VALUE,\n autoPlay: HAS_BOOLEAN_VALUE,\n capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n cellPadding: null,\n cellSpacing: null,\n charSet: MUST_USE_ATTRIBUTE,\n challenge: MUST_USE_ATTRIBUTE,\n checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n classID: MUST_USE_ATTRIBUTE,\n // To set className on SVG elements, it's necessary to use .setAttribute;\n // this works on HTML elements too in all browsers except IE8. Conveniently,\n // IE8 doesn't support SVG and so we can simply use the attribute in\n // browsers that support SVG and the property in browsers that don't,\n // regardless of whether the element is HTML or SVG.\n className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,\n cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n colSpan: null,\n content: null,\n contentEditable: null,\n contextMenu: MUST_USE_ATTRIBUTE,\n controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n coords: null,\n crossOrigin: null,\n data: null, // For `<object />` acts as `src`.\n dateTime: MUST_USE_ATTRIBUTE,\n 'default': HAS_BOOLEAN_VALUE,\n defer: HAS_BOOLEAN_VALUE,\n dir: null,\n disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n download: HAS_OVERLOADED_BOOLEAN_VALUE,\n draggable: null,\n encType: null,\n form: MUST_USE_ATTRIBUTE,\n formAction: MUST_USE_ATTRIBUTE,\n formEncType: MUST_USE_ATTRIBUTE,\n formMethod: MUST_USE_ATTRIBUTE,\n formNoValidate: HAS_BOOLEAN_VALUE,\n formTarget: MUST_USE_ATTRIBUTE,\n frameBorder: MUST_USE_ATTRIBUTE,\n headers: null,\n height: MUST_USE_ATTRIBUTE,\n hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n high: null,\n href: null,\n hrefLang: null,\n htmlFor: null,\n httpEquiv: null,\n icon: null,\n id: MUST_USE_PROPERTY,\n inputMode: MUST_USE_ATTRIBUTE,\n integrity: null,\n is: MUST_USE_ATTRIBUTE,\n keyParams: MUST_USE_ATTRIBUTE,\n keyType: MUST_USE_ATTRIBUTE,\n kind: null,\n label: null,\n lang: null,\n list: MUST_USE_ATTRIBUTE,\n loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n low: null,\n manifest: MUST_USE_ATTRIBUTE,\n marginHeight: null,\n marginWidth: null,\n max: null,\n maxLength: MUST_USE_ATTRIBUTE,\n media: MUST_USE_ATTRIBUTE,\n mediaGroup: null,\n method: null,\n min: null,\n minLength: MUST_USE_ATTRIBUTE,\n multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n name: null,\n nonce: MUST_USE_ATTRIBUTE,\n noValidate: HAS_BOOLEAN_VALUE,\n open: HAS_BOOLEAN_VALUE,\n optimum: null,\n pattern: null,\n placeholder: null,\n poster: null,\n preload: null,\n radioGroup: null,\n readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n rel: null,\n required: HAS_BOOLEAN_VALUE,\n reversed: HAS_BOOLEAN_VALUE,\n role: MUST_USE_ATTRIBUTE,\n rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n rowSpan: null,\n sandbox: null,\n scope: null,\n scoped: HAS_BOOLEAN_VALUE,\n scrolling: null,\n seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n shape: null,\n size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n sizes: MUST_USE_ATTRIBUTE,\n span: HAS_POSITIVE_NUMERIC_VALUE,\n spellCheck: null,\n src: null,\n srcDoc: MUST_USE_PROPERTY,\n srcLang: null,\n srcSet: MUST_USE_ATTRIBUTE,\n start: HAS_NUMERIC_VALUE,\n step: null,\n style: null,\n summary: null,\n tabIndex: null,\n target: null,\n title: null,\n type: null,\n useMap: null,\n value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\n width: MUST_USE_ATTRIBUTE,\n wmode: MUST_USE_ATTRIBUTE,\n wrap: null,\n\n /**\n * RDFa Properties\n */\n about: MUST_USE_ATTRIBUTE,\n datatype: MUST_USE_ATTRIBUTE,\n inlist: MUST_USE_ATTRIBUTE,\n prefix: MUST_USE_ATTRIBUTE,\n // property is also supported for OpenGraph in meta tags.\n property: MUST_USE_ATTRIBUTE,\n resource: MUST_USE_ATTRIBUTE,\n 'typeof': MUST_USE_ATTRIBUTE,\n vocab: MUST_USE_ATTRIBUTE,\n\n /**\n * Non-standard Properties\n */\n // autoCapitalize and autoCorrect are supported in Mobile Safari for\n // keyboard hints.\n autoCapitalize: null,\n autoCorrect: null,\n // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n autoSave: null,\n // color is for Safari mask-icon link\n color: null,\n // itemProp, itemScope, itemType are for\n // Microdata support. See http://schema.org/docs/gs.html\n itemProp: MUST_USE_ATTRIBUTE,\n itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n itemType: MUST_USE_ATTRIBUTE,\n // itemID and itemRef are for Microdata support as well but\n // only specified in the the WHATWG spec document. See\n // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n itemID: MUST_USE_ATTRIBUTE,\n itemRef: MUST_USE_ATTRIBUTE,\n // results show looking glass icon and recent searches on input\n // search fields in WebKit/Blink\n results: null,\n // IE-only attribute that specifies security restrictions on an iframe\n // as an alternative to the sandbox attribute on IE<10\n security: MUST_USE_ATTRIBUTE,\n // IE-only attribute that controls focus behavior\n unselectable: MUST_USE_ATTRIBUTE\n },\n DOMAttributeNames: {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv'\n },\n DOMPropertyNames: {\n autoCapitalize: 'autocapitalize',\n autoComplete: 'autocomplete',\n autoCorrect: 'autocorrect',\n autoFocus: 'autofocus',\n autoPlay: 'autoplay',\n autoSave: 'autosave',\n // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.\n // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding\n encType: 'encoding',\n hrefLang: 'hreflang',\n radioGroup: 'radiogroup',\n spellCheck: 'spellcheck',\n srcDoc: 'srcdoc',\n srcSet: 'srcset'\n }\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\n ** module id = 88\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserComponentMixin\n */\n\n'use strict';\n\nvar ReactInstanceMap = require('./ReactInstanceMap');\n\nvar findDOMNode = require('./findDOMNode');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnKey = '_getDOMNodeDidWarn';\n\nvar ReactBrowserComponentMixin = {\n /**\n * Returns the DOM node rendered by this component.\n *\n * @return {DOMElement} The root node of this component.\n * @final\n * @protected\n */\n getDOMNode: function () {\n process.env.NODE_ENV !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;\n this.constructor[didWarnKey] = true;\n return findDOMNode(this);\n }\n};\n\nmodule.exports = ReactBrowserComponentMixin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactBrowserComponentMixin.js\n ** module id = 89\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule findDOMNode\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactInstanceMap = require('./ReactInstanceMap');\nvar ReactMount = require('./ReactMount');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n if (process.env.NODE_ENV !== 'production') {\n var owner = ReactCurrentOwner.current;\n if (owner !== null) {\n process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n owner._warnedAboutRefsInRender = true;\n }\n }\n if (componentOrElement == null) {\n return null;\n }\n if (componentOrElement.nodeType === 1) {\n return componentOrElement;\n }\n if (ReactInstanceMap.has(componentOrElement)) {\n return ReactMount.getNodeFromInstance(componentOrElement);\n }\n !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;\n}\n\nmodule.exports = findDOMNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/findDOMNode.js\n ** module id = 90\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultBatchingStrategy\n */\n\n'use strict';\n\nvar ReactUpdates = require('./ReactUpdates');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\nvar RESET_BATCHED_UPDATES = {\n initialize: emptyFunction,\n close: function () {\n ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n initialize: emptyFunction,\n close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n this.reinitializeTransaction();\n}\n\nassign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n isBatchingUpdates: false,\n\n /**\n * Call the provided function in a context within which calls to `setState`\n * and friends are batched such that components aren't updated unnecessarily.\n */\n batchedUpdates: function (callback, a, b, c, d, e) {\n var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n // The code is written this way to avoid extra allocations\n if (alreadyBatchingUpdates) {\n callback(a, b, c, d, e);\n } else {\n transaction.perform(callback, null, a, b, c, d, e);\n }\n }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultBatchingStrategy.js\n ** module id = 91\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponent\n * @typechecks static-only\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar AutoFocusUtils = require('./AutoFocusUtils');\nvar CSSPropertyOperations = require('./CSSPropertyOperations');\nvar DOMProperty = require('./DOMProperty');\nvar DOMPropertyOperations = require('./DOMPropertyOperations');\nvar EventConstants = require('./EventConstants');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMButton = require('./ReactDOMButton');\nvar ReactDOMInput = require('./ReactDOMInput');\nvar ReactDOMOption = require('./ReactDOMOption');\nvar ReactDOMSelect = require('./ReactDOMSelect');\nvar ReactDOMTextarea = require('./ReactDOMTextarea');\nvar ReactMount = require('./ReactMount');\nvar ReactMultiChild = require('./ReactMultiChild');\nvar ReactPerf = require('./ReactPerf');\nvar ReactUpdateQueue = require('./ReactUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar canDefineProperty = require('./canDefineProperty');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar invariant = require('fbjs/lib/invariant');\nvar isEventSupported = require('./isEventSupported');\nvar keyOf = require('fbjs/lib/keyOf');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\nvar validateDOMNesting = require('./validateDOMNesting');\nvar warning = require('fbjs/lib/warning');\n\nvar deleteListener = ReactBrowserEventEmitter.deleteListener;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar CHILDREN = keyOf({ children: null });\nvar STYLE = keyOf({ style: null });\nvar HTML = keyOf({ __html: null });\n\nvar ELEMENT_NODE_TYPE = 1;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n if (internalInstance) {\n var owner = internalInstance._currentElement._owner || null;\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' This DOM node was rendered by `' + name + '`.';\n }\n }\n }\n return '';\n}\n\nvar legacyPropsDescriptor;\nif (process.env.NODE_ENV !== 'production') {\n legacyPropsDescriptor = {\n props: {\n enumerable: false,\n get: function () {\n var component = this._reactInternalComponent;\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined;\n return component._currentElement.props;\n }\n }\n };\n}\n\nfunction legacyGetDOMNode() {\n if (process.env.NODE_ENV !== 'production') {\n var component = this._reactInternalComponent;\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n return this;\n}\n\nfunction legacyIsMounted() {\n var component = this._reactInternalComponent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n return !!component;\n}\n\nfunction legacySetStateEtc() {\n if (process.env.NODE_ENV !== 'production') {\n var component = this._reactInternalComponent;\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n}\n\nfunction legacySetProps(partialProps, callback) {\n var component = this._reactInternalComponent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n if (!component) {\n return;\n }\n ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n }\n}\n\nfunction legacyReplaceProps(partialProps, callback) {\n var component = this._reactInternalComponent;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n }\n if (!component) {\n return;\n }\n ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);\n if (callback) {\n ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n }\n}\n\nfunction friendlyStringify(obj) {\n if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return '[' + obj.map(friendlyStringify).join(', ') + ']';\n } else {\n var pairs = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n }\n }\n return '{' + pairs.join(', ') + '}';\n }\n } else if (typeof obj === 'string') {\n return JSON.stringify(obj);\n } else if (typeof obj === 'function') {\n return '[function object]';\n }\n // Differs from JSON.stringify in that undefined becauses undefined and that\n // inf and nan don't become null\n return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n if (style1 == null || style2 == null) {\n return;\n }\n if (shallowEqual(style1, style2)) {\n return;\n }\n\n var componentName = component._tag;\n var owner = component._currentElement._owner;\n var ownerName;\n if (owner) {\n ownerName = owner.getName();\n }\n\n var hash = ownerName + '|' + componentName;\n\n if (styleMutationWarning.hasOwnProperty(hash)) {\n return;\n }\n\n styleMutationWarning[hash] = true;\n\n process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n if (!props) {\n return;\n }\n // Note the use of `==` which checks for null or undefined.\n if (process.env.NODE_ENV !== 'production') {\n if (voidElementTags[component._tag]) {\n process.env.NODE_ENV !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined;\n }\n }\n if (props.dangerouslySetInnerHTML != null) {\n !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined;\n !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined;\n }\n !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \\'em\\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined;\n}\n\nfunction enqueuePutListener(id, registrationName, listener, transaction) {\n if (process.env.NODE_ENV !== 'production') {\n // IE8 has no API for event capturing and the `onScroll` event doesn't\n // bubble.\n process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : undefined;\n }\n var container = ReactMount.findReactContainerForID(id);\n if (container) {\n var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;\n listenTo(registrationName, doc);\n }\n transaction.getReactMountReady().enqueue(putListener, {\n id: id,\n registrationName: registrationName,\n listener: listener\n });\n}\n\nfunction putListener() {\n var listenerToPut = this;\n ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener);\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n topAbort: 'abort',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topLoadedData: 'loadeddata',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTimeUpdate: 'timeupdate',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n var inst = this;\n // If a component renders to null or if another component fatals and causes\n // the state of the tree to be corrupted, `node` here can be null.\n !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined;\n var node = ReactMount.getNode(inst._rootNodeID);\n !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined;\n\n switch (inst._tag) {\n case 'iframe':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n break;\n case 'video':\n case 'audio':\n\n inst._wrapperState.listeners = [];\n // create listener for each media event\n for (var event in mediaEvents) {\n if (mediaEvents.hasOwnProperty(event)) {\n inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));\n }\n }\n\n break;\n case 'img':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n break;\n case 'form':\n inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];\n break;\n }\n}\n\nfunction mountReadyInputWrapper() {\n ReactDOMInput.mountReadyWrapper(this);\n}\n\nfunction postUpdateSelectWrapper() {\n ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special cased tags.\n\nvar omittedCloseTags = {\n 'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'embed': true,\n 'hr': true,\n 'img': true,\n 'input': true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': true,\n 'source': true,\n 'track': true,\n 'wbr': true\n};\n\n// NOTE: menuitem's close tag should be omitted, but that causes problems.\nvar newlineEatingTags = {\n 'listing': true,\n 'pre': true,\n 'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = assign({\n 'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = ({}).hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n if (!hasOwnProperty.call(validatedTagCache, tag)) {\n !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined;\n validatedTagCache[tag] = true;\n }\n}\n\nfunction processChildContextDev(context, inst) {\n // Pass down our tag name to child components for validation purposes\n context = assign({}, context);\n var info = context[validateDOMNesting.ancestorInfoContextKey];\n context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst);\n return context;\n}\n\nfunction isCustomComponent(tagName, props) {\n return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n * - Event listeners: `onClick`, `onMouseDown`, etc.\n * - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(tag) {\n validateDangerousTag(tag);\n this._tag = tag.toLowerCase();\n this._renderedChildren = null;\n this._previousStyle = null;\n this._previousStyleCopy = null;\n this._rootNodeID = null;\n this._wrapperState = null;\n this._topLevelWrapper = null;\n this._nodeWithLegacyProperties = null;\n if (process.env.NODE_ENV !== 'production') {\n this._unprocessedContextDev = null;\n this._processedContextDev = null;\n }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n construct: function (element) {\n this._currentElement = element;\n },\n\n /**\n * Generates root tag markup then recurses. This method has side effects and\n * is not idempotent.\n *\n * @internal\n * @param {string} rootID The root DOM ID for this node.\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} context\n * @return {string} The computed markup.\n */\n mountComponent: function (rootID, transaction, context) {\n this._rootNodeID = rootID;\n\n var props = this._currentElement.props;\n\n switch (this._tag) {\n case 'iframe':\n case 'img':\n case 'form':\n case 'video':\n case 'audio':\n this._wrapperState = {\n listeners: null\n };\n transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n break;\n case 'button':\n props = ReactDOMButton.getNativeProps(this, props, context);\n break;\n case 'input':\n ReactDOMInput.mountWrapper(this, props, context);\n props = ReactDOMInput.getNativeProps(this, props, context);\n break;\n case 'option':\n ReactDOMOption.mountWrapper(this, props, context);\n props = ReactDOMOption.getNativeProps(this, props, context);\n break;\n case 'select':\n ReactDOMSelect.mountWrapper(this, props, context);\n props = ReactDOMSelect.getNativeProps(this, props, context);\n context = ReactDOMSelect.processChildContext(this, props, context);\n break;\n case 'textarea':\n ReactDOMTextarea.mountWrapper(this, props, context);\n props = ReactDOMTextarea.getNativeProps(this, props, context);\n break;\n }\n\n assertValidProps(this, props);\n if (process.env.NODE_ENV !== 'production') {\n if (context[validateDOMNesting.ancestorInfoContextKey]) {\n validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n this._unprocessedContextDev = context;\n this._processedContextDev = processChildContextDev(context, this);\n context = this._processedContextDev;\n }\n\n var mountImage;\n if (transaction.useCreateElement) {\n var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n var el = ownerDocument.createElement(this._currentElement.type);\n DOMPropertyOperations.setAttributeForID(el, this._rootNodeID);\n // Populate node cache\n ReactMount.getID(el);\n this._updateDOMProperties({}, props, transaction, el);\n this._createInitialChildren(transaction, props, context, el);\n mountImage = el;\n } else {\n var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n var tagContent = this._createContentMarkup(transaction, props, context);\n if (!tagContent && omittedCloseTags[this._tag]) {\n mountImage = tagOpen + '/>';\n } else {\n mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n }\n }\n\n switch (this._tag) {\n case 'input':\n transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this);\n // falls through\n case 'button':\n case 'select':\n case 'textarea':\n if (props.autoFocus) {\n transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n }\n break;\n }\n\n return mountImage;\n },\n\n /**\n * Creates markup for the open tag and all attributes.\n *\n * This method has side effects because events get registered.\n *\n * Iterating over object properties is faster than iterating over arrays.\n * @see http://jsperf.com/obj-vs-arr-iteration\n *\n * @private\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} props\n * @return {string} Markup of opening tag.\n */\n _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n var ret = '<' + this._currentElement.type;\n\n for (var propKey in props) {\n if (!props.hasOwnProperty(propKey)) {\n continue;\n }\n var propValue = props[propKey];\n if (propValue == null) {\n continue;\n }\n if (registrationNameModules.hasOwnProperty(propKey)) {\n if (propValue) {\n enqueuePutListener(this._rootNodeID, propKey, propValue, transaction);\n }\n } else {\n if (propKey === STYLE) {\n if (propValue) {\n if (process.env.NODE_ENV !== 'production') {\n // See `_updateDOMProperties`. style block\n this._previousStyle = propValue;\n }\n propValue = this._previousStyleCopy = assign({}, props.style);\n }\n propValue = CSSPropertyOperations.createMarkupForStyles(propValue);\n }\n var markup = null;\n if (this._tag != null && isCustomComponent(this._tag, props)) {\n if (propKey !== CHILDREN) {\n markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n }\n } else {\n markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n }\n if (markup) {\n ret += ' ' + markup;\n }\n }\n }\n\n // For static pages, no need to put React ID and checksum. Saves lots of\n // bytes.\n if (transaction.renderToStaticMarkup) {\n return ret;\n }\n\n var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);\n return ret + ' ' + markupForID;\n },\n\n /**\n * Creates markup for the content between the tags.\n *\n * @private\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} props\n * @param {object} context\n * @return {string} Content markup.\n */\n _createContentMarkup: function (transaction, props, context) {\n var ret = '';\n\n // Intentional use of != to avoid catching zero/false.\n var innerHTML = props.dangerouslySetInnerHTML;\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n ret = innerHTML.__html;\n }\n } else {\n var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n var childrenToUse = contentToUse != null ? null : props.children;\n if (contentToUse != null) {\n // TODO: Validate that text is allowed as a child of this node\n ret = escapeTextContentForBrowser(contentToUse);\n } else if (childrenToUse != null) {\n var mountImages = this.mountChildren(childrenToUse, transaction, context);\n ret = mountImages.join('');\n }\n }\n if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n // text/html ignores the first character in these tags if it's a newline\n // Prefer to break application/xml over text/html (for now) by adding\n // a newline specifically to get eaten by the parser. (Alternately for\n // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n // \\r is normalized out by HTMLTextAreaElement#value.)\n // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n // from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n return '\\n' + ret;\n } else {\n return ret;\n }\n },\n\n _createInitialChildren: function (transaction, props, context, el) {\n // Intentional use of != to avoid catching zero/false.\n var innerHTML = props.dangerouslySetInnerHTML;\n if (innerHTML != null) {\n if (innerHTML.__html != null) {\n setInnerHTML(el, innerHTML.__html);\n }\n } else {\n var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n var childrenToUse = contentToUse != null ? null : props.children;\n if (contentToUse != null) {\n // TODO: Validate that text is allowed as a child of this node\n setTextContent(el, contentToUse);\n } else if (childrenToUse != null) {\n var mountImages = this.mountChildren(childrenToUse, transaction, context);\n for (var i = 0; i < mountImages.length; i++) {\n el.appendChild(mountImages[i]);\n }\n }\n }\n },\n\n /**\n * Receives a next element and updates the component.\n *\n * @internal\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {object} context\n */\n receiveComponent: function (nextElement, transaction, context) {\n var prevElement = this._currentElement;\n this._currentElement = nextElement;\n this.updateComponent(transaction, prevElement, nextElement, context);\n },\n\n /**\n * Updates a native DOM component after it has already been allocated and\n * attached to the DOM. Reconciles the root DOM node, then recurses.\n *\n * @param {ReactReconcileTransaction} transaction\n * @param {ReactElement} prevElement\n * @param {ReactElement} nextElement\n * @internal\n * @overridable\n */\n updateComponent: function (transaction, prevElement, nextElement, context) {\n var lastProps = prevElement.props;\n var nextProps = this._currentElement.props;\n\n switch (this._tag) {\n case 'button':\n lastProps = ReactDOMButton.getNativeProps(this, lastProps);\n nextProps = ReactDOMButton.getNativeProps(this, nextProps);\n break;\n case 'input':\n ReactDOMInput.updateWrapper(this);\n lastProps = ReactDOMInput.getNativeProps(this, lastProps);\n nextProps = ReactDOMInput.getNativeProps(this, nextProps);\n break;\n case 'option':\n lastProps = ReactDOMOption.getNativeProps(this, lastProps);\n nextProps = ReactDOMOption.getNativeProps(this, nextProps);\n break;\n case 'select':\n lastProps = ReactDOMSelect.getNativeProps(this, lastProps);\n nextProps = ReactDOMSelect.getNativeProps(this, nextProps);\n break;\n case 'textarea':\n ReactDOMTextarea.updateWrapper(this);\n lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);\n nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);\n break;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // If the context is reference-equal to the old one, pass down the same\n // processed object so the update bailout in ReactReconciler behaves\n // correctly (and identically in dev and prod). See #5005.\n if (this._unprocessedContextDev !== context) {\n this._unprocessedContextDev = context;\n this._processedContextDev = processChildContextDev(context, this);\n }\n context = this._processedContextDev;\n }\n\n assertValidProps(this, nextProps);\n this._updateDOMProperties(lastProps, nextProps, transaction, null);\n this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n if (!canDefineProperty && this._nodeWithLegacyProperties) {\n this._nodeWithLegacyProperties.props = nextProps;\n }\n\n if (this._tag === 'select') {\n // <select> value update needs to occur after <option> children\n // reconciliation\n transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n }\n },\n\n /**\n * Reconciles the properties by detecting differences in property values and\n * updating the DOM as necessary. This function is probably the single most\n * critical path for performance optimization.\n *\n * TODO: Benchmark whether checking for changed values in memory actually\n * improves performance (especially statically positioned elements).\n * TODO: Benchmark the effects of putting this at the top since 99% of props\n * do not change for a given reconciliation.\n * TODO: Benchmark areas that can be improved with caching.\n *\n * @private\n * @param {object} lastProps\n * @param {object} nextProps\n * @param {ReactReconcileTransaction} transaction\n * @param {?DOMElement} node\n */\n _updateDOMProperties: function (lastProps, nextProps, transaction, node) {\n var propKey;\n var styleName;\n var styleUpdates;\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {\n continue;\n }\n if (propKey === STYLE) {\n var lastStyle = this._previousStyleCopy;\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = '';\n }\n }\n this._previousStyleCopy = null;\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (lastProps[propKey]) {\n // Only call deleteListener if there was a listener previously or\n // else willDeleteListener gets called when there wasn't actually a\n // listener (e.g., onClick={null})\n deleteListener(this._rootNodeID, propKey);\n }\n } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n DOMPropertyOperations.deleteValueForProperty(node, propKey);\n }\n }\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {\n continue;\n }\n if (propKey === STYLE) {\n if (nextProp) {\n if (process.env.NODE_ENV !== 'production') {\n checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n this._previousStyle = nextProp;\n }\n nextProp = this._previousStyleCopy = assign({}, nextProp);\n } else {\n this._previousStyleCopy = null;\n }\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = '';\n }\n }\n // Update styles that changed since `lastProp`.\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n styleUpdates = styleUpdates || {};\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n styleUpdates = nextProp;\n }\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp) {\n enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction);\n } else if (lastProp) {\n deleteListener(this._rootNodeID, propKey);\n }\n } else if (isCustomComponent(this._tag, nextProps)) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n if (propKey === CHILDREN) {\n nextProp = null;\n }\n DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp);\n } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n // If we're updating to null or undefined, we should remove the property\n // from the DOM node instead of inadvertantly setting to a string. This\n // brings us in line with the same behavior we have on initial render.\n if (nextProp != null) {\n DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n } else {\n DOMPropertyOperations.deleteValueForProperty(node, propKey);\n }\n }\n }\n if (styleUpdates) {\n if (!node) {\n node = ReactMount.getNode(this._rootNodeID);\n }\n CSSPropertyOperations.setValueForStyles(node, styleUpdates);\n }\n },\n\n /**\n * Reconciles the children with the various properties that affect the\n * children content.\n *\n * @param {object} lastProps\n * @param {object} nextProps\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n */\n _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n // Note the use of `!=` which checks for null or undefined.\n var lastChildren = lastContent != null ? null : lastProps.children;\n var nextChildren = nextContent != null ? null : nextProps.children;\n\n // If we're switching from children to content/html or vice versa, remove\n // the old content\n var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n if (lastChildren != null && nextChildren == null) {\n this.updateChildren(null, transaction, context);\n } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n this.updateTextContent('');\n }\n\n if (nextContent != null) {\n if (lastContent !== nextContent) {\n this.updateTextContent('' + nextContent);\n }\n } else if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n this.updateMarkup('' + nextHtml);\n }\n } else if (nextChildren != null) {\n this.updateChildren(nextChildren, transaction, context);\n }\n },\n\n /**\n * Destroys all event registrations for this instance. Does not remove from\n * the DOM. That must be done by the parent.\n *\n * @internal\n */\n unmountComponent: function () {\n switch (this._tag) {\n case 'iframe':\n case 'img':\n case 'form':\n case 'video':\n case 'audio':\n var listeners = this._wrapperState.listeners;\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].remove();\n }\n }\n break;\n case 'input':\n ReactDOMInput.unmountWrapper(this);\n break;\n case 'html':\n case 'head':\n case 'body':\n /**\n * Components like <html> <head> and <body> can't be removed or added\n * easily in a cross-browser way, however it's valuable to be able to\n * take advantage of React's reconciliation for styling and <title>\n * management. So we just document it and throw in dangerous cases.\n */\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined;\n break;\n }\n\n this.unmountChildren();\n ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);\n ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n this._rootNodeID = null;\n this._wrapperState = null;\n if (this._nodeWithLegacyProperties) {\n var node = this._nodeWithLegacyProperties;\n node._reactInternalComponent = null;\n this._nodeWithLegacyProperties = null;\n }\n },\n\n getPublicInstance: function () {\n if (!this._nodeWithLegacyProperties) {\n var node = ReactMount.getNode(this._rootNodeID);\n\n node._reactInternalComponent = this;\n node.getDOMNode = legacyGetDOMNode;\n node.isMounted = legacyIsMounted;\n node.setState = legacySetStateEtc;\n node.replaceState = legacySetStateEtc;\n node.forceUpdate = legacySetStateEtc;\n node.setProps = legacySetProps;\n node.replaceProps = legacyReplaceProps;\n\n if (process.env.NODE_ENV !== 'production') {\n if (canDefineProperty) {\n Object.defineProperties(node, legacyPropsDescriptor);\n } else {\n // updateComponent will update this property on subsequent renders\n node.props = this._currentElement.props;\n }\n } else {\n // updateComponent will update this property on subsequent renders\n node.props = this._currentElement.props;\n }\n\n this._nodeWithLegacyProperties = node;\n }\n return this._nodeWithLegacyProperties;\n }\n\n};\n\nReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {\n mountComponent: 'mountComponent',\n updateComponent: 'updateComponent'\n});\n\nassign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponent.js\n ** module id = 92\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule AutoFocusUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nvar findDOMNode = require('./findDOMNode');\nvar focusNode = require('fbjs/lib/focusNode');\n\nvar Mixin = {\n componentDidMount: function () {\n if (this.props.autoFocus) {\n focusNode(findDOMNode(this));\n }\n }\n};\n\nvar AutoFocusUtils = {\n Mixin: Mixin,\n\n focusDOMComponent: function () {\n focusNode(ReactMount.getNode(this._rootNodeID));\n }\n};\n\nmodule.exports = AutoFocusUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/AutoFocusUtils.js\n ** module id = 93\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule focusNode\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/focusNode.js\n ** module id = 94\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactPerf = require('./ReactPerf');\n\nvar camelizeStyleName = require('fbjs/lib/camelizeStyleName');\nvar dangerousStyleValue = require('./dangerousStyleValue');\nvar hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');\nvar memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');\nvar warning = require('fbjs/lib/warning');\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n var tempStyle = document.createElement('div').style;\n try {\n // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n tempStyle.font = '';\n } catch (e) {\n hasShorthandPropertyBug = true;\n }\n // IE8 only supports accessing cssFloat (standard) as styleFloat\n if (document.documentElement.style.cssFloat === undefined) {\n styleFloatAccessor = 'styleFloat';\n }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n // style values shouldn't contain a semicolon\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n\n var warnHyphenatedStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined;\n };\n\n var warnBadVendoredStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined;\n };\n\n var warnStyleValueWithSemicolon = function (name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon. ' + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined;\n };\n\n /**\n * @param {string} name\n * @param {*} value\n */\n var warnValidStyle = function (name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n /**\n * Serializes a mapping of style properties for use as inline styles:\n *\n * > createMarkupForStyles({width: '200px', height: 0})\n * \"width:200px;height:0;\"\n *\n * Undefined values are ignored so that declarative programming is easier.\n * The result should be HTML-escaped before insertion into the DOM.\n *\n * @param {object} styles\n * @return {?string}\n */\n createMarkupForStyles: function (styles) {\n var serialized = '';\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var styleValue = styles[styleName];\n if (process.env.NODE_ENV !== 'production') {\n warnValidStyle(styleName, styleValue);\n }\n if (styleValue != null) {\n serialized += processStyleName(styleName) + ':';\n serialized += dangerousStyleValue(styleName, styleValue) + ';';\n }\n }\n return serialized || null;\n },\n\n /**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n setValueForStyles: function (node, styles) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n if (process.env.NODE_ENV !== 'production') {\n warnValidStyle(styleName, styles[styleName]);\n }\n var styleValue = dangerousStyleValue(styleName, styles[styleName]);\n if (styleName === 'float') {\n styleName = styleFloatAccessor;\n }\n if (styleValue) {\n style[styleName] = styleValue;\n } else {\n var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n if (expansion) {\n // Shorthand property that IE8 won't like unsetting, so unset each\n // component to placate it\n for (var individualStyleName in expansion) {\n style[individualStyleName] = '';\n }\n } else {\n style[styleName] = '';\n }\n }\n }\n }\n\n};\n\nReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {\n setValueForStyles: 'setValueForStyles'\n});\n\nmodule.exports = CSSPropertyOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSPropertyOperations.js\n ** module id = 95\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n stopOpacity: true,\n strokeDashoffset: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CSSProperty.js\n ** module id = 96\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelizeStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = require('./camelize');\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n * > camelizeStyleName('background-color')\n * < \"backgroundColor\"\n * > camelizeStyleName('-moz-transition')\n * < \"MozTransition\"\n * > camelizeStyleName('-ms-transition')\n * < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/camelizeStyleName.js\n ** module id = 97\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelize\n * @typechecks\n */\n\n\"use strict\";\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n * > camelize('background-color')\n * < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n return string.replace(_hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nmodule.exports = camelize;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/camelize.js\n ** module id = 98\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = require('./CSSProperty');\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n\n var isNonNumeric = isNaN(value);\n if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n return '' + value; // cast to string\n }\n\n if (typeof value === 'string') {\n value = value.trim();\n }\n return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/dangerousStyleValue.js\n ** module id = 99\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenateStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/hyphenateStyleName.js\n ** module id = 100\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenate\n * @typechecks\n */\n\n'use strict';\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n * > hyphenate('backgroundColor')\n * < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/hyphenate.js\n ** module id = 101\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule memoizeStringOnly\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n *\n * @param {function} callback\n * @return {function}\n */\nfunction memoizeStringOnly(callback) {\n var cache = {};\n return function (string) {\n if (!cache.hasOwnProperty(string)) {\n cache[string] = callback.call(this, string);\n }\n return cache[string];\n };\n}\n\nmodule.exports = memoizeStringOnly;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/memoizeStringOnly.js\n ** module id = 102\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMButton\n */\n\n'use strict';\n\nvar mouseListenerNames = {\n onClick: true,\n onDoubleClick: true,\n onMouseDown: true,\n onMouseMove: true,\n onMouseUp: true,\n\n onClickCapture: true,\n onDoubleClickCapture: true,\n onMouseDownCapture: true,\n onMouseMoveCapture: true,\n onMouseUpCapture: true\n};\n\n/**\n * Implements a <button> native component that does not receive mouse events\n * when `disabled` is set.\n */\nvar ReactDOMButton = {\n getNativeProps: function (inst, props, context) {\n if (!props.disabled) {\n return props;\n }\n\n // Copy the props, except the mouse listeners\n var nativeProps = {};\n for (var key in props) {\n if (props.hasOwnProperty(key) && !mouseListenerNames[key]) {\n nativeProps[key] = props[key];\n }\n }\n\n return nativeProps;\n }\n};\n\nmodule.exports = ReactDOMButton;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMButton.js\n ** module id = 103\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInput\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\n\nvar instancesByReactID = {};\n\nfunction forceUpdateIfMounted() {\n if (this._rootNodeID) {\n // DOM component is still mounted; update\n ReactDOMInput.updateWrapper(this);\n }\n}\n\n/**\n * Implements an <input> native component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n getNativeProps: function (inst, props, context) {\n var value = LinkedValueUtils.getValue(props);\n var checked = LinkedValueUtils.getChecked(props);\n\n var nativeProps = assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: value != null ? value : inst._wrapperState.initialValue,\n checked: checked != null ? checked : inst._wrapperState.initialChecked,\n onChange: inst._wrapperState.onChange\n });\n\n return nativeProps;\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n }\n\n var defaultValue = props.defaultValue;\n inst._wrapperState = {\n initialChecked: props.defaultChecked || false,\n initialValue: defaultValue != null ? defaultValue : null,\n onChange: _handleChange.bind(inst)\n };\n },\n\n mountReadyWrapper: function (inst) {\n // Can't be in mountWrapper or else server rendering leaks.\n instancesByReactID[inst._rootNodeID] = inst;\n },\n\n unmountWrapper: function (inst) {\n delete instancesByReactID[inst._rootNodeID];\n },\n\n updateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // TODO: Shouldn't this be getChecked(props)?\n var checked = props.checked;\n if (checked != null) {\n ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false);\n }\n\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n // Here we use asap to wait until all updates have propagated, which\n // is important when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n ReactUpdates.asap(forceUpdateIfMounted, this);\n\n var name = props.name;\n if (props.type === 'radio' && name != null) {\n var rootNode = ReactMount.getNode(this._rootNodeID);\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n }\n\n // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form, let's just use the global\n // `querySelectorAll` to ensure we don't miss anything.\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n }\n // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React with non-React.\n var otherID = ReactMount.getID(otherNode);\n !otherID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined;\n var otherInstance = instancesByReactID[otherID];\n !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined;\n // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n }\n }\n\n return returnValue;\n}\n\nmodule.exports = ReactDOMInput;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMInput.js\n ** module id = 104\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar hasReadOnlyValue = {\n 'button': true,\n 'checkbox': true,\n 'image': true,\n 'hidden': true,\n 'radio': true,\n 'reset': true,\n 'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\\'t want to use valueLink and vice versa.') : invariant(false) : undefined;\n}\nfunction _assertValueLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\\'t want to use valueLink.') : invariant(false) : undefined;\n}\n\nfunction _assertCheckedLink(inputProps) {\n _assertSingleLink(inputProps);\n !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\\'t want to ' + 'use checkedLink') : invariant(false) : undefined;\n}\n\nvar propTypes = {\n value: function (props, propName, componentName) {\n if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n checkPropTypes: function (tagName, props, owner) {\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var addendum = getDeclarationErrorAddendum(owner);\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined;\n }\n }\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current value of the input either from value prop or link.\n */\n getValue: function (inputProps) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.value;\n }\n return inputProps.value;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @return {*} current checked status of the input either from checked prop\n * or link.\n */\n getChecked: function (inputProps) {\n if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.value;\n }\n return inputProps.checked;\n },\n\n /**\n * @param {object} inputProps Props for form component\n * @param {SyntheticEvent} event change event to handle\n */\n executeOnChange: function (inputProps, event) {\n if (inputProps.valueLink) {\n _assertValueLink(inputProps);\n return inputProps.valueLink.requestChange(event.target.value);\n } else if (inputProps.checkedLink) {\n _assertCheckedLink(inputProps);\n return inputProps.checkedLink.requestChange(event.target.checked);\n } else if (inputProps.onChange) {\n return inputProps.onChange.call(undefined, event);\n }\n }\n};\n\nmodule.exports = LinkedValueUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/LinkedValueUtils.js\n ** module id = 105\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n};\n\nfunction createChainableTypeChecker(validate) {\n function checkType(isRequired, props, propName, componentName, location, propFullName) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n if (props[propName] == null) {\n var locationName = ReactPropTypeLocationNames[location];\n if (isRequired) {\n return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n var locationName = ReactPropTypeLocationNames[location];\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!ReactElement.isValidElement(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var locationName = ReactPropTypeLocationNames[location];\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n return createChainableTypeChecker(function () {\n return new Error('Invalid argument supplied to oneOf, expected an instance of array.');\n });\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (propValue === expectedValues[i]) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n var valuesString = JSON.stringify(expectedValues);\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n return createChainableTypeChecker(function () {\n return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');\n });\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName) == null) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || ReactElement.isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return '<<anonymous>>';\n }\n return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypes.js\n ** module id = 106\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * @typechecks static-only\n */\n\n'use strict';\n\n/* global Symbol */\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n}\n\nmodule.exports = getIteratorFn;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getIteratorFn.js\n ** module id = 107\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMOption\n */\n\n'use strict';\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactDOMSelect = require('./ReactDOMSelect');\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\nvar valueContextKey = ReactDOMSelect.valueContextKey;\n\n/**\n * Implements an <option> native component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n mountWrapper: function (inst, props, context) {\n // TODO (yungsters): Remove support for `selected` in <option>.\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;\n }\n\n // Look up whether this option is 'selected' via context\n var selectValue = context[valueContextKey];\n\n // If context key is null (e.g., no specified value or after initial mount)\n // or missing (e.g., for <datalist>), we don't change props.selected\n var selected = null;\n if (selectValue != null) {\n selected = false;\n if (Array.isArray(selectValue)) {\n // multiple\n for (var i = 0; i < selectValue.length; i++) {\n if ('' + selectValue[i] === '' + props.value) {\n selected = true;\n break;\n }\n }\n } else {\n selected = '' + selectValue === '' + props.value;\n }\n }\n\n inst._wrapperState = { selected: selected };\n },\n\n getNativeProps: function (inst, props, context) {\n var nativeProps = assign({ selected: undefined, children: undefined }, props);\n\n // Read state only from initial mount because <select> updates value\n // manually; we need the initial state only for server rendering\n if (inst._wrapperState.selected != null) {\n nativeProps.selected = inst._wrapperState.selected;\n }\n\n var content = '';\n\n // Flatten children and warn if they aren't strings or numbers;\n // invalid types are ignored.\n ReactChildren.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n content += child;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;\n }\n });\n\n nativeProps.children = content;\n return nativeProps;\n }\n\n};\n\nmodule.exports = ReactDOMOption;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMOption.js\n ** module id = 108\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar ReactElement = require('./ReactElement');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar traverseAllChildren = require('./traverseAllChildren');\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/(?!\\/)/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '//');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n this.func = forEachFunction;\n this.context = forEachContext;\n this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func;\n var context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n this.result = mapResult;\n this.keyPrefix = keyPrefix;\n this.func = mapFunction;\n this.context = mapContext;\n this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n this.result = null;\n this.keyPrefix = null;\n this.func = null;\n this.context = null;\n this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result;\n var keyPrefix = bookKeeping.keyPrefix;\n var func = bookKeeping.func;\n var context = bookKeeping.context;\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n } else if (mappedChild != null) {\n if (ReactElement.isValidElement(mappedChild)) {\n mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n return result;\n}\n\nvar ReactChildren = {\n forEach: forEachChildren,\n map: mapChildren,\n mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n count: countChildren,\n toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildren.js\n ** module id = 109\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar userProvidedKeyEscaperLookup = {\n '=': '=0',\n '.': '=1',\n ':': '=2'\n};\n\nvar userProvidedKeyEscapeRegex = /[=.:]/g;\n\nvar didWarnAboutMaps = false;\n\nfunction userProvidedKeyEscaper(match) {\n return userProvidedKeyEscaperLookup[match];\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n if (component && component.key != null) {\n // Explicit key\n return wrapUserProvidedKey(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * Escape a component key so that it is safe to use in a reactid.\n *\n * @param {*} text Component key to be escaped.\n * @return {string} An escaped string.\n */\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);\n}\n\n/**\n * Wrap a `key` value explicitly provided by the user to distinguish it from\n * implicitly-generated keys generated by a component's index in its parent.\n *\n * @param {string} key Value of a user-provided `key` attribute\n * @return {string}\n */\nfunction wrapUserProvidedKey(key) {\n return '$' + escapeUserProvidedKey(key);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (iteratorFn) {\n var iterator = iteratorFn.call(children);\n var step;\n if (iteratorFn !== children.entries) {\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined;\n didWarnAboutMaps = true;\n }\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n child = entry[1];\n nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n }\n }\n } else if (type === 'object') {\n var addendum = '';\n if (process.env.NODE_ENV !== 'production') {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n if (children._isReactElement) {\n addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n }\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n addendum += ' Check the render method of `' + name + '`.';\n }\n }\n }\n var childrenString = String(children);\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/traverseAllChildren.js\n ** module id = 110\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\nvar valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n this._wrapperState.pendingUpdate = false;\n\n var props = this._currentElement.props;\n var value = LinkedValueUtils.getValue(props);\n\n if (value != null) {\n updateOptions(this, props, value);\n }\n }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n if (owner) {\n var name = owner.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n var owner = inst._currentElement._owner;\n LinkedValueUtils.checkPropTypes('select', props, owner);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n if (props[propName] == null) {\n continue;\n }\n if (props.multiple) {\n process.env.NODE_ENV !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n } else {\n process.env.NODE_ENV !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n }\n }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n var selectedValue, i;\n var options = ReactMount.getNode(inst._rootNodeID).options;\n\n if (multiple) {\n selectedValue = {};\n for (i = 0; i < propValue.length; i++) {\n selectedValue['' + propValue[i]] = true;\n }\n for (i = 0; i < options.length; i++) {\n var selected = selectedValue.hasOwnProperty(options[i].value);\n if (options[i].selected !== selected) {\n options[i].selected = selected;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n selectedValue = '' + propValue;\n for (i = 0; i < options.length; i++) {\n if (options[i].value === selectedValue) {\n options[i].selected = true;\n return;\n }\n }\n if (options.length) {\n options[0].selected = true;\n }\n }\n}\n\n/**\n * Implements a <select> native component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n valueContextKey: valueContextKey,\n\n getNativeProps: function (inst, props, context) {\n return assign({}, props, {\n onChange: inst._wrapperState.onChange,\n value: undefined\n });\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n checkSelectPropTypes(inst, props);\n }\n\n var value = LinkedValueUtils.getValue(props);\n inst._wrapperState = {\n pendingUpdate: false,\n initialValue: value != null ? value : props.defaultValue,\n onChange: _handleChange.bind(inst),\n wasMultiple: Boolean(props.multiple)\n };\n },\n\n processChildContext: function (inst, props, context) {\n // Pass down initial value so initial generated markup has correct\n // `selected` attributes\n var childContext = assign({}, context);\n childContext[valueContextKey] = inst._wrapperState.initialValue;\n return childContext;\n },\n\n postUpdateWrapper: function (inst) {\n var props = inst._currentElement.props;\n\n // After the initial mount, we control selected-ness manually so don't pass\n // the context value down\n inst._wrapperState.initialValue = undefined;\n\n var wasMultiple = inst._wrapperState.wasMultiple;\n inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n inst._wrapperState.pendingUpdate = false;\n updateOptions(inst, Boolean(props.multiple), value);\n } else if (wasMultiple !== Boolean(props.multiple)) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n }\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n this._wrapperState.pendingUpdate = true;\n ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelect.js\n ** module id = 111\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextarea\n */\n\n'use strict';\n\nvar LinkedValueUtils = require('./LinkedValueUtils');\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction forceUpdateIfMounted() {\n if (this._rootNodeID) {\n // DOM component is still mounted; update\n ReactDOMTextarea.updateWrapper(this);\n }\n}\n\n/**\n * Implements a <textarea> native component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n getNativeProps: function (inst, props, context) {\n !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;\n\n // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated.\n var nativeProps = assign({}, props, {\n defaultValue: undefined,\n value: undefined,\n children: inst._wrapperState.initialValue,\n onChange: inst._wrapperState.onChange\n });\n\n return nativeProps;\n },\n\n mountWrapper: function (inst, props) {\n if (process.env.NODE_ENV !== 'production') {\n LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n }\n\n var defaultValue = props.defaultValue;\n // TODO (yungsters): Remove support for children content in <textarea>.\n var children = props.children;\n if (children != null) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;\n }\n !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;\n if (Array.isArray(children)) {\n !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;\n children = children[0];\n }\n\n defaultValue = '' + children;\n }\n if (defaultValue == null) {\n defaultValue = '';\n }\n var value = LinkedValueUtils.getValue(props);\n\n inst._wrapperState = {\n // We save the initial value so that `ReactDOMComponent` doesn't update\n // `textContent` (unnecessary since we update value).\n // The initial value can be a boolean or object so that's why it's\n // forced to be a string.\n initialValue: '' + (value != null ? value : defaultValue),\n onChange: _handleChange.bind(inst)\n };\n },\n\n updateWrapper: function (inst) {\n var props = inst._currentElement.props;\n var value = LinkedValueUtils.getValue(props);\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n }\n }\n};\n\nfunction _handleChange(event) {\n var props = this._currentElement.props;\n var returnValue = LinkedValueUtils.executeOnChange(props, event);\n ReactUpdates.asap(forceUpdateIfMounted, this);\n return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMTextarea.js\n ** module id = 112\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChild\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactChildReconciler = require('./ReactChildReconciler');\n\nvar flattenChildren = require('./flattenChildren');\n\n/**\n * Updating children of a component may trigger recursive updates. The depth is\n * used to batch recursive updates to render markup more efficiently.\n *\n * @type {number}\n * @private\n */\nvar updateDepth = 0;\n\n/**\n * Queue of update configuration objects.\n *\n * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.\n *\n * @type {array<object>}\n * @private\n */\nvar updateQueue = [];\n\n/**\n * Queue of markup to be rendered.\n *\n * @type {array<string>}\n * @private\n */\nvar markupQueue = [];\n\n/**\n * Enqueues markup to be rendered and inserted at a supplied index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction enqueueInsertMarkup(parentID, markup, toIndex) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\n markupIndex: markupQueue.push(markup) - 1,\n content: null,\n fromIndex: null,\n toIndex: toIndex\n });\n}\n\n/**\n * Enqueues moving an existing element to another index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction enqueueMove(parentID, fromIndex, toIndex) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\n markupIndex: null,\n content: null,\n fromIndex: fromIndex,\n toIndex: toIndex\n });\n}\n\n/**\n * Enqueues removing an element at an index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction enqueueRemove(parentID, fromIndex) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.REMOVE_NODE,\n markupIndex: null,\n content: null,\n fromIndex: fromIndex,\n toIndex: null\n });\n}\n\n/**\n * Enqueues setting the markup of a node.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction enqueueSetMarkup(parentID, markup) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.SET_MARKUP,\n markupIndex: null,\n content: markup,\n fromIndex: null,\n toIndex: null\n });\n}\n\n/**\n * Enqueues setting the text content.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction enqueueTextContent(parentID, textContent) {\n // NOTE: Null values reduce hidden classes.\n updateQueue.push({\n parentID: parentID,\n parentNode: null,\n type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\n markupIndex: null,\n content: textContent,\n fromIndex: null,\n toIndex: null\n });\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue() {\n if (updateQueue.length) {\n ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);\n clearQueue();\n }\n}\n\n/**\n * Clears any enqueued updates.\n *\n * @private\n */\nfunction clearQueue() {\n updateQueue.length = 0;\n markupQueue.length = 0;\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n /**\n * Provides common functionality for components that must reconcile multiple\n * children. This is used by `ReactDOMComponent` to mount, update, and\n * unmount child components.\n *\n * @lends {ReactMultiChild.prototype}\n */\n Mixin: {\n\n _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n if (process.env.NODE_ENV !== 'production') {\n if (this._currentElement) {\n try {\n ReactCurrentOwner.current = this._currentElement._owner;\n return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n } finally {\n ReactCurrentOwner.current = null;\n }\n }\n }\n return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n },\n\n _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) {\n var nextChildren;\n if (process.env.NODE_ENV !== 'production') {\n if (this._currentElement) {\n try {\n ReactCurrentOwner.current = this._currentElement._owner;\n nextChildren = flattenChildren(nextNestedChildrenElements);\n } finally {\n ReactCurrentOwner.current = null;\n }\n return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n }\n }\n nextChildren = flattenChildren(nextNestedChildrenElements);\n return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n },\n\n /**\n * Generates a \"mount image\" for each of the supplied children. In the case\n * of `ReactDOMComponent`, a mount image is a string of markup.\n *\n * @param {?object} nestedChildren Nested child maps.\n * @return {array} An array of mounted representations.\n * @internal\n */\n mountChildren: function (nestedChildren, transaction, context) {\n var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n this._renderedChildren = children;\n var mountImages = [];\n var index = 0;\n for (var name in children) {\n if (children.hasOwnProperty(name)) {\n var child = children[name];\n // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n var rootID = this._rootNodeID + name;\n var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n child._mountIndex = index++;\n mountImages.push(mountImage);\n }\n }\n return mountImages;\n },\n\n /**\n * Replaces any rendered children with a text content string.\n *\n * @param {string} nextContent String of content.\n * @internal\n */\n updateTextContent: function (nextContent) {\n updateDepth++;\n var errorThrown = true;\n try {\n var prevChildren = this._renderedChildren;\n // Remove any rendered children.\n ReactChildReconciler.unmountChildren(prevChildren);\n // TODO: The setTextContent operation should be enough\n for (var name in prevChildren) {\n if (prevChildren.hasOwnProperty(name)) {\n this._unmountChild(prevChildren[name]);\n }\n }\n // Set new text content.\n this.setTextContent(nextContent);\n errorThrown = false;\n } finally {\n updateDepth--;\n if (!updateDepth) {\n if (errorThrown) {\n clearQueue();\n } else {\n processQueue();\n }\n }\n }\n },\n\n /**\n * Replaces any rendered children with a markup string.\n *\n * @param {string} nextMarkup String of markup.\n * @internal\n */\n updateMarkup: function (nextMarkup) {\n updateDepth++;\n var errorThrown = true;\n try {\n var prevChildren = this._renderedChildren;\n // Remove any rendered children.\n ReactChildReconciler.unmountChildren(prevChildren);\n for (var name in prevChildren) {\n if (prevChildren.hasOwnProperty(name)) {\n this._unmountChildByName(prevChildren[name], name);\n }\n }\n this.setMarkup(nextMarkup);\n errorThrown = false;\n } finally {\n updateDepth--;\n if (!updateDepth) {\n if (errorThrown) {\n clearQueue();\n } else {\n processQueue();\n }\n }\n }\n },\n\n /**\n * Updates the rendered children with new children.\n *\n * @param {?object} nextNestedChildrenElements Nested child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n updateChildren: function (nextNestedChildrenElements, transaction, context) {\n updateDepth++;\n var errorThrown = true;\n try {\n this._updateChildren(nextNestedChildrenElements, transaction, context);\n errorThrown = false;\n } finally {\n updateDepth--;\n if (!updateDepth) {\n if (errorThrown) {\n clearQueue();\n } else {\n processQueue();\n }\n }\n }\n },\n\n /**\n * Improve performance by isolating this hot code path from the try/catch\n * block in `updateChildren`.\n *\n * @param {?object} nextNestedChildrenElements Nested child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @final\n * @protected\n */\n _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n var prevChildren = this._renderedChildren;\n var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context);\n this._renderedChildren = nextChildren;\n if (!nextChildren && !prevChildren) {\n return;\n }\n var name;\n // `nextIndex` will increment for each child in `nextChildren`, but\n // `lastIndex` will be the last index visited in `prevChildren`.\n var lastIndex = 0;\n var nextIndex = 0;\n for (name in nextChildren) {\n if (!nextChildren.hasOwnProperty(name)) {\n continue;\n }\n var prevChild = prevChildren && prevChildren[name];\n var nextChild = nextChildren[name];\n if (prevChild === nextChild) {\n this.moveChild(prevChild, nextIndex, lastIndex);\n lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n prevChild._mountIndex = nextIndex;\n } else {\n if (prevChild) {\n // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n this._unmountChild(prevChild);\n }\n // The child must be instantiated before it's mounted.\n this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);\n }\n nextIndex++;\n }\n // Remove children that are no longer present.\n for (name in prevChildren) {\n if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n this._unmountChild(prevChildren[name]);\n }\n }\n },\n\n /**\n * Unmounts all rendered children. This should be used to clean up children\n * when this component is unmounted.\n *\n * @internal\n */\n unmountChildren: function () {\n var renderedChildren = this._renderedChildren;\n ReactChildReconciler.unmountChildren(renderedChildren);\n this._renderedChildren = null;\n },\n\n /**\n * Moves a child component to the supplied index.\n *\n * @param {ReactComponent} child Component to move.\n * @param {number} toIndex Destination index of the element.\n * @param {number} lastIndex Last index visited of the siblings of `child`.\n * @protected\n */\n moveChild: function (child, toIndex, lastIndex) {\n // If the index of `child` is less than `lastIndex`, then it needs to\n // be moved. Otherwise, we do not need to move it because a child will be\n // inserted or moved before `child`.\n if (child._mountIndex < lastIndex) {\n enqueueMove(this._rootNodeID, child._mountIndex, toIndex);\n }\n },\n\n /**\n * Creates a child component.\n *\n * @param {ReactComponent} child Component to create.\n * @param {string} mountImage Markup to insert.\n * @protected\n */\n createChild: function (child, mountImage) {\n enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex);\n },\n\n /**\n * Removes a child component.\n *\n * @param {ReactComponent} child Child to remove.\n * @protected\n */\n removeChild: function (child) {\n enqueueRemove(this._rootNodeID, child._mountIndex);\n },\n\n /**\n * Sets this text content string.\n *\n * @param {string} textContent Text content to set.\n * @protected\n */\n setTextContent: function (textContent) {\n enqueueTextContent(this._rootNodeID, textContent);\n },\n\n /**\n * Sets this markup string.\n *\n * @param {string} markup Markup to set.\n * @protected\n */\n setMarkup: function (markup) {\n enqueueSetMarkup(this._rootNodeID, markup);\n },\n\n /**\n * Mounts a child with the supplied name.\n *\n * NOTE: This is part of `updateChildren` and is here for readability.\n *\n * @param {ReactComponent} child Component to mount.\n * @param {string} name Name of the child.\n * @param {number} index Index at which to insert the child.\n * @param {ReactReconcileTransaction} transaction\n * @private\n */\n _mountChildByNameAtIndex: function (child, name, index, transaction, context) {\n // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n var rootID = this._rootNodeID + name;\n var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n child._mountIndex = index;\n this.createChild(child, mountImage);\n },\n\n /**\n * Unmounts a rendered child.\n *\n * NOTE: This is part of `updateChildren` and is here for readability.\n *\n * @param {ReactComponent} child Component to unmount.\n * @private\n */\n _unmountChild: function (child) {\n this.removeChild(child);\n child._mountIndex = null;\n }\n\n }\n\n};\n\nmodule.exports = ReactMultiChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactMultiChild.js\n ** module id = 113\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildReconciler\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactReconciler = require('./ReactReconciler');\n\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar shouldUpdateReactComponent = require('./shouldUpdateReactComponent');\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\nfunction instantiateChild(childInstances, child, name) {\n // We found a component instance.\n var keyUnique = childInstances[name] === undefined;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n }\n if (child != null && keyUnique) {\n childInstances[name] = instantiateReactComponent(child, null);\n }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n /**\n * Generates a \"mount image\" for each of the supplied children. In the case\n * of `ReactDOMComponent`, a mount image is a string of markup.\n *\n * @param {?object} nestedChildNodes Nested child maps.\n * @return {?object} A set of child instances.\n * @internal\n */\n instantiateChildren: function (nestedChildNodes, transaction, context) {\n if (nestedChildNodes == null) {\n return null;\n }\n var childInstances = {};\n traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n return childInstances;\n },\n\n /**\n * Updates the rendered children and returns a new set of children.\n *\n * @param {?object} prevChildren Previously initialized set of children.\n * @param {?object} nextChildren Flat child element maps.\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @return {?object} A new set of child instances.\n * @internal\n */\n updateChildren: function (prevChildren, nextChildren, transaction, context) {\n // We currently don't have a way to track moves here but if we use iterators\n // instead of for..in we can zip the iterators and check if an item has\n // moved.\n // TODO: If nothing has changed, return the prevChildren object so that we\n // can quickly bailout if nothing has changed.\n if (!nextChildren && !prevChildren) {\n return null;\n }\n var name;\n for (name in nextChildren) {\n if (!nextChildren.hasOwnProperty(name)) {\n continue;\n }\n var prevChild = prevChildren && prevChildren[name];\n var prevElement = prevChild && prevChild._currentElement;\n var nextElement = nextChildren[name];\n if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n nextChildren[name] = prevChild;\n } else {\n if (prevChild) {\n ReactReconciler.unmountComponent(prevChild, name);\n }\n // The child must be instantiated before it's mounted.\n var nextChildInstance = instantiateReactComponent(nextElement, null);\n nextChildren[name] = nextChildInstance;\n }\n }\n // Unmount children that are no longer present.\n for (name in prevChildren) {\n if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n ReactReconciler.unmountComponent(prevChildren[name]);\n }\n }\n return nextChildren;\n },\n\n /**\n * Unmounts all rendered children. This should be used to clean up children\n * when this component is unmounted.\n *\n * @param {?object} renderedChildren Previously initialized set of children.\n * @internal\n */\n unmountChildren: function (renderedChildren) {\n for (var name in renderedChildren) {\n if (renderedChildren.hasOwnProperty(name)) {\n var renderedChild = renderedChildren[name];\n ReactReconciler.unmountComponent(renderedChild);\n }\n }\n }\n\n};\n\nmodule.exports = ReactChildReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactChildReconciler.js\n ** module id = 114\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule flattenChildren\n */\n\n'use strict';\n\nvar traverseAllChildren = require('./traverseAllChildren');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\n // We found a component instance.\n var result = traverseContext;\n var keyUnique = result[name] === undefined;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n }\n if (keyUnique && child != null) {\n result[name] = child;\n }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children) {\n if (children == null) {\n return children;\n }\n var result = {};\n traverseAllChildren(children, flattenSingleChildIntoContext, result);\n return result;\n}\n\nmodule.exports = flattenChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/flattenChildren.js\n ** module id = 115\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shallowEqual\n * @typechecks\n * \n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n var bHasOwnProperty = hasOwnProperty.bind(objB);\n for (var i = 0; i < keysA.length; i++) {\n if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/shallowEqual.js\n ** module id = 116\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventListener\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventListener = require('fbjs/lib/EventListener');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar PooledClass = require('./PooledClass');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMount = require('./ReactMount');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar assign = require('./Object.assign');\nvar getEventTarget = require('./getEventTarget');\nvar getUnboundedScrollPosition = require('fbjs/lib/getUnboundedScrollPosition');\n\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * Finds the parent React component of `node`.\n *\n * @param {*} node\n * @return {?DOMEventTarget} Parent container, or `null` if the specified node\n * is not nested.\n */\nfunction findParent(node) {\n // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n var nodeID = ReactMount.getID(node);\n var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n var container = ReactMount.findReactContainerForID(rootID);\n var parent = ReactMount.getFirstReactDOM(container);\n return parent;\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n this.topLevelType = topLevelType;\n this.nativeEvent = nativeEvent;\n this.ancestors = [];\n}\nassign(TopLevelCallbackBookKeeping.prototype, {\n destructor: function () {\n this.topLevelType = null;\n this.nativeEvent = null;\n this.ancestors.length = 0;\n }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n // TODO: Re-enable event.path handling\n //\n // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) {\n // // New browsers have a path attribute on native events\n // handleTopLevelWithPath(bookKeeping);\n // } else {\n // // Legacy browsers don't have a path attribute on native events\n // handleTopLevelWithoutPath(bookKeeping);\n // }\n\n void handleTopLevelWithPath; // temporarily unused\n handleTopLevelWithoutPath(bookKeeping);\n}\n\n// Legacy browsers don't have a path attribute on native events\nfunction handleTopLevelWithoutPath(bookKeeping) {\n var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;\n\n // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n var ancestor = topLevelTarget;\n while (ancestor) {\n bookKeeping.ancestors.push(ancestor);\n ancestor = findParent(ancestor);\n }\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n topLevelTarget = bookKeeping.ancestors[i];\n var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\n// New browsers have a path attribute on native events\nfunction handleTopLevelWithPath(bookKeeping) {\n var path = bookKeeping.nativeEvent.path;\n var currentNativeTarget = path[0];\n var eventsFired = 0;\n for (var i = 0; i < path.length; i++) {\n var currentPathElement = path[i];\n if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) {\n currentNativeTarget = path[i + 1];\n }\n // TODO: slow\n var reactParent = ReactMount.getFirstReactDOM(currentPathElement);\n if (reactParent === currentPathElement) {\n var currentPathElementID = ReactMount.getID(currentPathElement);\n var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID);\n bookKeeping.ancestors.push(currentPathElement);\n\n var topLevelTargetID = ReactMount.getID(currentPathElement) || '';\n eventsFired++;\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget);\n\n // Jump to the root of this React render tree\n while (currentPathElementID !== newRootID) {\n i++;\n currentPathElement = path[i];\n currentPathElementID = ReactMount.getID(currentPathElement);\n }\n }\n }\n if (eventsFired === 0) {\n ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\nfunction scrollValueMonitor(cb) {\n var scrollPosition = getUnboundedScrollPosition(window);\n cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n _enabled: true,\n _handleTopLevel: null,\n\n WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n setHandleTopLevel: function (handleTopLevel) {\n ReactEventListener._handleTopLevel = handleTopLevel;\n },\n\n setEnabled: function (enabled) {\n ReactEventListener._enabled = !!enabled;\n },\n\n isEnabled: function () {\n return ReactEventListener._enabled;\n },\n\n /**\n * Traps top-level events by using event bubbling.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} handle Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\n trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n var element = handle;\n if (!element) {\n return null;\n }\n return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n },\n\n /**\n * Traps a top-level event by using event capturing.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} handle Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\n trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n var element = handle;\n if (!element) {\n return null;\n }\n return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n },\n\n monitorScrollValue: function (refresh) {\n var callback = scrollValueMonitor.bind(null, refresh);\n EventListener.listen(window, 'scroll', callback);\n },\n\n dispatchEvent: function (topLevelType, nativeEvent) {\n if (!ReactEventListener._enabled) {\n return;\n }\n\n var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n } finally {\n TopLevelCallbackBookKeeping.release(bookKeeping);\n }\n }\n};\n\nmodule.exports = ReactEventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactEventListener.js\n ** module id = 117\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @providesModule EventListener\n * @typechecks\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function (target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function () {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function () {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function (target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function () {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function () {}\n};\n\nmodule.exports = EventListener;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/EventListener.js\n ** module id = 118\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getUnboundedScrollPosition\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\nfunction getUnboundedScrollPosition(scrollable) {\n if (scrollable === window) {\n return {\n x: window.pageXOffset || document.documentElement.scrollLeft,\n y: window.pageYOffset || document.documentElement.scrollTop\n };\n }\n return {\n x: scrollable.scrollLeft,\n y: scrollable.scrollTop\n };\n}\n\nmodule.exports = getUnboundedScrollPosition;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getUnboundedScrollPosition.js\n ** module id = 119\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInjection\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar EventPluginHub = require('./EventPluginHub');\nvar ReactComponentEnvironment = require('./ReactComponentEnvironment');\nvar ReactClass = require('./ReactClass');\nvar ReactEmptyComponent = require('./ReactEmptyComponent');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactNativeComponent = require('./ReactNativeComponent');\nvar ReactPerf = require('./ReactPerf');\nvar ReactRootIndex = require('./ReactRootIndex');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar ReactInjection = {\n Component: ReactComponentEnvironment.injection,\n Class: ReactClass.injection,\n DOMProperty: DOMProperty.injection,\n EmptyComponent: ReactEmptyComponent.injection,\n EventPluginHub: EventPluginHub.injection,\n EventEmitter: ReactBrowserEventEmitter.injection,\n NativeComponent: ReactNativeComponent.injection,\n Perf: ReactPerf.injection,\n RootIndex: ReactRootIndex.injection,\n Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInjection.js\n ** module id = 120\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar assign = require('./Object.assign');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar keyMirror = require('fbjs/lib/keyMirror');\nvar keyOf = require('fbjs/lib/keyOf');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n /**\n * These methods may be defined only once by the class specification or mixin.\n */\n DEFINE_ONCE: null,\n /**\n * These methods may be defined by both the class specification and mixins.\n * Subsequent definitions will be chained. These methods must return void.\n */\n DEFINE_MANY: null,\n /**\n * These methods are overriding the base class.\n */\n OVERRIDE_BASE: null,\n /**\n * These methods are similar to DEFINE_MANY, except we assume they return\n * objects. We try to merge the keys of the return values of all the mixed in\n * functions. If there is a key conflict we throw.\n */\n DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\nvar warnedSetProps = false;\nfunction warnSetProps() {\n if (!warnedSetProps) {\n warnedSetProps = true;\n process.env.NODE_ENV !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined;\n }\n}\n\n/**\n * Composite components are higher-level components that compose other composite\n * or native components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return <div>Hello World</div>;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: SpecPolicy.DEFINE_MANY,\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: SpecPolicy.DEFINE_MANY,\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return <div>Hello, {name}!</div>;\n * }\n *\n * @return {ReactComponent}\n * @nosideeffects\n * @required\n */\n render: SpecPolicy.DEFINE_ONCE,\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n displayName: function (Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function (Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function (Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n }\n Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes);\n },\n contextTypes: function (Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n }\n Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes);\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function (Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function (Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n }\n Constructor.propTypes = assign({}, Constructor.propTypes, propTypes);\n },\n statics: function (Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an invariant so components\n // don't show up in prod but not in __DEV__\n process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined;\n }\n }\n}\n\nfunction validateMethodOverride(proto, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined;\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (proto.hasOwnProperty(name)) {\n !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined;\n }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classses.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n return;\n }\n\n !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n\n var proto = Constructor.prototype;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n validateMethodOverride(proto, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isAlreadyDefined = proto.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n if (shouldAutoBind) {\n if (!proto.__reactAutoBindMap) {\n proto.__reactAutoBindMap = {};\n }\n proto.__reactAutoBindMap[name] = property;\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined;\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = (name in RESERVED_SPEC_KEYS);\n !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined;\n\n var isInherited = (name in Constructor);\n !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined;\n Constructor[name] = property;\n }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined;\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined;\n one[key] = two[key];\n }\n }\n return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n /* eslint-disable block-scoped-var, no-undef */\n boundMethod.bind = function (newThis) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined;\n } else if (!args.length) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined;\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n /* eslint-enable */\n };\n }\n return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n for (var autoBindKey in component.__reactAutoBindMap) {\n if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {\n var method = component.__reactAutoBindMap[autoBindKey];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function (newState, callback) {\n this.updater.enqueueReplaceState(this, newState);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function () {\n return this.updater.isMounted(this);\n },\n\n /**\n * Sets a subset of the props.\n *\n * @param {object} partialProps Subset of the next props.\n * @param {?function} callback Called after props are updated.\n * @final\n * @public\n * @deprecated\n */\n setProps: function (partialProps, callback) {\n if (process.env.NODE_ENV !== 'production') {\n warnSetProps();\n }\n this.updater.enqueueSetProps(this, partialProps);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n },\n\n /**\n * Replace all the props.\n *\n * @param {object} newProps Subset of the next props.\n * @param {?function} callback Called after props are updated.\n * @final\n * @public\n * @deprecated\n */\n replaceProps: function (newProps, callback) {\n if (process.env.NODE_ENV !== 'production') {\n warnSetProps();\n }\n this.updater.enqueueReplaceProps(this, newProps);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n }\n};\n\nvar ReactClassComponent = function () {};\nassign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n /**\n * Creates a composite component class given a class specification.\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n createClass: function (spec) {\n var Constructor = function (props, context, updater) {\n // This constructor is overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined;\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindMap) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n this.state = initialState;\n };\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, spec);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined;\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined;\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n },\n\n injection: {\n injectMixin: function (mixin) {\n injectedMixins.push(mixin);\n }\n }\n\n};\n\nmodule.exports = ReactClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactClass.js\n ** module id = 121\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined;\n }\n this.updater.enqueueSetState(this, partialState);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this);\n if (callback) {\n this.updater.enqueueCallback(this, callback);\n }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n var deprecatedAPIs = {\n getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'],\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceProps: ['replaceProps', 'Instead, call render again at the top level.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],\n setProps: ['setProps', 'Instead, call render again at the top level.']\n };\n var defineDeprecationWarning = function (methodName, info) {\n if (canDefineProperty) {\n Object.defineProperty(ReactComponent.prototype, methodName, {\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined;\n return undefined;\n }\n });\n }\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nmodule.exports = ReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponent.js\n ** module id = 122\n ** module chunks = 0 1\n **/","/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnTDZ(publicInstance, callerName) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {},\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n warnTDZ(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n warnTDZ(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n warnTDZ(publicInstance, 'setState');\n },\n\n /**\n * Sets a subset of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialProps Subset of the next props.\n * @internal\n */\n enqueueSetProps: function (publicInstance, partialProps) {\n warnTDZ(publicInstance, 'setProps');\n },\n\n /**\n * Replaces all of the props.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} props New props.\n * @internal\n */\n enqueueReplaceProps: function (publicInstance, props) {\n warnTDZ(publicInstance, 'replaceProps');\n }\n\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNoopUpdateQueue.js\n ** module id = 123\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconcileTransaction\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactBrowserEventEmitter = require('./ReactBrowserEventEmitter');\nvar ReactDOMFeatureFlags = require('./ReactDOMFeatureFlags');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n /**\n * @return {Selection} Selection information.\n */\n initialize: ReactInputSelection.getSelectionInformation,\n /**\n * @param {Selection} sel Selection information returned from `initialize`.\n */\n close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n /**\n * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n * the reconciliation.\n */\n initialize: function () {\n var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n ReactBrowserEventEmitter.setEnabled(false);\n return currentlyEnabled;\n },\n\n /**\n * @param {boolean} previouslyEnabled Enabled status of\n * `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n * restores the previous value.\n */\n close: function (previouslyEnabled) {\n ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n /**\n * Initializes the internal `onDOMReady` queue.\n */\n initialize: function () {\n this.reactMountReady.reset();\n },\n\n /**\n * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n */\n close: function () {\n this.reactMountReady.notifyAll();\n }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n * modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n * track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(forceHTML) {\n this.reinitializeTransaction();\n // Only server-side rendering really needs this option (see\n // `ReactServerRendering`), but server-side uses\n // `ReactServerRenderingTransaction` instead. This option is here so that it's\n // accessible and defaults to false when `ReactDOMComponent` and\n // `ReactTextComponent` checks it in `mountComponent`.`\n this.renderToStaticMarkup = false;\n this.reactMountReady = CallbackQueue.getPooled(null);\n this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement;\n}\n\nvar Mixin = {\n /**\n * @see Transaction\n * @abstract\n * @final\n * @return {array<object>} List of operation wrap procedures.\n * TODO: convert to array<TransactionWrapper>\n */\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n /**\n * @return {object} The queue to collect `onDOMReady` callbacks with.\n */\n getReactMountReady: function () {\n return this.reactMountReady;\n },\n\n /**\n * `PooledClass` looks for this, and will invoke this before allowing this\n * instance to be reused.\n */\n destructor: function () {\n CallbackQueue.release(this.reactMountReady);\n this.reactMountReady = null;\n }\n};\n\nassign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconcileTransaction.js\n ** module id = 124\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = require('./ReactDOMSelection');\n\nvar containsNode = require('fbjs/lib/containsNode');\nvar focusNode = require('fbjs/lib/focusNode');\nvar getActiveElement = require('fbjs/lib/getActiveElement');\n\nfunction isInDocument(node) {\n return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n hasSelectionCapabilities: function (elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n },\n\n getSelectionInformation: function () {\n var focusedElem = getActiveElement();\n return {\n focusedElem: focusedElem,\n selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n };\n },\n\n /**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n restoreSelection: function (priorSelectionInformation) {\n var curFocusedElem = getActiveElement();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n }\n focusNode(priorFocusedElem);\n }\n },\n\n /**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n getSelection: function (input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n // IE8 input.\n var range = document.selection.createRange();\n // There can only be one selection per document in IE, so it must\n // be in our element.\n if (range.parentElement() === input) {\n selection = {\n start: -range.moveStart('character', -input.value.length),\n end: -range.moveEnd('character', -input.value.length)\n };\n }\n } else {\n // Content editable or old IE textarea.\n selection = ReactDOMSelection.getOffsets(input);\n }\n\n return selection || { start: 0, end: 0 };\n },\n\n /**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n setSelection: function (input, offsets) {\n var start = offsets.start;\n var end = offsets.end;\n if (typeof end === 'undefined') {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n var range = input.createTextRange();\n range.collapse(true);\n range.moveStart('character', start);\n range.moveEnd('character', end - start);\n range.select();\n } else {\n ReactDOMSelection.setOffsets(input, offsets);\n }\n }\n};\n\nmodule.exports = ReactInputSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInputSelection.js\n ** module id = 125\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelection\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar getNodeForCharacterOffset = require('./getNodeForCharacterOffset');\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n var selection = document.selection;\n var selectedRange = selection.createRange();\n var selectedLength = selectedRange.text.length;\n\n // Duplicate selection so we can move range without breaking user selection.\n var fromStart = selectedRange.duplicate();\n fromStart.moveToElementText(node);\n fromStart.setEndPoint('EndToStart', selectedRange);\n\n var startOffset = fromStart.text.length;\n var endOffset = startOffset + selectedLength;\n\n return {\n start: startOffset,\n end: endOffset\n };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n var selection = window.getSelection && window.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode;\n var anchorOffset = selection.anchorOffset;\n var focusNode = selection.focusNode;\n var focusOffset = selection.focusOffset;\n\n var currentRange = selection.getRangeAt(0);\n\n // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n // divs do not seem to expose properties, triggering a \"Permission denied\n // error\" if any of its properties are accessed. The only seemingly possible\n // way to avoid erroring is to access a property that typically works for\n // non-anonymous divs and catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n try {\n /* eslint-disable no-unused-expressions */\n currentRange.startContainer.nodeType;\n currentRange.endContainer.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n // If the node and offset values are the same, the selection is collapsed.\n // `Selection.isCollapsed` is available natively, but IE sometimes gets\n // this value wrong.\n var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n var tempRange = currentRange.cloneRange();\n tempRange.selectNodeContents(node);\n tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n var end = start + rangeLength;\n\n // Detect whether the selection is backward.\n var detectionRange = document.createRange();\n detectionRange.setStart(anchorNode, anchorOffset);\n detectionRange.setEnd(focusNode, focusOffset);\n var isBackward = detectionRange.collapsed;\n\n return {\n start: isBackward ? end : start,\n end: isBackward ? start : end\n };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n var range = document.selection.createRange().duplicate();\n var start, end;\n\n if (typeof offsets.end === 'undefined') {\n start = offsets.start;\n end = start;\n } else if (offsets.start > offsets.end) {\n start = offsets.end;\n end = offsets.start;\n } else {\n start = offsets.start;\n end = offsets.end;\n }\n\n range.moveToElementText(node);\n range.moveStart('character', start);\n range.setEndPoint('EndToStart', range);\n range.moveEnd('character', end - start);\n range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n if (!window.getSelection) {\n return;\n }\n\n var selection = window.getSelection();\n var length = node[getTextContentAccessor()].length;\n var start = Math.min(offsets.start, length);\n var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);\n\n // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n var range = document.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n /**\n * @param {DOMElement} node\n */\n getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n /**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMSelection.js\n ** module id = 126\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNodeForCharacterOffset\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === 3) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\nmodule.exports = getNodeForCharacterOffset;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getNodeForCharacterOffset.js\n ** module id = 127\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getActiveElement\n * @typechecks\n */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not yet defined.\n */\n'use strict';\n\nfunction getActiveElement() /*?DOMElement*/{\n if (typeof document === 'undefined') {\n return null;\n }\n\n try {\n return document.activeElement || document.body;\n } catch (e) {\n return document.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/getActiveElement.js\n ** module id = 128\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SelectEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactInputSelection = require('./ReactInputSelection');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getActiveElement = require('fbjs/lib/getActiveElement');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\nvar shallowEqual = require('fbjs/lib/shallowEqual');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n select: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSelect: null }),\n captured: keyOf({ onSelectCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]\n }\n};\n\nvar activeElement = null;\nvar activeElementID = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events.\nvar hasListener = false;\nvar ON_SELECT_KEY = keyOf({ onSelect: null });\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else if (window.getSelection) {\n var selection = window.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n } else if (document.selection) {\n var range = document.selection.createRange();\n return {\n parentElement: range.parentElement(),\n text: range.text,\n top: range.boundingTop,\n left: range.boundingLeft\n };\n }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n return null;\n }\n\n // Only fire when selection has actually changed.\n var currentSelection = getSelection(activeElement);\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n\n var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget);\n\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement;\n\n EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n return syntheticEvent;\n }\n\n return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n if (!hasListener) {\n return null;\n }\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case topLevelTypes.topFocus:\n if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {\n activeElement = topLevelTarget;\n activeElementID = topLevelTargetID;\n lastSelection = null;\n }\n break;\n case topLevelTypes.topBlur:\n activeElement = null;\n activeElementID = null;\n lastSelection = null;\n break;\n\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n case topLevelTypes.topMouseDown:\n mouseDown = true;\n break;\n case topLevelTypes.topContextMenu:\n case topLevelTypes.topMouseUp:\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n case topLevelTypes.topSelectionChange:\n if (skipSelectionChangeEvent) {\n break;\n }\n // falls through\n case topLevelTypes.topKeyDown:\n case topLevelTypes.topKeyUp:\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n },\n\n didPutListener: function (id, registrationName, listener) {\n if (registrationName === ON_SELECT_KEY) {\n hasListener = true;\n }\n }\n};\n\nmodule.exports = SelectEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SelectEventPlugin.js\n ** module id = 129\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ServerReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Size of the reactRoot ID space. We generate random numbers for React root\n * IDs and if there's a collision the events and DOM update system will\n * get confused. In the future we need a way to generate GUIDs but for\n * now this will work on a smaller scale.\n */\nvar GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);\n\nvar ServerReactRootIndex = {\n createReactRootIndex: function () {\n return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);\n }\n};\n\nmodule.exports = ServerReactRootIndex;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ServerReactRootIndex.js\n ** module id = 130\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SimpleEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventListener = require('fbjs/lib/EventListener');\nvar EventPropagators = require('./EventPropagators');\nvar ReactMount = require('./ReactMount');\nvar SyntheticClipboardEvent = require('./SyntheticClipboardEvent');\nvar SyntheticEvent = require('./SyntheticEvent');\nvar SyntheticFocusEvent = require('./SyntheticFocusEvent');\nvar SyntheticKeyboardEvent = require('./SyntheticKeyboardEvent');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\nvar SyntheticDragEvent = require('./SyntheticDragEvent');\nvar SyntheticTouchEvent = require('./SyntheticTouchEvent');\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar SyntheticWheelEvent = require('./SyntheticWheelEvent');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getEventCharCode = require('./getEventCharCode');\nvar invariant = require('fbjs/lib/invariant');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n abort: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onAbort: true }),\n captured: keyOf({ onAbortCapture: true })\n }\n },\n blur: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onBlur: true }),\n captured: keyOf({ onBlurCapture: true })\n }\n },\n canPlay: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCanPlay: true }),\n captured: keyOf({ onCanPlayCapture: true })\n }\n },\n canPlayThrough: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCanPlayThrough: true }),\n captured: keyOf({ onCanPlayThroughCapture: true })\n }\n },\n click: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onClick: true }),\n captured: keyOf({ onClickCapture: true })\n }\n },\n contextMenu: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onContextMenu: true }),\n captured: keyOf({ onContextMenuCapture: true })\n }\n },\n copy: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCopy: true }),\n captured: keyOf({ onCopyCapture: true })\n }\n },\n cut: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCut: true }),\n captured: keyOf({ onCutCapture: true })\n }\n },\n doubleClick: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDoubleClick: true }),\n captured: keyOf({ onDoubleClickCapture: true })\n }\n },\n drag: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDrag: true }),\n captured: keyOf({ onDragCapture: true })\n }\n },\n dragEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragEnd: true }),\n captured: keyOf({ onDragEndCapture: true })\n }\n },\n dragEnter: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragEnter: true }),\n captured: keyOf({ onDragEnterCapture: true })\n }\n },\n dragExit: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragExit: true }),\n captured: keyOf({ onDragExitCapture: true })\n }\n },\n dragLeave: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragLeave: true }),\n captured: keyOf({ onDragLeaveCapture: true })\n }\n },\n dragOver: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragOver: true }),\n captured: keyOf({ onDragOverCapture: true })\n }\n },\n dragStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDragStart: true }),\n captured: keyOf({ onDragStartCapture: true })\n }\n },\n drop: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDrop: true }),\n captured: keyOf({ onDropCapture: true })\n }\n },\n durationChange: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onDurationChange: true }),\n captured: keyOf({ onDurationChangeCapture: true })\n }\n },\n emptied: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onEmptied: true }),\n captured: keyOf({ onEmptiedCapture: true })\n }\n },\n encrypted: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onEncrypted: true }),\n captured: keyOf({ onEncryptedCapture: true })\n }\n },\n ended: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onEnded: true }),\n captured: keyOf({ onEndedCapture: true })\n }\n },\n error: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onError: true }),\n captured: keyOf({ onErrorCapture: true })\n }\n },\n focus: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onFocus: true }),\n captured: keyOf({ onFocusCapture: true })\n }\n },\n input: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onInput: true }),\n captured: keyOf({ onInputCapture: true })\n }\n },\n keyDown: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onKeyDown: true }),\n captured: keyOf({ onKeyDownCapture: true })\n }\n },\n keyPress: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onKeyPress: true }),\n captured: keyOf({ onKeyPressCapture: true })\n }\n },\n keyUp: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onKeyUp: true }),\n captured: keyOf({ onKeyUpCapture: true })\n }\n },\n load: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoad: true }),\n captured: keyOf({ onLoadCapture: true })\n }\n },\n loadedData: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoadedData: true }),\n captured: keyOf({ onLoadedDataCapture: true })\n }\n },\n loadedMetadata: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoadedMetadata: true }),\n captured: keyOf({ onLoadedMetadataCapture: true })\n }\n },\n loadStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onLoadStart: true }),\n captured: keyOf({ onLoadStartCapture: true })\n }\n },\n // Note: We do not allow listening to mouseOver events. Instead, use the\n // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\n mouseDown: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseDown: true }),\n captured: keyOf({ onMouseDownCapture: true })\n }\n },\n mouseMove: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseMove: true }),\n captured: keyOf({ onMouseMoveCapture: true })\n }\n },\n mouseOut: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseOut: true }),\n captured: keyOf({ onMouseOutCapture: true })\n }\n },\n mouseOver: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseOver: true }),\n captured: keyOf({ onMouseOverCapture: true })\n }\n },\n mouseUp: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onMouseUp: true }),\n captured: keyOf({ onMouseUpCapture: true })\n }\n },\n paste: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPaste: true }),\n captured: keyOf({ onPasteCapture: true })\n }\n },\n pause: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPause: true }),\n captured: keyOf({ onPauseCapture: true })\n }\n },\n play: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPlay: true }),\n captured: keyOf({ onPlayCapture: true })\n }\n },\n playing: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onPlaying: true }),\n captured: keyOf({ onPlayingCapture: true })\n }\n },\n progress: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onProgress: true }),\n captured: keyOf({ onProgressCapture: true })\n }\n },\n rateChange: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onRateChange: true }),\n captured: keyOf({ onRateChangeCapture: true })\n }\n },\n reset: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onReset: true }),\n captured: keyOf({ onResetCapture: true })\n }\n },\n scroll: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onScroll: true }),\n captured: keyOf({ onScrollCapture: true })\n }\n },\n seeked: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSeeked: true }),\n captured: keyOf({ onSeekedCapture: true })\n }\n },\n seeking: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSeeking: true }),\n captured: keyOf({ onSeekingCapture: true })\n }\n },\n stalled: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onStalled: true }),\n captured: keyOf({ onStalledCapture: true })\n }\n },\n submit: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSubmit: true }),\n captured: keyOf({ onSubmitCapture: true })\n }\n },\n suspend: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onSuspend: true }),\n captured: keyOf({ onSuspendCapture: true })\n }\n },\n timeUpdate: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTimeUpdate: true }),\n captured: keyOf({ onTimeUpdateCapture: true })\n }\n },\n touchCancel: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchCancel: true }),\n captured: keyOf({ onTouchCancelCapture: true })\n }\n },\n touchEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchEnd: true }),\n captured: keyOf({ onTouchEndCapture: true })\n }\n },\n touchMove: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchMove: true }),\n captured: keyOf({ onTouchMoveCapture: true })\n }\n },\n touchStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onTouchStart: true }),\n captured: keyOf({ onTouchStartCapture: true })\n }\n },\n volumeChange: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onVolumeChange: true }),\n captured: keyOf({ onVolumeChangeCapture: true })\n }\n },\n waiting: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onWaiting: true }),\n captured: keyOf({ onWaitingCapture: true })\n }\n },\n wheel: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onWheel: true }),\n captured: keyOf({ onWheelCapture: true })\n }\n }\n};\n\nvar topLevelEventsToDispatchConfig = {\n topAbort: eventTypes.abort,\n topBlur: eventTypes.blur,\n topCanPlay: eventTypes.canPlay,\n topCanPlayThrough: eventTypes.canPlayThrough,\n topClick: eventTypes.click,\n topContextMenu: eventTypes.contextMenu,\n topCopy: eventTypes.copy,\n topCut: eventTypes.cut,\n topDoubleClick: eventTypes.doubleClick,\n topDrag: eventTypes.drag,\n topDragEnd: eventTypes.dragEnd,\n topDragEnter: eventTypes.dragEnter,\n topDragExit: eventTypes.dragExit,\n topDragLeave: eventTypes.dragLeave,\n topDragOver: eventTypes.dragOver,\n topDragStart: eventTypes.dragStart,\n topDrop: eventTypes.drop,\n topDurationChange: eventTypes.durationChange,\n topEmptied: eventTypes.emptied,\n topEncrypted: eventTypes.encrypted,\n topEnded: eventTypes.ended,\n topError: eventTypes.error,\n topFocus: eventTypes.focus,\n topInput: eventTypes.input,\n topKeyDown: eventTypes.keyDown,\n topKeyPress: eventTypes.keyPress,\n topKeyUp: eventTypes.keyUp,\n topLoad: eventTypes.load,\n topLoadedData: eventTypes.loadedData,\n topLoadedMetadata: eventTypes.loadedMetadata,\n topLoadStart: eventTypes.loadStart,\n topMouseDown: eventTypes.mouseDown,\n topMouseMove: eventTypes.mouseMove,\n topMouseOut: eventTypes.mouseOut,\n topMouseOver: eventTypes.mouseOver,\n topMouseUp: eventTypes.mouseUp,\n topPaste: eventTypes.paste,\n topPause: eventTypes.pause,\n topPlay: eventTypes.play,\n topPlaying: eventTypes.playing,\n topProgress: eventTypes.progress,\n topRateChange: eventTypes.rateChange,\n topReset: eventTypes.reset,\n topScroll: eventTypes.scroll,\n topSeeked: eventTypes.seeked,\n topSeeking: eventTypes.seeking,\n topStalled: eventTypes.stalled,\n topSubmit: eventTypes.submit,\n topSuspend: eventTypes.suspend,\n topTimeUpdate: eventTypes.timeUpdate,\n topTouchCancel: eventTypes.touchCancel,\n topTouchEnd: eventTypes.touchEnd,\n topTouchMove: eventTypes.touchMove,\n topTouchStart: eventTypes.touchStart,\n topVolumeChange: eventTypes.volumeChange,\n topWaiting: eventTypes.waiting,\n topWheel: eventTypes.wheel\n};\n\nfor (var type in topLevelEventsToDispatchConfig) {\n topLevelEventsToDispatchConfig[type].dependencies = [type];\n}\n\nvar ON_CLICK_KEY = keyOf({ onClick: null });\nvar onClickListeners = {};\n\nvar SimpleEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {*} An accumulation of synthetic events.\n * @see {EventPluginHub.extractEvents}\n */\n extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n if (!dispatchConfig) {\n return null;\n }\n var EventConstructor;\n switch (topLevelType) {\n case topLevelTypes.topAbort:\n case topLevelTypes.topCanPlay:\n case topLevelTypes.topCanPlayThrough:\n case topLevelTypes.topDurationChange:\n case topLevelTypes.topEmptied:\n case topLevelTypes.topEncrypted:\n case topLevelTypes.topEnded:\n case topLevelTypes.topError:\n case topLevelTypes.topInput:\n case topLevelTypes.topLoad:\n case topLevelTypes.topLoadedData:\n case topLevelTypes.topLoadedMetadata:\n case topLevelTypes.topLoadStart:\n case topLevelTypes.topPause:\n case topLevelTypes.topPlay:\n case topLevelTypes.topPlaying:\n case topLevelTypes.topProgress:\n case topLevelTypes.topRateChange:\n case topLevelTypes.topReset:\n case topLevelTypes.topSeeked:\n case topLevelTypes.topSeeking:\n case topLevelTypes.topStalled:\n case topLevelTypes.topSubmit:\n case topLevelTypes.topSuspend:\n case topLevelTypes.topTimeUpdate:\n case topLevelTypes.topVolumeChange:\n case topLevelTypes.topWaiting:\n // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n EventConstructor = SyntheticEvent;\n break;\n case topLevelTypes.topKeyPress:\n // FireFox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n /* falls through */\n case topLevelTypes.topKeyDown:\n case topLevelTypes.topKeyUp:\n EventConstructor = SyntheticKeyboardEvent;\n break;\n case topLevelTypes.topBlur:\n case topLevelTypes.topFocus:\n EventConstructor = SyntheticFocusEvent;\n break;\n case topLevelTypes.topClick:\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n /* falls through */\n case topLevelTypes.topContextMenu:\n case topLevelTypes.topDoubleClick:\n case topLevelTypes.topMouseDown:\n case topLevelTypes.topMouseMove:\n case topLevelTypes.topMouseOut:\n case topLevelTypes.topMouseOver:\n case topLevelTypes.topMouseUp:\n EventConstructor = SyntheticMouseEvent;\n break;\n case topLevelTypes.topDrag:\n case topLevelTypes.topDragEnd:\n case topLevelTypes.topDragEnter:\n case topLevelTypes.topDragExit:\n case topLevelTypes.topDragLeave:\n case topLevelTypes.topDragOver:\n case topLevelTypes.topDragStart:\n case topLevelTypes.topDrop:\n EventConstructor = SyntheticDragEvent;\n break;\n case topLevelTypes.topTouchCancel:\n case topLevelTypes.topTouchEnd:\n case topLevelTypes.topTouchMove:\n case topLevelTypes.topTouchStart:\n EventConstructor = SyntheticTouchEvent;\n break;\n case topLevelTypes.topScroll:\n EventConstructor = SyntheticUIEvent;\n break;\n case topLevelTypes.topWheel:\n EventConstructor = SyntheticWheelEvent;\n break;\n case topLevelTypes.topCopy:\n case topLevelTypes.topCut:\n case topLevelTypes.topPaste:\n EventConstructor = SyntheticClipboardEvent;\n break;\n }\n !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined;\n var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget);\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n },\n\n didPutListener: function (id, registrationName, listener) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n if (registrationName === ON_CLICK_KEY) {\n var node = ReactMount.getNode(id);\n if (!onClickListeners[id]) {\n onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);\n }\n }\n },\n\n willDeleteListener: function (id, registrationName) {\n if (registrationName === ON_CLICK_KEY) {\n onClickListeners[id].remove();\n delete onClickListeners[id];\n }\n }\n\n};\n\nmodule.exports = SimpleEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SimpleEventPlugin.js\n ** module id = 131\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticClipboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticClipboardEvent.js\n ** module id = 132\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticFocusEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticFocusEvent.js\n ** module id = 133\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticKeyboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventCharCode = require('./getEventCharCode');\nvar getEventKey = require('./getEventKey');\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticKeyboardEvent.js\n ** module id = 134\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode;\n\n // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n }\n\n // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\nmodule.exports = getEventCharCode;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventCharCode.js\n ** module id = 135\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventKey\n * @typechecks static-only\n */\n\n'use strict';\n\nvar getEventCharCode = require('./getEventCharCode');\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n 'Esc': 'Escape',\n 'Spacebar': ' ',\n 'Left': 'ArrowLeft',\n 'Up': 'ArrowUp',\n 'Right': 'ArrowRight',\n 'Down': 'ArrowDown',\n 'Del': 'Delete',\n 'Win': 'OS',\n 'Menu': 'ContextMenu',\n 'Apps': 'ContextMenu',\n 'Scroll': 'ScrollLock',\n 'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n 8: 'Backspace',\n 9: 'Tab',\n 12: 'Clear',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Control',\n 18: 'Alt',\n 19: 'Pause',\n 20: 'CapsLock',\n 27: 'Escape',\n 32: ' ',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n 144: 'NumLock',\n 145: 'ScrollLock',\n 224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (key !== 'Unidentified') {\n return key;\n }\n }\n\n // Browser does not implement `key`, polyfill as much of it as we can.\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent);\n\n // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n return '';\n}\n\nmodule.exports = getEventKey;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventKey.js\n ** module id = 136\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticDragEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticDragEvent.js\n ** module id = 137\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTouchEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticTouchEvent.js\n ** module id = 138\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticWheelEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX :\n // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY :\n // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY :\n // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: null,\n\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticWheelEvent.js\n ** module id = 139\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SVGDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\n\nvar NS = {\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\nvar SVGDOMPropertyConfig = {\n Properties: {\n clipPath: MUST_USE_ATTRIBUTE,\n cx: MUST_USE_ATTRIBUTE,\n cy: MUST_USE_ATTRIBUTE,\n d: MUST_USE_ATTRIBUTE,\n dx: MUST_USE_ATTRIBUTE,\n dy: MUST_USE_ATTRIBUTE,\n fill: MUST_USE_ATTRIBUTE,\n fillOpacity: MUST_USE_ATTRIBUTE,\n fontFamily: MUST_USE_ATTRIBUTE,\n fontSize: MUST_USE_ATTRIBUTE,\n fx: MUST_USE_ATTRIBUTE,\n fy: MUST_USE_ATTRIBUTE,\n gradientTransform: MUST_USE_ATTRIBUTE,\n gradientUnits: MUST_USE_ATTRIBUTE,\n markerEnd: MUST_USE_ATTRIBUTE,\n markerMid: MUST_USE_ATTRIBUTE,\n markerStart: MUST_USE_ATTRIBUTE,\n offset: MUST_USE_ATTRIBUTE,\n opacity: MUST_USE_ATTRIBUTE,\n patternContentUnits: MUST_USE_ATTRIBUTE,\n patternUnits: MUST_USE_ATTRIBUTE,\n points: MUST_USE_ATTRIBUTE,\n preserveAspectRatio: MUST_USE_ATTRIBUTE,\n r: MUST_USE_ATTRIBUTE,\n rx: MUST_USE_ATTRIBUTE,\n ry: MUST_USE_ATTRIBUTE,\n spreadMethod: MUST_USE_ATTRIBUTE,\n stopColor: MUST_USE_ATTRIBUTE,\n stopOpacity: MUST_USE_ATTRIBUTE,\n stroke: MUST_USE_ATTRIBUTE,\n strokeDasharray: MUST_USE_ATTRIBUTE,\n strokeLinecap: MUST_USE_ATTRIBUTE,\n strokeOpacity: MUST_USE_ATTRIBUTE,\n strokeWidth: MUST_USE_ATTRIBUTE,\n textAnchor: MUST_USE_ATTRIBUTE,\n transform: MUST_USE_ATTRIBUTE,\n version: MUST_USE_ATTRIBUTE,\n viewBox: MUST_USE_ATTRIBUTE,\n x1: MUST_USE_ATTRIBUTE,\n x2: MUST_USE_ATTRIBUTE,\n x: MUST_USE_ATTRIBUTE,\n xlinkActuate: MUST_USE_ATTRIBUTE,\n xlinkArcrole: MUST_USE_ATTRIBUTE,\n xlinkHref: MUST_USE_ATTRIBUTE,\n xlinkRole: MUST_USE_ATTRIBUTE,\n xlinkShow: MUST_USE_ATTRIBUTE,\n xlinkTitle: MUST_USE_ATTRIBUTE,\n xlinkType: MUST_USE_ATTRIBUTE,\n xmlBase: MUST_USE_ATTRIBUTE,\n xmlLang: MUST_USE_ATTRIBUTE,\n xmlSpace: MUST_USE_ATTRIBUTE,\n y1: MUST_USE_ATTRIBUTE,\n y2: MUST_USE_ATTRIBUTE,\n y: MUST_USE_ATTRIBUTE\n },\n DOMAttributeNamespaces: {\n xlinkActuate: NS.xlink,\n xlinkArcrole: NS.xlink,\n xlinkHref: NS.xlink,\n xlinkRole: NS.xlink,\n xlinkShow: NS.xlink,\n xlinkTitle: NS.xlink,\n xlinkType: NS.xlink,\n xmlBase: NS.xml,\n xmlLang: NS.xml,\n xmlSpace: NS.xml\n },\n DOMAttributeNames: {\n clipPath: 'clip-path',\n fillOpacity: 'fill-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n gradientTransform: 'gradientTransform',\n gradientUnits: 'gradientUnits',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n patternContentUnits: 'patternContentUnits',\n patternUnits: 'patternUnits',\n preserveAspectRatio: 'preserveAspectRatio',\n spreadMethod: 'spreadMethod',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strokeDasharray: 'stroke-dasharray',\n strokeLinecap: 'stroke-linecap',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n textAnchor: 'text-anchor',\n viewBox: 'viewBox',\n xlinkActuate: 'xlink:actuate',\n xlinkArcrole: 'xlink:arcrole',\n xlinkHref: 'xlink:href',\n xlinkRole: 'xlink:role',\n xlinkShow: 'xlink:show',\n xlinkTitle: 'xlink:title',\n xlinkType: 'xlink:type',\n xmlBase: 'xml:base',\n xmlLang: 'xml:lang',\n xmlSpace: 'xml:space'\n }\n};\n\nmodule.exports = SVGDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SVGDOMPropertyConfig.js\n ** module id = 140\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerf\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDefaultPerfAnalysis = require('./ReactDefaultPerfAnalysis');\nvar ReactMount = require('./ReactMount');\nvar ReactPerf = require('./ReactPerf');\n\nvar performanceNow = require('fbjs/lib/performanceNow');\n\nfunction roundFloat(val) {\n return Math.floor(val * 100) / 100;\n}\n\nfunction addValue(obj, key, val) {\n obj[key] = (obj[key] || 0) + val;\n}\n\nvar ReactDefaultPerf = {\n _allMeasurements: [], // last item in the list is the current one\n _mountStack: [0],\n _injected: false,\n\n start: function () {\n if (!ReactDefaultPerf._injected) {\n ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\n }\n\n ReactDefaultPerf._allMeasurements.length = 0;\n ReactPerf.enableMeasure = true;\n },\n\n stop: function () {\n ReactPerf.enableMeasure = false;\n },\n\n getLastMeasurements: function () {\n return ReactDefaultPerf._allMeasurements;\n },\n\n printExclusive: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\n console.table(summary.map(function (item) {\n return {\n 'Component class name': item.componentName,\n 'Total inclusive time (ms)': roundFloat(item.inclusive),\n 'Exclusive mount time (ms)': roundFloat(item.exclusive),\n 'Exclusive render time (ms)': roundFloat(item.render),\n 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\n 'Render time per instance (ms)': roundFloat(item.render / item.count),\n 'Instances': item.count\n };\n }));\n // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\n // number.\n },\n\n printInclusive: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\n console.table(summary.map(function (item) {\n return {\n 'Owner > component': item.componentName,\n 'Inclusive time (ms)': roundFloat(item.time),\n 'Instances': item.count\n };\n }));\n console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n },\n\n getMeasurementsSummaryMap: function (measurements) {\n var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);\n return summary.map(function (item) {\n return {\n 'Owner > component': item.componentName,\n 'Wasted time (ms)': item.time,\n 'Instances': item.count\n };\n });\n },\n\n printWasted: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\n console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n },\n\n printDOM: function (measurements) {\n measurements = measurements || ReactDefaultPerf._allMeasurements;\n var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\n console.table(summary.map(function (item) {\n var result = {};\n result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\n result.type = item.type;\n result.args = JSON.stringify(item.args);\n return result;\n }));\n console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n },\n\n _recordWrite: function (id, fnName, totalTime, args) {\n // TODO: totalTime isn't that useful since it doesn't count paints/reflows\n var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;\n writes[id] = writes[id] || [];\n writes[id].push({\n type: fnName,\n time: totalTime,\n args: args\n });\n },\n\n measure: function (moduleName, fnName, func) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var totalTime;\n var rv;\n var start;\n\n if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {\n // A \"measurement\" is a set of metrics recorded for each flush. We want\n // to group the metrics for a given flush together so we can look at the\n // components that rendered and the DOM operations that actually\n // happened to determine the amount of \"wasted work\" performed.\n ReactDefaultPerf._allMeasurements.push({\n exclusive: {},\n inclusive: {},\n render: {},\n counts: {},\n writes: {},\n displayNames: {},\n totalTime: 0,\n created: {}\n });\n start = performanceNow();\n rv = func.apply(this, args);\n ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;\n return rv;\n } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') {\n start = performanceNow();\n rv = func.apply(this, args);\n totalTime = performanceNow() - start;\n\n if (fnName === '_mountImageIntoNode') {\n var mountID = ReactMount.getID(args[1]);\n ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);\n } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\n // special format\n args[0].forEach(function (update) {\n var writeArgs = {};\n if (update.fromIndex !== null) {\n writeArgs.fromIndex = update.fromIndex;\n }\n if (update.toIndex !== null) {\n writeArgs.toIndex = update.toIndex;\n }\n if (update.textContent !== null) {\n writeArgs.textContent = update.textContent;\n }\n if (update.markupIndex !== null) {\n writeArgs.markup = args[1][update.markupIndex];\n }\n ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);\n });\n } else {\n // basic format\n var id = args[0];\n if (typeof id === 'object') {\n id = ReactMount.getID(args[0]);\n }\n ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));\n }\n return rv;\n } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?\n fnName === '_renderValidatedComponent')) {\n\n if (this._currentElement.type === ReactMount.TopLevelWrapper) {\n return func.apply(this, args);\n }\n\n var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;\n var isRender = fnName === '_renderValidatedComponent';\n var isMount = fnName === 'mountComponent';\n\n var mountStack = ReactDefaultPerf._mountStack;\n var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];\n\n if (isRender) {\n addValue(entry.counts, rootNodeID, 1);\n } else if (isMount) {\n entry.created[rootNodeID] = true;\n mountStack.push(0);\n }\n\n start = performanceNow();\n rv = func.apply(this, args);\n totalTime = performanceNow() - start;\n\n if (isRender) {\n addValue(entry.render, rootNodeID, totalTime);\n } else if (isMount) {\n var subMountTime = mountStack.pop();\n mountStack[mountStack.length - 1] += totalTime;\n addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\n addValue(entry.inclusive, rootNodeID, totalTime);\n } else {\n addValue(entry.inclusive, rootNodeID, totalTime);\n }\n\n entry.displayNames[rootNodeID] = {\n current: this.getName(),\n owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'\n };\n\n return rv;\n } else {\n return func.apply(this, args);\n }\n };\n }\n};\n\nmodule.exports = ReactDefaultPerf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultPerf.js\n ** module id = 141\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerfAnalysis\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\n\n// Don't try to save users less than 1.2ms (a number I made up)\nvar DONT_CARE_THRESHOLD = 1.2;\nvar DOM_OPERATION_TYPES = {\n '_mountImageIntoNode': 'set innerHTML',\n INSERT_MARKUP: 'set innerHTML',\n MOVE_EXISTING: 'move',\n REMOVE_NODE: 'remove',\n SET_MARKUP: 'set innerHTML',\n TEXT_CONTENT: 'set textContent',\n 'setValueForProperty': 'update attribute',\n 'setValueForAttribute': 'update attribute',\n 'deleteValueForProperty': 'remove attribute',\n 'dangerouslyReplaceNodeWithMarkupByID': 'replace'\n};\n\nfunction getTotalTime(measurements) {\n // TODO: return number of DOM ops? could be misleading.\n // TODO: measure dropped frames after reconcile?\n // TODO: log total time of each reconcile and the top-level component\n // class that triggered it.\n var totalTime = 0;\n for (var i = 0; i < measurements.length; i++) {\n var measurement = measurements[i];\n totalTime += measurement.totalTime;\n }\n return totalTime;\n}\n\nfunction getDOMSummary(measurements) {\n var items = [];\n measurements.forEach(function (measurement) {\n Object.keys(measurement.writes).forEach(function (id) {\n measurement.writes[id].forEach(function (write) {\n items.push({\n id: id,\n type: DOM_OPERATION_TYPES[write.type] || write.type,\n args: write.args\n });\n });\n });\n });\n return items;\n}\n\nfunction getExclusiveSummary(measurements) {\n var candidates = {};\n var displayName;\n\n for (var i = 0; i < measurements.length; i++) {\n var measurement = measurements[i];\n var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n for (var id in allIDs) {\n displayName = measurement.displayNames[id].current;\n\n candidates[displayName] = candidates[displayName] || {\n componentName: displayName,\n inclusive: 0,\n exclusive: 0,\n render: 0,\n count: 0\n };\n if (measurement.render[id]) {\n candidates[displayName].render += measurement.render[id];\n }\n if (measurement.exclusive[id]) {\n candidates[displayName].exclusive += measurement.exclusive[id];\n }\n if (measurement.inclusive[id]) {\n candidates[displayName].inclusive += measurement.inclusive[id];\n }\n if (measurement.counts[id]) {\n candidates[displayName].count += measurement.counts[id];\n }\n }\n }\n\n // Now make a sorted array with the results.\n var arr = [];\n for (displayName in candidates) {\n if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\n arr.push(candidates[displayName]);\n }\n }\n\n arr.sort(function (a, b) {\n return b.exclusive - a.exclusive;\n });\n\n return arr;\n}\n\nfunction getInclusiveSummary(measurements, onlyClean) {\n var candidates = {};\n var inclusiveKey;\n\n for (var i = 0; i < measurements.length; i++) {\n var measurement = measurements[i];\n var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n var cleanComponents;\n\n if (onlyClean) {\n cleanComponents = getUnchangedComponents(measurement);\n }\n\n for (var id in allIDs) {\n if (onlyClean && !cleanComponents[id]) {\n continue;\n }\n\n var displayName = measurement.displayNames[id];\n\n // Inclusive time is not useful for many components without knowing where\n // they are instantiated. So we aggregate inclusive time with both the\n // owner and current displayName as the key.\n inclusiveKey = displayName.owner + ' > ' + displayName.current;\n\n candidates[inclusiveKey] = candidates[inclusiveKey] || {\n componentName: inclusiveKey,\n time: 0,\n count: 0\n };\n\n if (measurement.inclusive[id]) {\n candidates[inclusiveKey].time += measurement.inclusive[id];\n }\n if (measurement.counts[id]) {\n candidates[inclusiveKey].count += measurement.counts[id];\n }\n }\n }\n\n // Now make a sorted array with the results.\n var arr = [];\n for (inclusiveKey in candidates) {\n if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\n arr.push(candidates[inclusiveKey]);\n }\n }\n\n arr.sort(function (a, b) {\n return b.time - a.time;\n });\n\n return arr;\n}\n\nfunction getUnchangedComponents(measurement) {\n // For a given reconcile, look at which components did not actually\n // render anything to the DOM and return a mapping of their ID to\n // the amount of time it took to render the entire subtree.\n var cleanComponents = {};\n var dirtyLeafIDs = Object.keys(measurement.writes);\n var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n for (var id in allIDs) {\n var isDirty = false;\n // For each component that rendered, see if a component that triggered\n // a DOM op is in its subtree.\n for (var i = 0; i < dirtyLeafIDs.length; i++) {\n if (dirtyLeafIDs[i].indexOf(id) === 0) {\n isDirty = true;\n break;\n }\n }\n // check if component newly created\n if (measurement.created[id]) {\n isDirty = true;\n }\n if (!isDirty && measurement.counts[id] > 0) {\n cleanComponents[id] = true;\n }\n }\n return cleanComponents;\n}\n\nvar ReactDefaultPerfAnalysis = {\n getExclusiveSummary: getExclusiveSummary,\n getInclusiveSummary: getInclusiveSummary,\n getDOMSummary: getDOMSummary,\n getTotalTime: getTotalTime\n};\n\nmodule.exports = ReactDefaultPerfAnalysis;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultPerfAnalysis.js\n ** module id = 142\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performanceNow\n * @typechecks\n */\n\n'use strict';\n\nvar performance = require('./performance');\nvar curPerformance = performance;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (!curPerformance || !curPerformance.now) {\n curPerformance = Date;\n}\n\nvar performanceNow = curPerformance.now.bind(curPerformance);\n\nmodule.exports = performanceNow;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/performanceNow.js\n ** module id = 143\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performance\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/performance.js\n ** module id = 144\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '0.14.3';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactVersion.js\n ** module id = 145\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n* @providesModule renderSubtreeIntoContainer\n*/\n\n'use strict';\n\nvar ReactMount = require('./ReactMount');\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/renderSubtreeIntoContainer.js\n ** module id = 146\n ** module chunks = 0 1\n **/","'use strict';\n\nmodule.exports = require('./lib/React');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/react.js\n ** module id = 147\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule React\n */\n\n'use strict';\n\nvar ReactDOM = require('./ReactDOM');\nvar ReactDOMServer = require('./ReactDOMServer');\nvar ReactIsomorphic = require('./ReactIsomorphic');\n\nvar assign = require('./Object.assign');\nvar deprecated = require('./deprecated');\n\n// `version` will be added here by ReactIsomorphic.\nvar React = {};\n\nassign(React, ReactIsomorphic);\n\nassign(React, {\n // ReactDOM\n findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),\n render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),\n unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),\n\n // ReactDOMServer\n renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),\n renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)\n});\n\nReact.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;\nReact.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/React.js\n ** module id = 148\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMServer\n */\n\n'use strict';\n\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactServerRendering = require('./ReactServerRendering');\nvar ReactVersion = require('./ReactVersion');\n\nReactDefaultInjection.inject();\n\nvar ReactDOMServer = {\n renderToString: ReactServerRendering.renderToString,\n renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\n version: ReactVersion\n};\n\nmodule.exports = ReactDOMServer;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMServer.js\n ** module id = 149\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n * @providesModule ReactServerRendering\n */\n'use strict';\n\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactElement = require('./ReactElement');\nvar ReactInstanceHandles = require('./ReactInstanceHandles');\nvar ReactMarkupChecksum = require('./ReactMarkupChecksum');\nvar ReactServerBatchingStrategy = require('./ReactServerBatchingStrategy');\nvar ReactServerRenderingTransaction = require('./ReactServerRenderingTransaction');\nvar ReactUpdates = require('./ReactUpdates');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar instantiateReactComponent = require('./instantiateReactComponent');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup\n */\nfunction renderToString(element) {\n !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n var transaction;\n try {\n ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n var id = ReactInstanceHandles.createReactRootID();\n transaction = ReactServerRenderingTransaction.getPooled(false);\n\n return transaction.perform(function () {\n var componentInstance = instantiateReactComponent(element, null);\n var markup = componentInstance.mountComponent(id, transaction, emptyObject);\n return ReactMarkupChecksum.addChecksumToMarkup(markup);\n }, null);\n } finally {\n ReactServerRenderingTransaction.release(transaction);\n // Revert to the DOM batching strategy since these two renderers\n // currently share these stateful modules.\n ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n }\n}\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup, without the extra React ID and checksum\n * (for generating static pages)\n */\nfunction renderToStaticMarkup(element) {\n !ReactElement.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n var transaction;\n try {\n ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n var id = ReactInstanceHandles.createReactRootID();\n transaction = ReactServerRenderingTransaction.getPooled(true);\n\n return transaction.perform(function () {\n var componentInstance = instantiateReactComponent(element, null);\n return componentInstance.mountComponent(id, transaction, emptyObject);\n }, null);\n } finally {\n ReactServerRenderingTransaction.release(transaction);\n // Revert to the DOM batching strategy since these two renderers\n // currently share these stateful modules.\n ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n }\n}\n\nmodule.exports = {\n renderToString: renderToString,\n renderToStaticMarkup: renderToStaticMarkup\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRendering.js\n ** module id = 150\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerBatchingStrategy\n * @typechecks\n */\n\n'use strict';\n\nvar ReactServerBatchingStrategy = {\n isBatchingUpdates: false,\n batchedUpdates: function (callback) {\n // Don't do anything here. During the server rendering we don't want to\n // schedule any updates. We will simply ignore them.\n }\n};\n\nmodule.exports = ReactServerBatchingStrategy;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerBatchingStrategy.js\n ** module id = 151\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRenderingTransaction\n * @typechecks\n */\n\n'use strict';\n\nvar PooledClass = require('./PooledClass');\nvar CallbackQueue = require('./CallbackQueue');\nvar Transaction = require('./Transaction');\n\nvar assign = require('./Object.assign');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\n\n/**\n * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks\n * during the performing of the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n /**\n * Initializes the internal `onDOMReady` queue.\n */\n initialize: function () {\n this.reactMountReady.reset();\n },\n\n close: emptyFunction\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n this.reinitializeTransaction();\n this.renderToStaticMarkup = renderToStaticMarkup;\n this.reactMountReady = CallbackQueue.getPooled(null);\n this.useCreateElement = false;\n}\n\nvar Mixin = {\n /**\n * @see Transaction\n * @abstract\n * @final\n * @return {array} Empty list of operation wrap procedures.\n */\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n /**\n * @return {object} The queue to collect `onDOMReady` callbacks with.\n */\n getReactMountReady: function () {\n return this.reactMountReady;\n },\n\n /**\n * `PooledClass` looks for this, and will invoke this before allowing this\n * instance to be reused.\n */\n destructor: function () {\n CallbackQueue.release(this.reactMountReady);\n this.reactMountReady = null;\n }\n};\n\nassign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactServerRenderingTransaction.js\n ** module id = 152\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactIsomorphic\n */\n\n'use strict';\n\nvar ReactChildren = require('./ReactChildren');\nvar ReactComponent = require('./ReactComponent');\nvar ReactClass = require('./ReactClass');\nvar ReactDOMFactories = require('./ReactDOMFactories');\nvar ReactElement = require('./ReactElement');\nvar ReactElementValidator = require('./ReactElementValidator');\nvar ReactPropTypes = require('./ReactPropTypes');\nvar ReactVersion = require('./ReactVersion');\n\nvar assign = require('./Object.assign');\nvar onlyChild = require('./onlyChild');\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (process.env.NODE_ENV !== 'production') {\n createElement = ReactElementValidator.createElement;\n createFactory = ReactElementValidator.createFactory;\n cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar React = {\n\n // Modern\n\n Children: {\n map: ReactChildren.map,\n forEach: ReactChildren.forEach,\n count: ReactChildren.count,\n toArray: ReactChildren.toArray,\n only: onlyChild\n },\n\n Component: ReactComponent,\n\n createElement: createElement,\n cloneElement: cloneElement,\n isValidElement: ReactElement.isValidElement,\n\n // Classic\n\n PropTypes: ReactPropTypes,\n createClass: ReactClass.createClass,\n createFactory: createFactory,\n createMixin: function (mixin) {\n // Currently a noop. Will be used to validate and trace mixins.\n return mixin;\n },\n\n // This looks DOM specific but these are actually isomorphic helpers\n // since they are just generating DOM strings.\n DOM: ReactDOMFactories,\n\n version: ReactVersion,\n\n // Hook for JSX spread, don't use this for anything else.\n __spread: assign\n};\n\nmodule.exports = React;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactIsomorphic.js\n ** module id = 153\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactElementValidator = require('./ReactElementValidator');\n\nvar mapObject = require('fbjs/lib/mapObject');\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @param {string} tag Tag name (e.g. `div`).\n * @private\n */\nfunction createDOMFactory(tag) {\n if (process.env.NODE_ENV !== 'production') {\n return ReactElementValidator.createFactory(tag);\n }\n return ReactElement.createFactory(tag);\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = mapObject({\n a: 'a',\n abbr: 'abbr',\n address: 'address',\n area: 'area',\n article: 'article',\n aside: 'aside',\n audio: 'audio',\n b: 'b',\n base: 'base',\n bdi: 'bdi',\n bdo: 'bdo',\n big: 'big',\n blockquote: 'blockquote',\n body: 'body',\n br: 'br',\n button: 'button',\n canvas: 'canvas',\n caption: 'caption',\n cite: 'cite',\n code: 'code',\n col: 'col',\n colgroup: 'colgroup',\n data: 'data',\n datalist: 'datalist',\n dd: 'dd',\n del: 'del',\n details: 'details',\n dfn: 'dfn',\n dialog: 'dialog',\n div: 'div',\n dl: 'dl',\n dt: 'dt',\n em: 'em',\n embed: 'embed',\n fieldset: 'fieldset',\n figcaption: 'figcaption',\n figure: 'figure',\n footer: 'footer',\n form: 'form',\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n head: 'head',\n header: 'header',\n hgroup: 'hgroup',\n hr: 'hr',\n html: 'html',\n i: 'i',\n iframe: 'iframe',\n img: 'img',\n input: 'input',\n ins: 'ins',\n kbd: 'kbd',\n keygen: 'keygen',\n label: 'label',\n legend: 'legend',\n li: 'li',\n link: 'link',\n main: 'main',\n map: 'map',\n mark: 'mark',\n menu: 'menu',\n menuitem: 'menuitem',\n meta: 'meta',\n meter: 'meter',\n nav: 'nav',\n noscript: 'noscript',\n object: 'object',\n ol: 'ol',\n optgroup: 'optgroup',\n option: 'option',\n output: 'output',\n p: 'p',\n param: 'param',\n picture: 'picture',\n pre: 'pre',\n progress: 'progress',\n q: 'q',\n rp: 'rp',\n rt: 'rt',\n ruby: 'ruby',\n s: 's',\n samp: 'samp',\n script: 'script',\n section: 'section',\n select: 'select',\n small: 'small',\n source: 'source',\n span: 'span',\n strong: 'strong',\n style: 'style',\n sub: 'sub',\n summary: 'summary',\n sup: 'sup',\n table: 'table',\n tbody: 'tbody',\n td: 'td',\n textarea: 'textarea',\n tfoot: 'tfoot',\n th: 'th',\n thead: 'thead',\n time: 'time',\n title: 'title',\n tr: 'tr',\n track: 'track',\n u: 'u',\n ul: 'ul',\n 'var': 'var',\n video: 'video',\n wbr: 'wbr',\n\n // SVG\n circle: 'circle',\n clipPath: 'clipPath',\n defs: 'defs',\n ellipse: 'ellipse',\n g: 'g',\n image: 'image',\n line: 'line',\n linearGradient: 'linearGradient',\n mask: 'mask',\n path: 'path',\n pattern: 'pattern',\n polygon: 'polygon',\n polyline: 'polyline',\n radialGradient: 'radialGradient',\n rect: 'rect',\n stop: 'stop',\n svg: 'svg',\n text: 'text',\n tspan: 'tspan'\n\n}, createDOMFactory);\n\nmodule.exports = ReactDOMFactories;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFactories.js\n ** module id = 154\n ** module chunks = 0 1\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n return ' Check the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nvar loggedTypeFailures = {};\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);\n if (addenda === null) {\n // we already showed the warning\n return;\n }\n process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined;\n}\n\n/**\n * Shared warning and monitoring code for the key warnings.\n *\n * @internal\n * @param {string} messageType A key used for de-duping warnings.\n * @param {ReactElement} element Component that requires a key.\n * @param {*} parentType element's parent's type.\n * @returns {?object} A set of addenda to use in the warning message, or null\n * if the warning has already been shown before (and shouldn't be shown again).\n */\nfunction getAddendaForKeyUse(messageType, element, parentType) {\n var addendum = getDeclarationErrorAddendum();\n if (!addendum) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n addendum = ' Check the top-level render call using <' + parentName + '>.';\n }\n }\n\n var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});\n if (memoizer[addendum]) {\n return null;\n }\n memoizer[addendum] = true;\n\n var addenda = {\n parentOrOwner: addendum,\n url: ' See https://fb.me/react-warning-keys for more information.',\n childOwner: null\n };\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n }\n\n return addenda;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (ReactElement.isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (ReactElement.isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n // Entry iterators provide implicit keys.\n if (iteratorFn) {\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n while (!(step = iterator.next()).done) {\n if (ReactElement.isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Assert that the props are valid\n *\n * @param {string} componentName Name of the component for error messages.\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\nfunction checkPropTypes(componentName, propTypes, props, location) {\n for (var propName in propTypes) {\n if (propTypes.hasOwnProperty(propName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n !(typeof propTypes[propName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n error = propTypes[propName](props, propName, componentName, location);\n } catch (ex) {\n error = ex;\n }\n process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined;\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var addendum = getDeclarationErrorAddendum();\n process.env.NODE_ENV !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined;\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var componentClass = element.type;\n if (typeof componentClass !== 'function') {\n return;\n }\n var name = componentClass.displayName || componentClass.name;\n if (componentClass.propTypes) {\n checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);\n }\n if (typeof componentClass.getDefaultProps === 'function') {\n process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined;\n }\n}\n\nvar ReactElementValidator = {\n\n createElement: function (type, props, children) {\n var validType = typeof type === 'string' || typeof type === 'function';\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n process.env.NODE_ENV !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined;\n\n var element = ReactElement.createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n validatePropTypes(element);\n\n return element;\n },\n\n createFactory: function (type) {\n var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n // Legacy hook TODO: Warn if this is accessed\n validatedFactory.type = type;\n\n if (process.env.NODE_ENV !== 'production') {\n if (canDefineProperty) {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined;\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n }\n\n return validatedFactory;\n },\n\n cloneElement: function (element, props, children) {\n var newElement = ReactElement.cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n }\n\n};\n\nmodule.exports = ReactElementValidator;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElementValidator.js\n ** module id = 155\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule mapObject\n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Executes the provided `callback` once for each enumerable own property in the\n * object and constructs a new object from the results. The `callback` is\n * invoked with three arguments:\n *\n * - the property value\n * - the property name\n * - the object being traversed\n *\n * Properties that are added after the call to `mapObject` will not be visited\n * by `callback`. If the values of existing properties are changed, the value\n * passed to `callback` will be the value at the time `mapObject` visits them.\n * Properties that are deleted before being visited are not visited.\n *\n * @grep function objectMap()\n * @grep function objMap()\n *\n * @param {?object} object\n * @param {function} callback\n * @param {*} context\n * @return {?object}\n */\nfunction mapObject(object, callback, context) {\n if (!object) {\n return null;\n }\n var result = {};\n for (var name in object) {\n if (hasOwnProperty.call(object, name)) {\n result[name] = callback.call(context, object[name], name, object);\n }\n }\n return result;\n}\n\nmodule.exports = mapObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/mapObject.js\n ** module id = 156\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection. The current implementation of this\n * function assumes that a single child gets passed without a wrapper, but the\n * purpose of this helper function is to abstract away the particular structure\n * of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactComponent} The first and only `ReactComponent` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined;\n return children;\n}\n\nmodule.exports = onlyChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/onlyChild.js\n ** module id = 157\n ** module chunks = 0 1\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule deprecated\n */\n\n'use strict';\n\nvar assign = require('./Object.assign');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * This will log a single deprecation notice per function and forward the call\n * on to the new API.\n *\n * @param {string} fnName The name of the function\n * @param {string} newModule The module that fn will exist in\n * @param {string} newPackage The module that fn will exist in\n * @param {*} ctx The context this forwarded call should run in\n * @param {function} fn The function to forward on to\n * @return {function} The function that will warn once and then call fn\n */\nfunction deprecated(fnName, newModule, newPackage, ctx, fn) {\n var warned = false;\n if (process.env.NODE_ENV !== 'production') {\n var newFn = function () {\n process.env.NODE_ENV !== 'production' ? warning(warned,\n // Require examples in this string must be split to prevent React's\n // build tools from mistaking them for real requires.\n // Otherwise the build tools will attempt to build a '%s' module.\n 'React.%s is deprecated. Please use %s.%s from require' + '(\\'%s\\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;\n warned = true;\n return fn.apply(ctx, arguments);\n };\n // We need to make sure all properties of the original fn are copied over.\n // In particular, this is needed to support PropTypes\n return assign(newFn, fn);\n }\n\n return fn;\n}\n\nmodule.exports = deprecated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/deprecated.js\n ** module id = 158\n ** module chunks = 0 1\n **/","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/underscore/underscore.js\n ** module id = 160\n ** module chunks = 0 1\n **/","import React from 'react';\nimport _ from 'underscore';\nimport Icon from './Icon';\nimport InputError from './InputError';\nimport PasswordValidator from './PasswordValidator';\nimport classNames from 'classnames/bind';\n\nlet cx = classNames.bind({});\n\nexport default class Input extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n valid: (this.props.isValid && this.props.isValid()) || true,\n empty: _.isEmpty(this.props.value),\n focus: false,\n value: null,\n iconsVisible: !this.props.validator,\n errorMessage: this.props.emptyMessage,\n validator: this.props.validator,\n validatorVisible: false,\n type: this.props.type,\n minCharacters: this.props.minCharacters,\n requireCapitals: this.props.requireCapitals,\n requireNumbers: this.props.requireNumbers,\n forbiddenWords: this.props.forbiddenWords,\n isValidatorValid: {\n minChars: false,\n capitalLetters: false,\n numbers: false,\n words: false,\n all: false\n },\n allValidatorValid: false\n };\n }\n\n handleChange = (event) => {\n this.setState({\n value: event.target.value,\n empty: _.isEmpty(event.target.value)\n });\n\n if (this.props.validator) {\n this.checkRules(event.target.value)\n };\n\n if (this.props.validate) {\n this.validateInput(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n\n validateInput = (value) => {\n // trigger custom validation method in the parent component\n if (this.props.validate && this.props.validate(value)){\n this.setState({\n valid: true,\n errorVisible: false\n });\n } else {\n this.setState({\n valid: false,\n errorMessage: !_.isEmpty(value) ? this.props.errorMessage : this.props.emptyMessage\n });\n }\n\n };\n\n componentWillReceiveProps = (newProps) => {\n // perform update only when new value exists and not empty\n if (newProps.value) {\n if(!_.isUndefined(newProps.value) && newProps.value.length > 0) {\n if (this.props.validate) {\n this.validateInput(newProps.value);\n }\n this.setState({\n value: newProps.value,\n empty: _.isEmpty(newProps.value)\n });\n }\n }\n };\n\n isValid() {\n if (this.props.validate) {\n if (_.isEmpty(this.state.value) || !this.props.validate(this.state.value)) {\n this.setState({\n valid: false,\n errorVisible: true\n });\n }\n }\n\n return this.state.valid;\n }\n\n handleFocus = (event) => {\n this.setState({\n focus: true,\n validatorVisible: true\n });\n\n if (this.props.validator) {\n this.setState({\n errorVisible: false\n });\n }\n }\n\n handleBlur = (event) => {\n this.setState({\n focus: false,\n errorVisible: !this.state.valid,\n validatorVisible: false\n });\n }\n\n mouseEnterError() {\n this.setState({\n errorVisible: true\n });\n }\n\n hideError() {\n this.setState({\n errorVisible: false,\n validatorVisible: false\n });\n }\n\n // validator function\n checkRules = (value) => {\n var validData = {\n minChars: !_.isEmpty(value) ? value.length >= parseInt(this.state.minCharacters): false,\n capitalLetters: !_.isEmpty(value) ? this.countCapitals(value): false,\n numbers: !_.isEmpty(value) ? this.countNumbers(value) > 0 : false,\n words: !_.isEmpty(value) ? !this.checkWords(value) : false\n };\n var allValid = (validData.minChars && validData.capitalLetters && validData.numbers && validData.words);\n\n this.setState({\n isValidatorValid: validData,\n allValidatorValid: allValid,\n valid: allValid\n });\n };\n\n countCapitals = (value) => {\n return value.replace(/[^A-Z]/g, \"\").length;\n };\n\n countNumbers = (value) => {\n return /\\d/.test(value);\n };\n\n checkWords = (value) => {\n return _.some(this.state.forbiddenWords, function (word) {\n var matched = (word === value) ? true : \"\";\n return matched\n });\n };\n\n render() {\n\n var inputGroupClasses = cx({\n 'input_group': true,\n 'input_valid': this.state.valid,\n 'input_error': !this.state.valid,\n 'input_empty': this.state.empty,\n 'input_hasValue': !this.state.empty,\n 'input_focused': this.state.focus,\n 'input_unfocused': !this.state.focus\n });\n\n var validator;\n\n if (this.state.validator) {\n validator =\n <PasswordValidator\n ref=\"passwordValidator\"\n visible={this.state.validatorVisible}\n name={this.props.text}\n value={this.state.value}\n validData={this.state.isValidatorValid}\n valid={this.state.allValidatorValid}\n forbiddenWords={this.state.forbiddenWords}\n minCharacters={this.props.minCharacters}\n requireCapitals={this.props.requireCapitals}\n requireNumbers={this.props.requireNumbers}\n />\n };\n\n return (\n <div className={inputGroupClasses}>\n\n <label className=\"input_label\" htmlFor={this.props.text}>\n <span className=\"label_text\">{this.props.text}</span>\n </label>\n\n <input\n {...this.props}\n placeholder={this.props.placeholder}\n className=\"input\"\n id={this.props.text}\n defaultValue={this.props.defaultValue}\n value={this.state.value}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n autoComplete=\"off\"\n />\n\n <InputError\n visible={this.state.errorVisible}\n errorMessage={this.state.errorMessage}\n />\n\n <div className=\"validationIcons\">\n <i className=\"input_error_icon\" onMouseEnter={this.mouseEnterError}> <Icon type=\"circle_error\"/> </i>\n <i className=\"input_valid_icon\"> <Icon type=\"circle_tick\"/> </i>\n </div>\n\n {validator}\n\n </div>\n );\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/Input.jsx\n **/","import React from 'react';\n\nexport default class Icon extends React.Component {\n\n render() {\n switch(this.props.type) {\n\n case 'circle_error':\n return (\n <svg viewBox=\"0 0 20 20\">\n <path d=\"M10,0.982c4.973,0,9.018,4.046,9.018,9.018S14.973,19.018,10,19.018S0.982,14.973,0.982,10\n S5.027,0.982,10,0.982 M10,0C4.477,0,0,4.477,0,10c0,5.523,4.477,10,10,10s10-4.477,10-10C20,4.477,15.523,0,10,0L10,0z M9,5.703\n V5.441h2.5v0.262l-0.66,5.779H9.66L9,5.703z M9.44,12.951h1.621v1.491H9.44V12.951z\"/>\n </svg>\n )\n\n case 'circle_tick':\n return (\n <svg viewBox=\"0 0 23 23\">\n <path d=\"M11.5,23C5.2,23,0,17.8,0,11.5S5.2,0,11.5,0S23,5.2,23,11.5S17.8,23,11.5,23z M11.5,1C5.7,1,1,5.7,1,11.5S5.7,22,11.5,22\n S22,17.3,22,11.5S17.3,1,11.5,1z M10.4,15.2l6.7-7c0.2-0.2,0.2-0.5,0-0.7c-0.2-0.2-0.5-0.2-0.7,0L10,14.2L7,11\n c-0.2-0.2-0.5-0.2-0.7,0c-0.2,0.2-0.2,0.5,0,0.7l3.4,3.5c0.1,0.1,0.2,0.1,0.3,0.1S10.3,15.3,10.4,15.2z\"/>\n </svg>\n )\n\n case 'circle_tick_filled':\n return (\n <svg viewBox=\"0 0 20 20\">\n <path fill=\"#4FB07F\" d=\"M9.5,0C14.7,0,19,4.3,19,9.5S14.7,19,9.5,19S0,14.7,0,9.5S4.3,0,9.5,0z\"/>\n <path fill=\"#FFFFFF\" d=\"M8.7,12.9c-0.1,0-0.2,0-0.3-0.1l-2.4-2.5c-0.1-0.1-0.1-0.4,0-0.5c0.1-0.2,0.4-0.2,0.5,0L8.7,12l4.6-5\n c0.1-0.1,0.4-0.1,0.5,0c0.1,0.2,0.1,0.4,0,0.5L9,12.8C9,12.8,8.9,12.9,8.7,12.9C8.8,12.9,8.8,12.9,8.7,12.9z\"/>\n </svg>\n )\n\n case 'guthub':\n return (\n <svg viewBox=\"0 0 34 34\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#191717\" d=\"M32.6,16.3c0,7.2-4.7,13.3-11.1,15.5c-0.8,0.2-1.1-0.3-1.1-0.8\n c0-0.5,0-2.3,0-4.5c0-1.5-0.5-2.5-1.1-3c3.6-0.4,7.4-1.8,7.4-8c0-1.8-0.6-3.2-1.7-4.4c0.2-0.4,0.7-2.1-0.2-4.3c0,0-1.4-0.4-4.5,1.7\n c-1.3-0.4-2.7-0.5-4.1-0.5c-1.4,0-2.8,0.2-4.1,0.5C9.1,6.3,7.7,6.8,7.7,6.8C6.8,9,7.4,10.7,7.6,11.1c-1,1.1-1.7,2.6-1.7,4.4\n c0,6.2,3.8,7.6,7.4,8.1c-0.5,0.4-0.9,1.1-1,2.2c-0.9,0.4-3.3,1.1-4.7-1.4c0,0-0.9-1.6-2.5-1.7c0,0-1.6,0-0.1,1c0,0,1.1,0.5,1.8,2.4\n c0,0,1,3.2,5.5,2.2c0,1.4,0,2.4,0,2.8c0,0.4-0.3,0.9-1.1,0.8C4.7,29.6,0,23.5,0,16.3C0,7.3,7.3,0,16.3,0C25.3,0,32.6,7.3,32.6,16.3z\n \"/>\n </svg>\n )\n }\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/Icon.jsx\n **/","import React from 'react';\nimport _ from 'underscore';\nimport classNames from 'classnames/bind';\n\nlet cx = classNames.bind({});\n\nexport default class InputError extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n message: 'Input is invalid'\n };\n }\n\n render() {\n var errorClass = cx({\n 'error_container': true,\n 'visible': this.props.visible,\n 'invisible': !this.props.visible\n });\n\n return (\n <div className={errorClass}>\n <span>{this.props.errorMessage}</span>\n </div>\n )\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/InputError.jsx\n **/","/*!\n Copyright (c) 2015 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses += ' ' + (this && this[arg] || arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses += ' ' + classNames.apply(this, arg);\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses += ' ' + (this && this[key] || key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.substr(1);\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/classnames/bind.js\n ** module id = 165\n ** module chunks = 0 1\n **/","import React from 'react';\nimport _ from 'underscore';\nimport Icon from './Icon';\nimport classNames from 'classnames/bind';\n\nlet cx = classNames.bind({});\n\nexport default class PasswordValidator extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n value: null,\n minCharacters: this.props.minCharacters,\n requireCapitals: this.props.requireCapitals,\n requireNumbers: this.props.requireNumbers,\n forbiddenWords: this.props.forbiddenWords,\n name: this.props.name\n }\n }\n\n render() {\n var validatorClass = cx({\n 'password_validator': true,\n 'visible': this.props.visible,\n 'invisible': !this.props.visible\n });\n\n var forbiddenWords = this.state.forbiddenWords.map(function(word, i) {\n return (\n <span key={i} className=\"bad_word\">\n \"{word}\"\n </span>\n )\n });\n\n var validatorTitle;\n\n if (this.props.valid) {\n validatorTitle =\n <h4 className=\"validator_title valid\">\n {this.props.name} IS OK\n </h4>\n } else {\n validatorTitle =\n <h4 className=\"validator_title invalid\">\n {this.props.name} RULES\n </h4>\n }\n\n return (\n <div className={validatorClass}>\n <div className=\"validator_container\">\n {validatorTitle}\n <ul className=\"rules_list\">\n <li className={cx({'valid': this.props.validData.minChars})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">{this.state.minCharacters} characters minimum</span>\n </li>\n\n <li className={cx({'valid': this.props.validData.capitalLetters})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">Contains at least {this.state.requireCapitals} capital letter</span>\n </li>\n\n <li className={cx({'valid': this.props.validData.numbers})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">Contains at least {this.state.requireNumbers} number</span>\n </li>\n\n <li className={cx({'valid': this.props.validData.words})}>\n <i className=\"icon_valid\"> <Icon type=\"circle_tick_filled\"/> </i>\n <i className=\"icon_invalid\"> <Icon type=\"circle_error\"/> </i>\n <span className=\"error_message\">Can't be {forbiddenWords}</span>\n </li>\n </ul>\n </div>\n </div>\n )\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/PasswordValidator.jsx\n **/","export function getQueryVariable(variable)\n{\n var query = window.location.search.substring(1);\n var vars = query.split(\"&\");\n for (var i=0;i<vars.length;i++) {\n var pair = vars[i].split(\"=\");\n if(pair[0] == variable){return pair[1];}\n }\n return '/';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/components/Utils.jsx\n **/","import React from 'react';\nimport _ from 'underscore';\nimport $ from 'jquery';\nimport Input from './components/Input';\nimport Icon from './components/Icon';\nimport InputError from './components/InputError';\nimport {getQueryVariable} from './components/Utils';\n\nexport class RegisterComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n email: null,\n password: null,\n confirmPassword: null,\n forbiddenWords: [\"password\", \"user\", \"username\"],\n errorVisible: false,\n errorMessage: '注册失败, 请联系管理员'\n };\n }\n\n handlePasswordInput = (event) => {\n if (!_.isEmpty(this.state.confirmPassword)) {\n this.refs.passwordConfirm.isValid();\n };\n this.refs.passwordConfirm.hideError();\n this.setState({\n password: event.target.value\n });\n }\n\n handleConfirmPasswordInput = (event) => {\n this.setState({\n confirmPassword: event.target.value\n });\n };\n\n saveAndContinue = (event) => {\n event.preventDefault();\n\n var canProceed = this.validateEmail(this.state.email)\n && this.refs.password.isValid()\n && this.refs.passwordConfirm.isValid();\n\n if (canProceed) {\n let data = {\n email: this.state.email,\n password: this.state.password\n }, self = this, visible;\n\n\n $.post('/register/', data).done(function(result) {\n let res = JSON.parse(result);\n if (res.r) {\n self.setState({\n errorVisible: true,\n errorMessage: res.message\n });\n } else {\n let next = decodeURIComponent(getQueryVariable('continue'));\n window.location = next;\n }\n });\n } else {\n this.refs.email.isValid();\n this.refs.password.isValid();\n this.refs.passwordConfirm.isValid();\n }\n };\n\n isConfirmedPassword = (event) => {\n return (event == this.state.password);\n };\n\n handleEmailInput = (event) => {\n this.setState({\n email: event.target.value\n });\n };\n\n validateEmail = (event) => {\n // from http://stackoverflow.com/questions/46155/validate-email-address-in-javascript\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(event);\n };\n\n isEmpty = (value) => {\n return !_.isEmpty(value);\n };\n\n updateStatesValue = (value) => {\n this.setState({\n statesValue: value\n });\n };\n\n render() {\n return (\n <div className=\"create_account_screen\">\n <div className=\"create_account_form\">\n <h1>创建新用户</h1>\n <p>开启CODE之旅.</p>\n <form onSubmit={this.saveAndContinue}>\n\n <Input\n text=\"邮箱地址\"\n ref=\"email\"\n type=\"text\"\n defaultValue={this.state.email}\n validate={this.validateEmail}\n value={this.state.email}\n onChange={this.handleEmailInput}\n errorMessage=\"Email格式错误\"\n emptyMessage=\"Email不能为空\"\n errorVisible={this.state.showEmailError}\n />\n\n <Input\n text=\"密码\"\n type=\"password\"\n ref=\"password\"\n validator=\"true\"\n minCharacters=\"8\"\n requireCapitals=\"1\"\n requireNumbers=\"1\"\n forbiddenWords={this.state.forbiddenWords}\n value={this.state.passsword}\n emptyMessage=\"密码输入错误\"\n onChange={this.handlePasswordInput}\n />\n\n <Input\n text=\"确认密码\"\n ref=\"passwordConfirm\"\n type=\"password\"\n validate={this.isConfirmedPassword}\n value={this.state.confirmPassword}\n onChange={this.handleConfirmPasswordInput}\n emptyMessage=\"密码为必选\"\n errorMessage=\"2次输入的密码不相同, 请确认\"\n />\n\n <InputError\n visible={this.state.errorVisible}\n errorMessage={this.state.errorMessage}\n />\n\n <button\n type=\"submit\"\n className=\"button button_wide\">\n 创建\n </button>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport default class Register extends React.Component {\n render() {\n return (\n <div className=\"application_wrapper\">\n <div className=\"application_routeHandler\">\n <RegisterComponent/>\n </div>\n </div>\n );\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./hub/static/jsx/signup.jsx\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js/mod/vendors.js b/dist/js/mod/vendors.js new file mode 100644 index 0000000..7efaf2d --- /dev/null +++ b/dist/js/mod/vendors.js @@ -0,0 +1,9325 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // install a JSONP callback for chunk loading +/******/ var parentJsonpFunction = window["webpackJsonp"]; +/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) { +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0, callbacks = []; +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(installedChunks[chunkId]) +/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]); +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ for(moduleId in moreModules) { +/******/ modules[moduleId] = moreModules[moduleId]; +/******/ } +/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules); +/******/ while(callbacks.length) +/******/ callbacks.shift().call(null, __webpack_require__); +/******/ if(moreModules[0]) { +/******/ installedModules[0] = 0; +/******/ return __webpack_require__(0); +/******/ } +/******/ }; +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // "0" means "already loaded" +/******/ // Array means "loading", array contains callbacks +/******/ var installedChunks = { +/******/ 2:0 +/******/ }; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) { +/******/ // "0" is the signal for "already loaded" +/******/ if(installedChunks[chunkId] === 0) +/******/ return callback.call(null, __webpack_require__); +/******/ +/******/ // an array means "currently loading". +/******/ if(installedChunks[chunkId] !== undefined) { +/******/ installedChunks[chunkId].push(callback); +/******/ } else { +/******/ // start chunk loading +/******/ installedChunks[chunkId] = [callback]; +/******/ var head = document.getElementsByTagName('head')[0]; +/******/ var script = document.createElement('script'); +/******/ script.type = 'text/javascript'; +/******/ script.charset = 'utf-8'; +/******/ script.async = true; +/******/ +/******/ script.src = __webpack_require__.p + "" + chunkId + "." + ({"0":"login","1":"register"}[chunkId]||chunkId) + ".js"; +/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/home/vagrant/code/dist/js/mod"; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(161); + + +/***/ }, + +/***/ 161: +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v2.1.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-04-28T16:01Z + */ + + (function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Support: Firefox 18+ + // Can't be in strict mode, several libs including ASP.NET trace + // the stack via arguments.caller.callee and Firefox dies if + // you try to trace through "use strict" call chains. (#13335) + // + + var arr = []; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var support = {}; + + + + var + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + version = "2.1.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + + jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isPlainObject: function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf("use strict") === 1 ) { + script = document.createElement("script"); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + }); + + // Populate the class2type map + jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + }); + + function isArraylike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.2.0-pre + * http://sizzlejs.com/ + * + * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-16 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + nodeType = context.nodeType; + + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + if ( !seed && documentIsHTML ) { + + // Try to shortcut find operations when possible (e.g., not under DocumentFragment) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType !== 1 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ + function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + parent = doc.defaultView; + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Support tests + ---------------------------------------------------------------------- */ + documentIsHTML = !isXML( doc ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\f]' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( div ) { + div.innerHTML = "<input/>"; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[":"] = jQuery.expr.pseudos; + jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + + + var rneedsContext = jQuery.expr.match.needsContext; + + var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + + var risSimple = /^.[^:#\[\.,]*$/; + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; + }); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); + }; + + jQuery.fn.extend({ + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + }); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + // Inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }, + + sibling: function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + } + }); + + jQuery.fn.extend({ + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter(function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } + }); + + function sibling( cur, dir ) { + while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.unique( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + }); + var rnotwhite = (/\S+/g); + + + + // String to Object options format cache + var optionsCache = {}; + + // Convert String-formatted options into Object-formatted ones and store in cache + function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } + }); + + + // The deferred used on DOM ready + var readyList; + + jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }; + + jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } + }); + + /** + * The ready event handler and self cleanup method + */ + function completed() { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + jQuery.ready(); + } + + jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // We once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + } + } + return readyList.promise( obj ); + }; + + // Kick off the DOM ready check even if the user does not + jQuery.ready.promise(); + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[0], key ) : emptyGet; + }; + + + /** + * Determines whether an object can have data + */ + jQuery.acceptData = function( owner ) { + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + function Data() { + // Support: Android<4, + // Old WebKit does not have Object.preventExtensions/freeze method, + // return new empty object instead with no [[set]] accessor + Object.defineProperty( this.cache = {}, 0, { + get: function() { + return {}; + } + }); + + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + Data.accepts = jQuery.acceptData; + + Data.prototype = { + key: function( owner ) { + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return the key for a frozen object. + if ( !Data.accepts( owner ) ) { + return 0; + } + + var descriptor = {}, + // Check if the owner object already has a cache key + unlock = owner[ this.expando ]; + + // If not, create one + if ( !unlock ) { + unlock = Data.uid++; + + // Secure it in a non-enumerable, non-writable property + try { + descriptor[ this.expando ] = { value: unlock }; + Object.defineProperties( owner, descriptor ); + + // Support: Android<4 + // Fallback to a less secure definition + } catch ( e ) { + descriptor[ this.expando ] = unlock; + jQuery.extend( owner, descriptor ); + } + } + + // Ensure the cache object + if ( !this.cache[ unlock ] ) { + this.cache[ unlock ] = {}; + } + + return unlock; + }, + set: function( owner, data, value ) { + var prop, + // There may be an unlock assigned to this node, + // if there is no entry for this "owner", create one inline + // and set the unlock as though an owner entry had always existed + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + // Fresh assignments by object are shallow copied + if ( jQuery.isEmptyObject( cache ) ) { + jQuery.extend( this.cache[ unlock ], data ); + // Otherwise, copy the properties one-by-one to the cache object + } else { + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + } + return cache; + }, + get: function( owner, key ) { + // Either a valid cache is found, or will be created. + // New caches will be created and the unlock returned, + // allowing direct access to the newly created + // empty data object. A valid owner object must be provided. + var cache = this.cache[ this.key( owner ) ]; + + return key === undefined ? + cache : cache[ key ]; + }, + access: function( owner, key, value ) { + var stored; + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ((key && typeof key === "string") && value === undefined) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase(key) ); + } + + // [*]When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + if ( key === undefined ) { + this.cache[ unlock ] = {}; + + } else { + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + }, + hasData: function( owner ) { + return !jQuery.isEmptyObject( + this.cache[ owner[ this.expando ] ] || {} + ); + }, + discard: function( owner ) { + if ( owner[ this.expando ] ) { + delete this.cache[ owner[ this.expando ] ]; + } + } + }; + var data_priv = new Data(); + + var data_user = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + data_user.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend({ + hasData: function( elem ) { + return data_user.hasData( elem ) || data_priv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return data_user.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + data_user.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to data_priv methods, these can be deprecated. + _data: function( elem, name, data ) { + return data_priv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + data_priv.remove( elem, name ); + } + }); + + jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = data_user.get( elem ); + + if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + data_priv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + data_user.set( this, key ); + }); + } + + return access( this, function( value ) { + var data, + camelKey = jQuery.camelCase( key ); + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + // Attempt to get data from the cache + // with the key as-is + data = data_user.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to get data from the cache + // with the key camelized + data = data_user.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each(function() { + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = data_user.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + data_user.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf("-") !== -1 && data !== undefined ) { + data_user.set( this, key, value ); + } + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + data_user.remove( this, key ); + }); + } + }); + + + jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = data_priv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = data_priv.access( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return data_priv.get( elem, key ) || data_priv.access( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + data_priv.remove( elem, [ type + "queue", key ] ); + }) + }); + } + }); + + jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = data_priv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + }); + var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + var rcheckableType = (/^(?:checkbox|radio)$/i); + + + + (function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + })(); + var strundefined = typeof undefined; + + + + support.focusinBubbles = "onfocusin" in window; + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.hasData( elem ) && data_priv.get( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + data_priv.remove( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + }; + + jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && e.preventDefault ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && e.stopPropagation ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + // Support: Chrome 15+ + jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + }); + + // Support: Firefox, Chrome, Safari + // Create "bubbling" focus and blur events + if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + data_priv.remove( doc, fix ); + + } else { + data_priv.access( doc, fix, attaches ); + } + } + }; + }); + } + + jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + }); + + + var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + + // Support: IE9 + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] + }; + + // Support: IE9 + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + // Support: 1.x compatibility + // Manipulating tables requires a tbody + function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute("type"); + } + + return elem; + } + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + data_priv.set( + elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) + ); + } + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( data_priv.hasData( src ) ) { + pdataOld = data_priv.access( src ); + pdataCur = data_priv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( data_user.hasData( src ) ) { + udataOld = data_user.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + data_user.set( dest, udataCur ); + } + } + + function getAll( context, tag ) { + var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : + context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + }, + + cleanData: function( elems ) { + var data, elem, type, key, + special = jQuery.event.special, + i = 0; + + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + if ( jQuery.acceptData( elem ) ) { + key = elem[ data_priv.expando ]; + + if ( key && (data = data_priv.cache[ key ]) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + if ( data_priv.cache[ key ] ) { + // Discard any remaining `private` data + delete data_priv.cache[ key ]; + } + } + } + // Discard any remaining `user` data + delete data_user.cache[ elem[ data_user.expando ] ]; + } + } + }); + + jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each(function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + }); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + // Support: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return this; + } + }); + + jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + }); + + + var iframe, + elemdisplay = {}; + + /** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + // Called only from within defaultDisplay + function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optimization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; + } + + /** + * Try to determine the default display value of an element + * @param {String} nodeName + */ + function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; + } + var rmargin = (/^margin/); + + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + if ( elem.ownerDocument.defaultView.opener ) { + return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); + } + + return window.getComputedStyle( elem, null ); + }; + + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + } + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: iOS < 6 + // A tribute to the "awesome hack by Dean Edwards" + // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + // Support: IE + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return (this.get = hookFn).apply( this, arguments ); + } + }; + } + + + (function() { + var pixelPositionVal, boxSizingReliableVal, + docElem = document.documentElement, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + + "position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computePixelPositionAndBoxSizingReliable() { + div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + + "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + + "border:1px;padding:1px;width:4px;position:absolute"; + div.innerHTML = ""; + docElem.appendChild( container ); + + var divStyle = window.getComputedStyle( div, null ); + pixelPositionVal = divStyle.top !== "1%"; + boxSizingReliableVal = divStyle.width === "4px"; + + docElem.removeChild( container ); + } + + // Support: node.js jsdom + // Don't assume that getComputedStyle is a property of the global object + if ( window.getComputedStyle ) { + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computePixelPositionAndBoxSizingReliable(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computePixelPositionAndBoxSizingReliable(); + } + return boxSizingReliableVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + docElem.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); + + docElem.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + }); + } + })(); + + + // A method for quickly swapping in/out CSS properties to get correct calculations. + jQuery.swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + var + // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( style, name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[0].toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; + } + + function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; + } + + function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; + } + + function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; + } + + function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = data_priv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; + } + + jQuery.extend({ + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + style[ name ] = value; + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } + }); + + jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? + jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var styles = extra && getStyles( elem ); + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; + }); + + // Support: Android 2.3 + jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return jQuery.swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each({ + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + }); + + jQuery.fn.extend({ + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } + }); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE9 + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + } + }; + + jQuery.fx = Tween.prototype.init; + + // Back Compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ), + target = tween.cur(), + parts = rfxnum.exec( value ), + unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && + rfxnum.exec( jQuery.css( tween.elem, prop ) ), + scale = 1, + maxIterations = 20; + + if ( start && start[ 3 ] !== unit ) { + // Trust units reported by jQuery.css + unit = unit || start[ 3 ]; + + // Make sure we update the tween properties later on + parts = parts || []; + + // Iteratively approximate from a nonzero starting point + start = +target || 1; + + do { + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur(), + // break the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + // Update tween properties + if ( parts ) { + start = tween.start = +start || +target || 0; + tween.unit = unit; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[ 1 ] ? + start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : + +parts[ 2 ]; + } + + return tween; + } ] + }; + + // Animations created synchronously will run synchronously + function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( (tween = collection[ index ].call( animation, prop, value )) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = data_priv.get( elem, "fxshow" ); + + // Handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // Ensure the complete handler is called before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = data_priv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + + data_priv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( prop in orig ) { + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { + style.display = display; + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // Don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + } + + jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } + }); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || data_priv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = data_priv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each(function() { + var index, + data = data_priv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + }); + } + }); + + jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + }); + + // Generate shortcuts for custom animations + jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + }); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } + }; + + jQuery.fx.interval = 13; + + jQuery.fx.start = function() { + if ( !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } + }; + + jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }; + + + (function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + })(); + + + var nodeHook, boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend({ + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + } + }); + + jQuery.extend({ + attr: function( elem, name, value ) { + var hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + } + }); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; + }); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i; + + jQuery.fn.extend({ + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each(function() { + delete this[ jQuery.propFix[ name ] || name ]; + }); + } + }); + + jQuery.extend({ + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? + elem.tabIndex : + -1; + } + } + } + }); + + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + } + }; + } + + jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + }); + + + + + var rclass = /[\t\r\n\f]/g; + + jQuery.fn.extend({ + addClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = arguments.length === 0 || typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = value ? jQuery.trim( cur ) : ""; + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // Toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + data_priv.set( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + } + }); + + + + + var rreturn = /\r/g; + + jQuery.fn.extend({ + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // Handle most common string cases + ret.replace(rreturn, "") : + // Handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } + }); + + jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + jQuery.trim( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE6-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + }); + + // Radios and checkboxes getter/setter + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } + }); + + + + + // Return jQuery for attributes-only inclusion + + + jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + }); + + jQuery.fn.extend({ + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + } + }); + + + var nonce = jQuery.now(); + + var rquery = (/\?/); + + + + // Support: Android 2.3 + // Workaround failure to string-cast null input + jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); + }; + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + tmp = new DOMParser(); + xml = tmp.parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Document location + ajaxLocation = window.location.href, + + // Segment location into parts + ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + while ( (dataType = dataTypes[i++]) ) { + // Prepend if requested + if ( dataType[0] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + + // Otherwise append + } else { + (structure[ dataType ] = structure[ dataType ] || []).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + }); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s[ "throws" ] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: ajaxLocation, + type: "GET", + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + // URL without anti-cache param + cacheURL, + // Response headers + responseHeadersString, + responseHeaders, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( (match = rheaders.exec( responseHeadersString )) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) + .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger("ajaxStart"); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader("etag"); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + }); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; + }); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + }; + + + jQuery.fn.extend({ + wrapAll: function( html ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapAll( html.call(this, i) ); + }); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } + }); + + + jQuery.expr.filters.hidden = function( elem ) { + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; + }; + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; + + + + + var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // Item is non-scalar (array or object), encode its numeric index. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + }; + + jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function() { + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + }) + .filter(function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + }) + .map(function( i, elem ) { + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } + }); + + + jQuery.ajaxSettings.xhr = function() { + try { + return new XMLHttpRequest(); + } catch( e ) {} + }; + + var xhrId = 0, + xhrCallbacks = {}, + xhrSuccessStatus = { + // file protocol always yields status code 0, assume 200 + 0: 200, + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + // Support: IE9 + // Open requests must be manually aborted on unload (#5280) + // See https://support.microsoft.com/kb/2856746 for more info + if ( window.attachEvent ) { + window.attachEvent( "onunload", function() { + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ](); + } + }); + } + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport(function( options ) { + var callback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(), + id = ++xhrId; + + xhr.open( options.type, options.url, options.async, options.username, options.password ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers["X-Requested-With"] ) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + delete xhrCallbacks[ id ]; + callback = xhr.onload = xhr.onerror = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + complete( + // file: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + // Support: IE9 + // Accessing binary-data responseText throws an exception + // (#11426) + typeof xhr.responseText === "string" ? { + text: xhr.responseText + } : undefined, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + xhr.onerror = callback("error"); + + // Create the abort callback + callback = xhrCallbacks[ id ] = callback("abort"); + + try { + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + }); + + + + + // Install script dataType + jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /(?:java|ecma)script/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + }); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + }); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery("<script>").prop({ + async: true, + charset: s.scriptCharset, + src: s.url + }).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + }); + + + + + var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + + // Default jsonp settings + jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } + }); + + // Detect, normalize options and install callbacks for jsonp requests + jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } + }); + + + + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + jQuery.parseHTML = function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); + }; + + + // Keep a copy of the old load method + var _load = jQuery.fn.load; + + /** + * Load a url into a page + */ + jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + }).complete( callback && function( jqXHR, status ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + } + + return this; + }; + + + + + // Attach a bunch of functions for handling common AJAX events + jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; + }); + + + + + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; + + + + + var docElem = window.document.documentElement; + + /** + * Gets a window from an element + */ + function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } + }; + + jQuery.fn.extend({ + offset: function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, win, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // Support: BlackBerry 5, iOS 3 (original iPhone) + // If we don't have gBCR, just use 0,0 rather than error + if ( typeof elem.getBoundingClientRect !== strundefined ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || docElem; + + while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || docElem; + }); + } + }); + + // Create scrollLeft and scrollTop methods + jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : window.pageXOffset, + top ? val : window.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; + }); + + // Support: Safari<7+, Chrome<37+ + // Add the top/left cssHooks using jQuery.fn.position + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 + // getComputedStyle returns percent when specified for top/left/bottom/right; + // rather than make the css module depend on the offset module, just check for it here + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); + }); + + + // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods + jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); + }); + + + // The number of elements contained in the matched element set + jQuery.fn.size = function() { + return this.length; + }; + + jQuery.fn.andSelf = jQuery.fn.addBack; + + + + + // Register as a named AMD module, since jQuery can be concatenated with other + // files that may use define, but not via a proper concatenation script that + // understands anonymous AMD modules. A named AMD is safest and most robust + // way to register. Lowercase jquery is used because AMD module names are + // derived from file names, and jQuery is normally delivered in a lowercase + // file name. Do this after creating the global so that if an AMD module wants + // to call noConflict to hide this version of jQuery, it will work. + + // Note that for maximum portability, libraries that are not jQuery should + // declare themselves as anonymous modules, and avoid setting a global if an + // AMD loader is present. jQuery is a special case. For more information, see + // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + + if ( true ) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + return jQuery; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + + + + + var + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + + jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + + // Expose jQuery and $ identifiers, even in AMD + // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) + // and CommonJS for browser emulators (#13566) + if ( typeof noGlobal === strundefined ) { + window.jQuery = window.$ = jQuery; + } + + + + + return jQuery; + + })); + + +/***/ } + +/******/ }); +//# sourceMappingURL=vendors.js.map \ No newline at end of file diff --git a/dist/js/mod/vendors.js.map b/dist/js/mod/vendors.js.map new file mode 100644 index 0000000..e0e89c2 --- /dev/null +++ b/dist/js/mod/vendors.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap 6467d73593f3d2df80b2","webpack:///./~/jquery/dist/jquery.js"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wEAAgE,2BAA2B;AAC3F;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,YAAY;AACvB;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,YAAW,YAAY;AACvB;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iEAAgE;AAChE;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO,yEAAyE;AAChF;;AAEA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAmD;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;AAC3D;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,UAAS,GAAG;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,wBAAuB,wBAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,iDAAgD;AAChD,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU,oCAAoC;AAC9C;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,QAAO;AACP,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,wCAAuC;AACvC;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;;;;AAIA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mDAAkD;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+DAA8D;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,+BAA+B;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAsB,wDAAwD;AAC9E;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,eAAc,qCAAqC;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,mCAAmC;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,2BAA2B;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,0BAA0B;AACnC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,QAAQ,SAAS,MAAM,aAAa,eAAe;AACxF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC,2BAA2B;AAC7D,2BAA0B,cAAc,cAAc,OAAO;AAC7D,gBAAe,YAAY,UAAU;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA6B,SAAS,QAAQ,QAAQ;AACtD;AACA;AACA;AACA,sCAAqC,4BAA4B;AACjE,8BAA6B,cAAc,SAAS,SAAS;AAC7D;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,mDAAkD;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B,gCAA+B,kBAAkB,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,cAAc;AACjC,GAAE;AACF;AACA;AACA;AACA;AACA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA;;AAEA,IAAG;AACH;;AAEA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAuD;AACvD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA,uBAAsB;AACtB,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oFAAmF;AACnF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA;AACA,IAAG;;AAEH,GAAE;AACF;AACA;AACA;AACA;;AAEA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;AACR;AACA,mDAAkD;AAClD;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;AACA;;AAEA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;;AAEA,EAAC","file":"vendors.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t2:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".\" + ({\"0\":\"login\",\"1\":\"register\"}[chunkId]||chunkId) + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/home/vagrant/code/dist/js/mod\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 6467d73593f3d2df80b2\n **/","/*!\n * jQuery JavaScript Library v2.1.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-04-28T16:01Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\treturn !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.0-pre\n * http://sizzlejs.com/\n *\n * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-12-16\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\tnodeType = context.nodeType;\n\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\tif ( !seed && documentIsHTML ) {\n\n\t\t// Try to shortcut find operations when possible (e.g., not under DocumentFragment)\n\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType !== 1 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\tparent = doc.defaultView;\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Support tests\n\t---------------------------------------------------------------------- */\n\tdocumentIsHTML = !isXML( doc );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\f]' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// We once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android<4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android<4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Support: Firefox, Chrome, Safari\n// Create \"bubbling\" focus and blur events\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit, PhantomJS\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optimization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tif ( elem.ownerDocument.defaultView.opener ) {\n\t\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t\t}\n\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\t\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// Swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur(),\n\t\t\t\t// break the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// Toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = window.location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// Support: BlackBerry 5, iOS 3 (original iPhone)\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Support: Safari<7+, Chrome<37+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 161\n ** module chunks = 2\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/docker-common.yml b/docker-common.yml new file mode 100644 index 0000000..a8fe992 --- /dev/null +++ b/docker-common.yml @@ -0,0 +1,14 @@ +code: + volumes: + - .:/code + working_dir: /code + env_file: + - ./code.env + - ./code.local.env + +node: + build: ./dockerfiles/node + working_dir: /code + env_file: + - ./code.env + - ./code.local.env diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4d0760d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,46 @@ +web: + extends: + file: docker-common.yml + service: code + build: ./dockerfiles/python + command: gunicorn -b 0.0.0.0:8200 --reload app:app + ports: + - "8200:8200" + links: + - "mysql" + - "memcached" + - "redis" + +webpack: + extends: + file: docker-common.yml + service: node + command: bash -c "cp -R /node_modules /code; npm run build; npm run watch" + volumes_from: + - web + +grunt: + extends: + file: docker-common.yml + service: node + command: bash -c "cp -R /node_modules /code; grunt ozma compass:dev; grunt watch" + volumes_from: + - web + +mysql: + build: ./dockerfiles/mysql + env_file: + - ./code.env + - ./code.local.env + ports: + - "3306:3306" + +memcached: + image: memcached:1.4 + ports: + - "11211:11211" + +redis: + image: redis:3.0 + ports: + - "6379:6379" diff --git a/dockerfiles/mysql/Dockerfile b/dockerfiles/mysql/Dockerfile new file mode 100644 index 0000000..cd1aebd --- /dev/null +++ b/dockerfiles/mysql/Dockerfile @@ -0,0 +1,3 @@ +FROM mysql:5.5 + +ADD charset.cnf /etc/mysql/conf.d/charset.cnf diff --git a/dockerfiles/mysql/charset.cnf b/dockerfiles/mysql/charset.cnf new file mode 100644 index 0000000..595a102 --- /dev/null +++ b/dockerfiles/mysql/charset.cnf @@ -0,0 +1,11 @@ +[client] +default-character-set=utf8 + +[mysql] +default-character-set=utf8 + +[mysqld] +skip-character-set-client-handshake +character-set-server=utf8 +collation-server=utf8_general_ci +init-connect=SET NAMES utf8 diff --git a/dockerfiles/node/Dockerfile b/dockerfiles/node/Dockerfile new file mode 100644 index 0000000..6e15c17 --- /dev/null +++ b/dockerfiles/node/Dockerfile @@ -0,0 +1,16 @@ +FROM node:0.10 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ruby-dev \ + rubygems +RUN gem install compass -V + +RUN mkdir /code \ + /node_modules +ADD package.json /code/package.json + +WORKDIR /code +RUN npm install \ + && cp -R node_modules / + +ENV PATH=/code/node_modules/.bin:/code/node_modules/grunt-cli/bin:${PATH} diff --git a/dockerfiles/node/package.json b/dockerfiles/node/package.json new file mode 100644 index 0000000..8514008 --- /dev/null +++ b/dockerfiles/node/package.json @@ -0,0 +1,45 @@ +{ + "name": "code", + "version": "0.0.1", + "description": "Dependencies for code grunt build", + "scripts": { + "build": "webpack --progress --colors", + "watch": "webpack --watch --colors", + "start": "webpack && gunicorn -w 2 -b 0.0.0.0:8200 app:app", + "server": "gunicorn -w 2 -b 0.0.0.0:8200 app:app" + }, + "dependencies": { + "grunt-contrib-clean": "~0.4.0", + "grunt-contrib-watch": "~0.2.0", + "grunt-contrib-compass": "~0.1.2", + "grunt-contrib-copy": "~0.4.0", + "grunt-contrib-uglify": "~0.1.1", + "grunt-ozjs": "~0.3.0", + "react": "~0.14.2", + "react-dom": "~0.14.2", + "classnames": "~2.2.0", + "react-router-component": "~0.28.0" + }, + "devDependencies": { + "grunt": "~0.4.0", + "grunt-cli": "~0.1.6", + "grunt-contrib-compass": "~0.1.3", + "webpack": "~1.12.2", + "css-loader": "~0.21.0", + "extract-text-webpack-plugin": "~0.8.2", + "file-loader": "~0.8.4", + "sass-loader": "~3.1.1", + "node-sass": "~3.4.1", + "underscore": "~1.8.3", + "jquery": "~2.1.4", + "babel-core": "^5.8.22", + "babel-loader": "^5.3.2", + "babelify": "^6.2.0" + }, + "repository": { + "type": "git", + "url": "http://code.dapps.douban.com/code.git" + }, + "author": "huanghuang@douban.com", + "license": "BSD" +} diff --git a/dockerfiles/python/Dockerfile b/dockerfiles/python/Dockerfile new file mode 100644 index 0000000..67eed83 --- /dev/null +++ b/dockerfiles/python/Dockerfile @@ -0,0 +1,11 @@ +FROM python:2.7 + +ENV PYTHONUNBUFFERED 1 + +RUN mkdir /code \ + /pip-src +WORKDIR /code +ADD requirements.txt /code/requirements.txt + +RUN pip install cython \ + && pip install -r requirements.txt --src=/pip-src diff --git a/dockerfiles/python/requirements.txt b/dockerfiles/python/requirements.txt new file mode 100644 index 0000000..21953a8 --- /dev/null +++ b/dockerfiles/python/requirements.txt @@ -0,0 +1,37 @@ +-e git+https://github.com/qingfeng/MySQLdb1@MySQL-python-1.2.4#egg=MySQL-python +Mako==0.9.0 +gevent==1.0.2 +gunicorn==19.4.1 +pytest==2.5.0 +wsgiauth==0.1 +pytz==2013.8 +Werkzeug==0.9.4 +celery==3.1.18 +redis==2.10.3 +blinker==1.4 +PyYAML==3.11 +Sphinx==1.3.1 +PyRSS2Gen==1.1 +requests==2.7.0 +python-dateutil==2.1 +oauth2==1.5.211 +Trolly==0.1.0 +bcrypt==2.0.0 +-e git+https://github.com/qingfeng/misaka@2fbe52692e8f304eea9d8925fd2a857916ff0ea5#egg=misaka +mikoto==0.0.4 +WebTest==2.0.20 +mock==1.3.0 +nose==1.3.7 +docutils==0.12 +-e git+https://github.com/douban/sina.git@fd90a60150545bafd491dfd632d0f8212ae4f622#egg=sina +-e git+https://github.com/douban/douban-utils.git@5ca697545da191dab3fbe308e6b6776d8da83bd5#egg=DoubanUtils +-e git+https://github.com/douban/douban-sqlstore.git@d7136b7cac1075f0b285e8c763af2e85124f8b76#egg=DoubanSQLStore +-e git+https://github.com/dongweiming/douban-mc.git@5a0a21cdb73a448eb09a1b657ad80d4941ddb404#egg=DoubanMC +-e git+https://github.com/douban/douban-orz.git@208b48177dc847ef2afdadfda302868c39797bdf#egg=ORZ +-e git+https://github.com/douban/douban-quixote.git@20cda948580802ee4205b72fe46728de9dda5253#egg=Quixote +-e git+https://github.com/douban/pygit2.git@c7b13237e9934b5620cf0c351ae7eaea7d14ffc3#egg=pygit2 +-e git+https://github.com/douban/ellen.git@e092eddd933a4676c53f016d11782897807f873a#egg=ellen +-e git+https://github.com/douban/libmc.git@06b27e8bf2ae7f75d9817ba917f705c471e45028#egg=libmc +kombu==3.0.33 +billiard==3.3.0.22 +paramiko==1.16.0 diff --git a/package.json b/package.json deleted file mode 100644 index 8514008..0000000 --- a/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "code", - "version": "0.0.1", - "description": "Dependencies for code grunt build", - "scripts": { - "build": "webpack --progress --colors", - "watch": "webpack --watch --colors", - "start": "webpack && gunicorn -w 2 -b 0.0.0.0:8200 app:app", - "server": "gunicorn -w 2 -b 0.0.0.0:8200 app:app" - }, - "dependencies": { - "grunt-contrib-clean": "~0.4.0", - "grunt-contrib-watch": "~0.2.0", - "grunt-contrib-compass": "~0.1.2", - "grunt-contrib-copy": "~0.4.0", - "grunt-contrib-uglify": "~0.1.1", - "grunt-ozjs": "~0.3.0", - "react": "~0.14.2", - "react-dom": "~0.14.2", - "classnames": "~2.2.0", - "react-router-component": "~0.28.0" - }, - "devDependencies": { - "grunt": "~0.4.0", - "grunt-cli": "~0.1.6", - "grunt-contrib-compass": "~0.1.3", - "webpack": "~1.12.2", - "css-loader": "~0.21.0", - "extract-text-webpack-plugin": "~0.8.2", - "file-loader": "~0.8.4", - "sass-loader": "~3.1.1", - "node-sass": "~3.4.1", - "underscore": "~1.8.3", - "jquery": "~2.1.4", - "babel-core": "^5.8.22", - "babel-loader": "^5.3.2", - "babelify": "^6.2.0" - }, - "repository": { - "type": "git", - "url": "http://code.dapps.douban.com/code.git" - }, - "author": "huanghuang@douban.com", - "license": "BSD" -} diff --git a/package.json b/package.json new file mode 120000 index 0000000..96da763 --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +dockerfiles/node/package.json \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index b3f8aa6..0000000 --- a/requirements.txt +++ /dev/null @@ -1,35 +0,0 @@ --e git+https://github.com/qingfeng/MySQLdb1@MySQL-python-1.2.4#egg=MySQL-python -Mako==0.9.0 -gevent==1.0.2 -gunicorn==18.0 -pytest==2.5.0 -wsgiauth==0.1 -pytz==2013.8 -Werkzeug==0.9.4 -celery==3.1.18 -redis==2.10.3 -blinker==1.4 -paramiko==1.15.2 -PyYAML==3.11 -Sphinx==1.3.1 -PyRSS2Gen==1.1 -requests==2.7.0 -python-dateutil==2.1 -oauth2==1.5.211 -Trolly==0.1.0 -bcrypt==2.0.0 --e git+https://github.com/qingfeng/misaka@2fbe52692e8f304eea9d8925fd2a857916ff0ea5#egg=misaka -mikoto==0.0.4 -WebTest==2.0.20 -mock==1.3.0 -nose==1.3.7 -docutils==0.12 --e git+https://github.com/douban/sina.git@c8dbe938d7238ba44851cca36934b07320b0e143#egg=sina --e git+https://github.com/douban/douban-utils.git@5ca697545da191dab3fbe308e6b6776d8da83bd5#egg=DoubanUtils --e git+https://github.com/douban/douban-sqlstore.git@d7136b7cac1075f0b285e8c763af2e85124f8b76#egg=DoubanSQLStore --e git+https://github.com/dongweiming/douban-mc.git@5a0a21cdb73a448eb09a1b657ad80d4941ddb404#egg=DoubanMC --e git+https://github.com/douban/douban-orz.git@208b48177dc847ef2afdadfda302868c39797bdf#egg=ORZ --e git+https://github.com/douban/douban-quixote.git@20cda948580802ee4205b72fe46728de9dda5253#egg=Quixote --e git+https://github.com/douban/pygit2.git@c7b13237e9934b5620cf0c351ae7eaea7d14ffc3#egg=pygit2 --e git+https://github.com/douban/ellen.git@e092eddd933a4676c53f016d11782897807f873a#egg=ellen --e git+https://github.com/douban/libmc.git@06b27e8bf2ae7f75d9817ba917f705c471e45028#egg=libmc diff --git a/requirements.txt b/requirements.txt new file mode 120000 index 0000000..9419887 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +dockerfiles/python/requirements.txt \ No newline at end of file diff --git a/scripts/common.sh b/scripts/common.sh index 14d580e..0212006 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -41,13 +41,3 @@ install_code() { start_app() { test "$CODE_ENV" != "unset" && gunicorn -w 2 -b 127.0.0.1:8000 app:app # web & git http daemon } - -install_beansdb() { - git clone https://github.com/douban/beansdb - cd beansdb - ./autogen.sh - ./configure && make && sudo make install - cd - - sudo mkdir /data/beansdb -p - beansdb -p 7900 -H /data/beansdb -T 0 -d -} diff --git a/scripts/ubuntu.sh b/scripts/ubuntu.sh index 4713b79..b176aba 100755 --- a/scripts/ubuntu.sh +++ b/scripts/ubuntu.sh @@ -14,9 +14,6 @@ echo "Setup memcached port to 11311..." sudo sed -i "s/11211/11311/g" /etc/memcached.conf sudo /etc/init.d/memcached restart -echo "Install beansdb..." -install_beansdb - echo "Install code..." install_code diff --git a/tools/issue_bug.py b/tools/issue_bug.py deleted file mode 100755 index c496d37..0000000 --- a/tools/issue_bug.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from vilya.libs.store import store, bdb - -BDB_ISSUE_DESCRIPTION_KEY = 'issue_description:%s' - - -def main(): - ds = [] - rs = store.execute("select id, project_id, issue_id " - "from project_issues") - for r in rs: - id = r[0] - project_id = r[1] - issue_id = r[2] - description = bdb.get(BDB_ISSUE_DESCRIPTION_KEY % id) - bdb.delete(BDB_ISSUE_DESCRIPTION_KEY % id) - ds.append([issue_id, description]) - - for d in ds: - issue_id = d[0] - description = d[1] - bdb.set(BDB_ISSUE_DESCRIPTION_KEY % issue_id, description) - - -if __name__ == "__main__": - main() diff --git a/vilya/config.py b/vilya/config.py index cd0cd9c..d747078 100644 --- a/vilya/config.py +++ b/vilya/config.py @@ -1,5 +1,6 @@ # coding: utf-8 +import ast import os from os.path import dirname, abspath @@ -18,11 +19,13 @@ # session SESSION_EXPIRE_DAYS = 14 -SESSION_DOMAIN = '' +SESSION_COOKIE_DOMAIN = '' +SESSION_COOKIE_PATH = '/' SESSION_COOKIE_NAME = 'code_user' -MEMCACHED_HOSTS = ['127.0.0.1:11311'] +MEMCACHED_HOSTS = os.environ.get('DOUBAN_CODE_MEMCACHED_HOSTS', + '127.0.0.1:11311').split(',') MEMCACHED_CONFIG = { 'do_split': True, 'comp_threshold': 0, @@ -33,11 +36,13 @@ } DOUBANDB = { - 'servers': ["127.0.0.1:11311", ], - 'proxies': [] + 'servers': os.environ.get('DOUBAN_CODE_DOUBANDB_SERVERS', + '127.0.0.1:11311').split(','), + 'proxies': os.environ.get('DOUBAN_CODE_DOUBANDB_PROXIES', + '').split(',') } -MYSQL_STORE = { +_default_mysql_store = { "farms": { "code_farm": { "master": "localhost:3306:valentine:root:", @@ -45,16 +50,14 @@ } } } +MYSQL_STORE = ast.literal_eval( + os.environ.get('DOUBAN_CODE_MYSQL_STORE', '{}') +) or _default_mysql_store -REDIS_URI = 'redis://localhost:6379/0' -BEANSDBCFG = { - "localhost:7901": range(16), - "localhost:7902": range(16), - "localhost:7903": range(16), -} +REDIS_URI = os.environ.get('DOUBAN_CODE_REDIS_URI', 'redis://localhost:6379/0') -DOMAIN = 'http://127.0.0.1:8200' +DOMAIN = os.environ.get('DOUBAN_CODE_DOMAIN', 'http://127.0.0.1:8200') IRC_SERVER = 'irc.intra.douban.com' IRC_PORT = 12345 SMTP_SERVER = 'mail.douban.com' @@ -73,6 +76,8 @@ # bcrypt_sha256/bcrypt PASSWORD_METHOD = 'bcrypt_sha256' +LOGIN_URL = '/login/' + try: from local_config import * # noqa except ImportError: diff --git a/vilya/libs/auth/decorators.py b/vilya/libs/auth/decorators.py new file mode 100644 index 0000000..7032c85 --- /dev/null +++ b/vilya/libs/auth/decorators.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from functools import wraps + +from vilya.config import LOGIN_URL +from vilya.libs.auth.views import redirect_to_login + +REDIRECT_FIELD_NAME = 'continue' + + +def user_passes_test(test_func, login_url=LOGIN_URL, + redirect_field_name=REDIRECT_FIELD_NAME): + + def decorator(view_func): + @wraps(view_func) + def _wrapped_view(request, *args, **kwargs): + if test_func(request.user): + return view_func(request, *args, **kwargs) + return redirect_to_login(request, request.url, login_url, + redirect_field_name) + return _wrapped_view + return decorator + + +def login_required(func=None, redirect_field_name=REDIRECT_FIELD_NAME, + login_url=LOGIN_URL): + decorator = user_passes_test( + lambda user: user is not None, + login_url=login_url, + redirect_field_name=redirect_field_name + ) + if func: + return decorator(func) + return decorator diff --git a/vilya/libs/auth/views.py b/vilya/libs/auth/views.py new file mode 100644 index 0000000..08613cf --- /dev/null +++ b/vilya/libs/auth/views.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +from urllib import urlencode + + +def redirect_to_login(request, next_path, login_url, redirect_field_name): + url = login_url + '?' + urlencode({redirect_field_name: next_path}) + return request.redirect(url) diff --git a/vilya/libs/dbclient.py b/vilya/libs/dbclient.py deleted file mode 100644 index 7039ea2..0000000 --- a/vilya/libs/dbclient.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/python - -from random import shuffle - -from libmc import Client - - -def fnv1a(s): - prime = 0x01000193 - h = 0x811c9dc5 - for c in s: - h ^= ord(c) - h = (h * prime) & 0xffffffff - return h - - -class MCStore(object): - def __init__(self, server): - self.server = server - self.mc = Client([server], do_split=0) - - def __del__(self): - self.close() - - def __repr__(self): - return '<MCStore(server=%s)>' % repr(self.server) - - def __str__(self): - return self.server - - def set(self, key, data, rev=0): - return bool(self.mc.set(key, data, rev)) - - def set_raw(self, key, data, rev=0, flag=0): # interface for sync data - if rev < 0: - raise str(rev) - return self.mc.set_raw(key, data, rev, flag) - - def get(self, key): - try: - r = self.mc.get(key) - if r is None and self.mc.get_last_error() != 0: - raise IOError(self.mc.get_last_error()) - return r - except ValueError: - self.mc.delete(key) - - def get_raw(self, key): - r, flag = self.mc.get_raw(key) - if r is None and self.mc.get_last_error() != 0: - raise IOError( - self.mc.get_last_error(), self.mc.get_last_strerror()) - return r, flag - - def get_multi(self, keys): - return self.mc.get_multi(keys) - - def delete(self, key): - return bool(self.mc.delete(key)) - - def close(self): - if self.mc is not None: - self.mc = None - - -class WriteFailedError(Exception): - def __init__(self, key): - self.key = key - - def __repr__(self): - return 'write %s failed' % self.key - - -class Beansdb(object): - hash_space = 1 << 32 - cached = True - - def __init__(self, servers, buckets_count=16, N=3, W=1, R=1): - self.buckets_count = buckets_count - self.bucket_size = self.hash_space / buckets_count - self.servers = {} - self.server_buckets = {} - self.buckets = [[] for i in range(buckets_count)] - for s, bs in servers.items(): - server = MCStore(s) - self.servers[s] = server - self.server_buckets[s] = bs - for b in bs: - self.buckets[b].append(server) - for b in range(self.buckets_count): - self.buckets[b].sort(key=lambda x: fnv1a("%d:%s:%d" % (b, x, b))) - self.N = N - self.W = W - self.R = R - - def print_buckets(self): - for i, ss in enumerate(self.buckets): - print i, ','.join(str(s) for s in ss) - for s, bs in self.server_buckets.items(): - print s, len(bs) - - def _get_servers(self, key): - hash = fnv1a(key) - b = hash / self.bucket_size - return self.buckets[b] - - def get(self, key, default=None): - ss = self._get_servers(key) - for i, s in enumerate(ss): - r = s.get(key) - if r is not None: - # self heal - for k in range(i): - ss[k].set(key, r) - return r - return default - - def get_multi(self, keys): - rs = {} - ss = self.servers.values() - shuffle(ss) - for s in ss: - rs.update(s.get_multi( - [k for k in keys if k not in rs and s in self._get_servers(k)] - )) - return rs - - def delete(self, key): - rs = [s.delete(key) for s in self._get_servers(key)] - return rs.count(True) >= self.W - - def set(self, key, value): - rs = [s.set(key, value) for s in self._get_servers(key)] - if not rs.count(True) >= self.W: - # try to get, it will return False when set same content into db - if self.get(key) != value: - raise WriteFailedError(key) - return True diff --git a/vilya/libs/redis2beansdb.py b/vilya/libs/redis2beansdb.py new file mode 100644 index 0000000..8ce506d --- /dev/null +++ b/vilya/libs/redis2beansdb.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +import redis +from vilya.config import REDIS_URI + + +class Beansdb(object): + + def __init__(self): + self.redis = redis.from_url(REDIS_URI) + + def get(self, key, default=None): + data = self.redis.get(key) + if not data: + return default + return data + + def set(self, key, value): + return self.redis.set(key, value) + + def delete(self, key): + return self.redis.delete(key) diff --git a/vilya/libs/session.py b/vilya/libs/session.py index a422c95..7928dd8 100644 --- a/vilya/libs/session.py +++ b/vilya/libs/session.py @@ -1,9 +1,20 @@ # -*- coding: utf-8 -*- - -import os import Cookie from base64 import b64encode -from datetime import timedelta +from datetime import datetime, timedelta +import json +import logging +import os +from time import time + +from quixote import get_publisher, session +import redis + +from vilya.config import REDIS_URI, SESSION_EXPIRE_DAYS + +REDIS = redis.from_url(REDIS_URI) +TTL = SESSION_EXPIRE_DAYS * 24 * 60 * 60 +logger = logging.getLogger(__name__) def randbytes2(bytes): @@ -29,3 +40,147 @@ def format_rfc822_date(dt, localtime=True, cookie_format=False): def format_cookie_date(dt, localtime=True): return format_rfc822_date(dt, localtime=True, cookie_format=True) + + +class SessionManager(session.SessionManager): + + def keys(self): + return [] + + def values(self): + return [] + + def items(self): + return [] + + def get(self, session_id, default=None): + session = self.session_class.get_session(session_id) + if session is None: + session = default + return session + + def __getitem__(self, session_id): + return self.get(session_id) + + def has_key(self, session_id): + return self.get(session_id) is not None + + has_session = has_key + + def __setitem__(self, session_id, session): + if not isinstance(session, self.session_class): + raise TypeError("session not an instance of %r: %r" + % (self.session_class, session)) + assert session.id is not None, "session ID not set" + assert session_id == session.id, "session ID mismatch" + session.save() + + def __delitem__(self, session_id): + self.session_class.delete_session(session_id) + + def _make_session_id(self): + session_id = None + while session_id is None or self.has_session(session_id): + session_id = session.randbytes(16) + return session_id + + def get_session(self, request): + config = get_publisher().config + session_id = self._get_session_id(request, config) + session = None + if session_id is not None: + session = self.get(session_id) + if session is not None and ( + config.check_session_addr and + session.get_remote_address() != + request.get_environ("REMOTE_ADDR") + ): + logger.debug("Remote IP address does not match the " + "IP address that created the session(%s)", + session_id) + session = None + + if session is None: + session = self._create_session(request) + + session._set_access_time(self.ACCESS_TIME_RESOLUTION) + return session + + def set_session_cookie(self, request, session_id): + dt = datetime.now() + timedelta(days=SESSION_EXPIRE_DAYS) + kwargs = { + 'expires': format_cookie_date(dt, True), + 'httponly': True + } + self._set_cookie(request, session_id, **kwargs) + + +class Session(session.Session): + + def __init__(self, request, id): + self.redis = REDIS + self.ttl = TTL + self.id = id + self.user = None + if request is not None: + self._remote_address = request.get_environ("REMOTE_ADDR") + self._creation_time = self._access_time = time() + self._form_tokens = [] # queue + + def _set_access_time(self, resolution): + session.Session._set_access_time(self, resolution) + self.save() + + def create_form_token(self): + token = session.Session.create_form_token(self) + self.save() + return token + + def remove_form_token(self, token): + session.Session.remove_form_token(self, token) + self.save() + + @staticmethod + def redis_key(session_id): + return 'session:' + str(session_id) + + @classmethod + def get_session(cls, session_id): + value = REDIS.get(cls.redis_key(session_id)) + if value is not None: + return cls.loads(value) + + @classmethod + def delete_session(cls, session_id): + return REDIS.delete(cls.redis_key(session_id)) + + def save(self): + data = self.dumps() + self.redis.set(self.redis_key(self.id), data, ex=self.ttl) + + def dumps(self): + return json.dumps({ + 'id': self.id, + 'user': self.user, + '_form_tokens': self._form_tokens, + '_remote_address': self._remote_address, + '_creation_time': self._creation_time, + '_access_time': getattr(self, '_access_time', None) + }) + + @classmethod + def loads(cls, data): + if isinstance(data, basestring): + dct = json.loads(data) + else: + dct = data + session = cls(None, dct['id']) + session.redis = REDIS + session.ttl = TTL + session.user = dct['user'] + session._form_tokens = dct['_form_tokens'] + session._remote_address = dct['_remote_address'] + session._creation_time = dct['_creation_time'] + if dct['_access_time']: + session._access_time = dct['_access_time'] + return session diff --git a/vilya/libs/store.py b/vilya/libs/store.py index cb28685..71963f7 100644 --- a/vilya/libs/store.py +++ b/vilya/libs/store.py @@ -7,9 +7,12 @@ from ORZ import setup, OrzField, OrzBase # noqa from douban.mc import create_decorators from douban.sqlstore import store_from_config -from .dbclient import Beansdb +from redis2beansdb import Beansdb from vilya.config import ( - MEMCACHED_HOSTS, MEMCACHED_CONFIG, MYSQL_STORE, BEANSDBCFG) + MEMCACHED_HOSTS, + MEMCACHED_CONFIG, + MYSQL_STORE, +) logging.getLogger().setLevel(logging.DEBUG) @@ -52,7 +55,7 @@ def get_mc(): def get_db(): - return Beansdb(BEANSDBCFG, 16) + return Beansdb() def stub_cache(*args, **kws): @@ -87,11 +90,13 @@ def reset_mc(deep=False): getattr(mc.mc, 'clear', lambda: True)() +# TODO(xutao) delete reset_beansdb? def reset_beansdb(): for db in _clients.itervalues(): db.clear_cache() +# FIXME(xutao) rename to clear_mc_for_test? def clear_beansdb_for_test(): for db in _clients.itervalues(): db.clear_cache() @@ -100,7 +105,7 @@ def clear_beansdb_for_test(): if clear: clear() - +# FIXME(xutao) I can't find any code about put beansdb client to `_clients`, and beansdb shouldn't be clear after request def clear_local_cache(): reset_mc() reset_beansdb() diff --git a/vilya/libs/text.py b/vilya/libs/text.py index 06ea05d..12619a9 100644 --- a/vilya/libs/text.py +++ b/vilya/libs/text.py @@ -76,8 +76,8 @@ def is_binary(fname): def gravatar_url(email, size=80): # 线上尺寸图已有size: (48, 64, 80) - default = "http://img3.douban.com/icon/user_normal.jpg" - url = "http://douvatar.dapps.douban.com/avatar/" + hashlib.md5( + default = "http://www.gravatar.com/avatar" + url = "http://www.gravatar.com/avatar/" + hashlib.md5( email.encode('utf8').lower()).hexdigest() + "?" url += urllib.urlencode({'d': default, 's': str(size), 'r': 'x'}) return url diff --git a/vilya/models/project.py b/vilya/models/project.py index 784d779..ca73959 100644 --- a/vilya/models/project.py +++ b/vilya/models/project.py @@ -30,7 +30,6 @@ from vilya.models.lru_counter import ( ProjectOwnLRUCounter, ProjectWatchLRUCounter) from vilya.models.milestone import Milestone -from vilya.models.utils.switch import WhiteListSwitch from ellen.utils import JagareError from vilya.models.nproject import ProjectWatcher @@ -82,20 +81,6 @@ def __hash__(self): def __str__(self): return self.name - @property - def dashboard_enabled(self): - dashboard_enabled_switch = WhiteListSwitch( - 'DASHBOARD_ENABLED_PROJECTS') - enabled_projects = dashboard_enabled_switch.get() - return self.name in enabled_projects - - @property - def deploy_link_enabled(self): - deploy_link_enabled_switch = WhiteListSwitch( - 'DEPLOY_LINK_ENABLED_PROJECTS') - enabled_projects = deploy_link_enabled_switch.get() - return self.name in enabled_projects - @property def url(self): return '/%s/' % self.name diff --git a/vilya/models/utils/switch.py b/vilya/models/utils/switch.py deleted file mode 100644 index 536e11a..0000000 --- a/vilya/models/utils/switch.py +++ /dev/null @@ -1,38 +0,0 @@ -# coding: utf-8 - -from vilya.libs.store import bdb - - -class WhiteListSwitch(object): - - DBKEY_SWITCH_PREFIX = "SWITCH_" - - def __init__(self, name): - self.name = name - - @property - def dbkey(self): - return "%s%s" % (self.DBKEY_SWITCH_PREFIX, self.name) - - def get(self): - return bdb.get(self.dbkey, []) - - def set(self, white_list): - bdb.set(self.dbkey, white_list) - return bdb.get(self.dbkey, []) - - def add(self, one): - white_list = bdb.get(self.dbkey, []) - if one not in white_list: - white_list.append(one) - bdb.set(self.dbkey, white_list) - return bdb.get(self.dbkey, []) - return white_list - - def remove(self, one): - white_list = bdb.get(self.dbkey, []) - if one in white_list: - white_list.remove(one) - bdb.set(self.dbkey, white_list) - return bdb.get(self.dbkey, []) - return white_list diff --git a/vilya/templates/search/base.html b/vilya/templates/search/base.html index b03502f..82b3d99 100644 --- a/vilya/templates/search/base.html +++ b/vilya/templates/search/base.html @@ -1,8 +1,8 @@ <%inherit file="/base.html" /> <%! + from hub.static import static from vilya.libs.text import plural from vilya.models.user import User - from vilya.hub.static import static from vilya.models.elastic.consts import (K_REPO, K_CODE, K_USER, K_DOC, K_PULL, K_ISSUE, SEARCH_KINDS, SEARCH_KIND_NAMES, SEARCH_KIND_ICON_NAMES) %> diff --git a/vilya/templates/widgets/pagehead.html b/vilya/templates/widgets/pagehead.html index 03a3165..63e66d3 100644 --- a/vilya/templates/widgets/pagehead.html +++ b/vilya/templates/widgets/pagehead.html @@ -25,11 +25,6 @@ <h2 class="pull-left"> </a> % endif - % if project.dashboard_enabled: - <a href="http://electro.dapps.douban.com/admin/project/${project.name}/"> - <img src="http://electro.dapps.douban.com/api/maturity/${project.name}/level/badge"> - </a> - % endif </h2> <div class="metanav pull-right"> % if user: @@ -63,11 +58,6 @@ <h2 class="pull-left"> <div class="container"> <ul class="nav nav-tables"> <li class="${'active' if active == 'source' else ''} first"><a href="/${project.name}">Code</a></li> - % if project.dashboard_enabled: - <li class="${'active' if active == 'dashboard' else ''}"> - <a href="/${project.name}/dashboard">Dashboard</a> - </li> - % endif % if project.conf['docs']: % for doc, vals in sorted(project.conf['docs'].items(), key=lambda x: x[1].get('sort', x[0])): <li class="hidden-phone"><a class="tab_docs" href="/${project.name}/docs/${doc}">${vals.get('name', doc)}</a></li> diff --git a/vilya/templates/widgets/pagehead.mako b/vilya/templates/widgets/pagehead.mako index 98f0754..36c2e1a 100644 --- a/vilya/templates/widgets/pagehead.mako +++ b/vilya/templates/widgets/pagehead.mako @@ -59,11 +59,6 @@ </a> % endif - % if project.dashboard_enabled: - <a href="http://electro.dapps.douban.com/admin/project/${project.name}/"> - <img src="http://electro.dapps.douban.com/api/maturity/${project.name}/level/badge"> - </a> - % endif </h1> <div class="metanav pull-right"> % if user: @@ -121,11 +116,6 @@ <div id="mainnav" class="subnav"> <ul class="nav nav-pills"> <li class="${'active' if active == 'source' else ''} first"><a href="/${project.name}">Code</a></li> - % if project.dashboard_enabled: - <li class="${'active' if active == 'dashboard' else ''}"> - <a href="/${project.name}/dashboard">Dashboard</a> - </li> - % endif % for dname, dpath, ddisp, _ in project.doc_tabs(): <li class="${'active' if active == dname else ''} hidden-phone"><a class="tab_docs" href="/${project.name}${dpath}">${ddisp}</a></li> % endfor diff --git a/vilya/templates/widgets/pjax_source.html b/vilya/templates/widgets/pjax_source.html index 7ac8848..efa5986 100644 --- a/vilya/templates/widgets/pjax_source.html +++ b/vilya/templates/widgets/pjax_source.html @@ -424,10 +424,6 @@ <h3 class="history"> <span class="sha">${c.sha[:10]}</span> </a> <br> - % if project.deploy_link_enabled: - <a href="http://bridge.dapps.douban.com/app/${project.name}/deploy#${c.sha}" class="browse-button" title="Deploy via dae-deploy" rel="nofollow" target='_blank'>Deploy</a> - <span style="color:#CCC">●</span> - % endif <a href="/${project.name}/tree/${c.sha}" class="browse-button" title="Browse the code at this point in the history" rel="nofollow">Browse</a> <span style="color:#CCC">●</span> <a href="/${project.name}/compare/${c.sha[:10]}...master" data-ref="${c.sha[:10]}" class="compare-button" title="compare code from this commit to master" rel="nofollow">Compare</a> diff --git a/vilya/views/settings/__init__.py b/vilya/views/settings/__init__.py index c48e46d..887a297 100644 --- a/vilya/views/settings/__init__.py +++ b/vilya/views/settings/__init__.py @@ -2,11 +2,13 @@ from __future__ import absolute_import +from vilya.libs.auth.decorators import login_required from vilya.models.user import User _q_exports = ['emails', 'github', 'notification', 'ssh', 'codereview'] +@login_required def _q_index(request): return request.redirect("/settings/emails") diff --git a/vilya/views/settings/codereview.py b/vilya/views/settings/codereview.py index 3a96eb7..794c105 100644 --- a/vilya/views/settings/codereview.py +++ b/vilya/views/settings/codereview.py @@ -1,16 +1,19 @@ # -*- coding: utf-8 -*- import json +from vilya.libs.auth.decorators import login_required from vilya.libs.template import st _q_exports = ['setting', ] +@login_required def _q_index(request): user = request.user return st('settings/codereview.html', **locals()) +@login_required def setting(request): is_enable = request.get_form_var('is_enable') field = request.get_form_var('field') diff --git a/vilya/views/settings/emails.py b/vilya/views/settings/emails.py index bd8c348..19aa93f 100644 --- a/vilya/views/settings/emails.py +++ b/vilya/views/settings/emails.py @@ -2,12 +2,14 @@ from __future__ import absolute_import +from vilya.libs.auth.decorators import login_required from vilya.libs.template import st from vilya.models.user import CodeDoubanUserEmails _q_exports = [] +@login_required def _q_index(request): errors = [] user = request.user @@ -21,6 +23,7 @@ def _q_index(request): return st('/settings/emails.html', **locals()) +@login_required def _q_lookup(request, email_id): user = request.user return EmailUI(user, email_id) diff --git a/vilya/views/settings/github.py b/vilya/views/settings/github.py index 2ef1fcc..918bc43 100644 --- a/vilya/views/settings/github.py +++ b/vilya/views/settings/github.py @@ -2,12 +2,14 @@ from __future__ import absolute_import +from vilya.libs.auth.decorators import login_required from vilya.libs.template import st from vilya.models.user import CodeDoubanUserGithub _q_exports = [] +@login_required def _q_index(request): errors = [] user = request.user @@ -21,6 +23,7 @@ def _q_index(request): return st('/settings/github.html', **locals()) +@login_required def _q_lookup(request, github_id): if request.get_form_var('_method') == 'delete': user = request.user diff --git a/vilya/views/settings/notification.py b/vilya/views/settings/notification.py index ea46d31..c8d4f2e 100644 --- a/vilya/views/settings/notification.py +++ b/vilya/views/settings/notification.py @@ -1,16 +1,19 @@ # -*- coding: utf-8 -*- import json +from vilya.libs.auth.decorators import login_required from vilya.libs.template import st _q_exports = ['setting', ] +@login_required def _q_index(request): user = request.user return st('settings/notification.html', **locals()) +@login_required def setting(request): is_on = request.get_form_var('is_on') notifications_meta = request.get_form_var('notifications_meta') diff --git a/vilya/views/settings/ssh.py b/vilya/views/settings/ssh.py index 696414f..289e64e 100644 --- a/vilya/views/settings/ssh.py +++ b/vilya/views/settings/ssh.py @@ -2,12 +2,14 @@ from __future__ import absolute_import +from vilya.libs.auth.decorators import login_required from vilya.libs.template import st from vilya.models.sshkey import SSHKey _q_exports = [] +@login_required def _q_index(request): errors = [] key_lines = '' @@ -40,6 +42,7 @@ def _q_index(request): return st('/settings/ssh.html', **locals()) +@login_required def _q_lookup(request, sshkey_id): if request.get_form_var('_method') == 'delete': user = request.user diff --git a/web.py b/web.py index 5062b70..86ac2ed 100644 --- a/web.py +++ b/web.py @@ -11,10 +11,14 @@ from werkzeug.debug import DebuggedApplication from vilya import views as controllers -from vilya.config import DEVELOP_MODE +from vilya.config import ( + DEVELOP_MODE, SESSION_COOKIE_NAME, SESSION_COOKIE_PATH, + SESSION_COOKIE_DOMAIN +) from vilya.libs.gzipper import make_gzip_middleware from vilya.libs.permdir import get_tmpdir from vilya.libs.import_obj import import_obj_set +from vilya.libs.session import Session, SessionManager from vilya.libs.template import st from vilya.libs.auth.check_auth import check_auth from vilya.models.user import User @@ -28,7 +32,10 @@ def __init__(self, *args, **kwargs): self.configure(DISPLAY_EXCEPTIONS='plain', SECURE_ERRORS=0, DEBUG_PROPAGATE_EXCEPTIONS=DEVELOP_MODE, - UPLOAD_DIR=get_tmpdir() + '/upload/') + UPLOAD_DIR=get_tmpdir() + '/upload/', + SESSION_COOKIE_NAME=SESSION_COOKIE_NAME, + SESSION_COOKIE_DOMAIN=SESSION_COOKIE_DOMAIN, + SESSION_COOKIE_PATH=SESSION_COOKIE_PATH) def start_request(self, request): SessionPublisher.start_request(self, request) @@ -71,7 +78,7 @@ def _generate_cgitb_error(self, request, original_response, def create_publisher(): - return CODEPublisher(controllers) + return CODEPublisher(controllers, session_mgr=SessionManager(Session)) app = make_gzip_middleware(QWIP(create_publisher())) if DEVELOP_MODE: